@keboola/api-client 27.0.0 → 29.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 (838) hide show
  1. package/AGENTS.md +145 -11
  2. package/API-SURFACE.md +8 -1
  3. package/README.md +53 -18
  4. package/dist/ManagementClientAuthError-B97OtOQ7.js +15 -0
  5. package/dist/ManagementClientAuthError-B97OtOQ7.js.map +1 -0
  6. package/dist/ManagementClientAuthError-ZJ2-RoKT.cjs +20 -0
  7. package/dist/ManagementClientAuthError-ZJ2-RoKT.cjs.map +1 -0
  8. package/dist/QueryJobTimeoutError-C7JbNGOM.js +38 -0
  9. package/dist/QueryJobTimeoutError-C7JbNGOM.js.map +1 -0
  10. package/dist/QueryJobTimeoutError-CVNPdCWX.cjs +61 -0
  11. package/dist/QueryJobTimeoutError-CVNPdCWX.cjs.map +1 -0
  12. package/dist/SyncActionError-BG0zwchi.cjs +35 -0
  13. package/dist/SyncActionError-BG0zwchi.cjs.map +1 -0
  14. package/dist/SyncActionError-CoZFsdUk.js +24 -0
  15. package/dist/SyncActionError-CoZFsdUk.js.map +1 -0
  16. package/dist/UserError-By_Zckmc.js +10 -0
  17. package/dist/UserError-By_Zckmc.js.map +1 -0
  18. package/dist/UserError-CSGO1qII.cjs +15 -0
  19. package/dist/UserError-CSGO1qII.cjs.map +1 -0
  20. package/dist/ValidationError-CzPWydEb.js +44 -0
  21. package/dist/ValidationError-CzPWydEb.js.map +1 -0
  22. package/dist/ValidationError-h5qvwahi.cjs +61 -0
  23. package/dist/ValidationError-h5qvwahi.cjs.map +1 -0
  24. package/dist/adminRoles-B40yBcmq.js +14 -0
  25. package/dist/adminRoles-B40yBcmq.js.map +1 -0
  26. package/dist/adminRoles-C696kD_U.d.cts +14 -0
  27. package/dist/adminRoles-C696kD_U.d.ts +14 -0
  28. package/dist/adminRoles-CO7J5qAy.cjs +19 -0
  29. package/dist/adminRoles-CO7J5qAy.cjs.map +1 -0
  30. package/dist/ai/index.cjs +62 -12
  31. package/dist/ai/index.cjs.map +1 -1
  32. package/dist/ai/index.d.cts +52 -53
  33. package/dist/ai/index.d.ts +52 -53
  34. package/dist/ai/index.js +62 -4
  35. package/dist/ai/index.js.map +1 -1
  36. package/dist/ai/types.cjs +0 -4
  37. package/dist/ai/types.d.cts +2 -2
  38. package/dist/ai/types.d.ts +2 -2
  39. package/dist/ai/types.js +1 -3
  40. package/dist/appLogs-CNG3yby-.cjs +153 -0
  41. package/dist/appLogs-CNG3yby-.cjs.map +1 -0
  42. package/dist/appLogs-Dl5BcCSD.d.cts +10 -0
  43. package/dist/appLogs-VdgP08aX.d.ts +10 -0
  44. package/dist/appLogs-enL9XR9r.js +132 -0
  45. package/dist/appLogs-enL9XR9r.js.map +1 -0
  46. package/dist/apps/index.cjs +229 -14
  47. package/dist/apps/index.cjs.map +1 -1
  48. package/dist/apps/index.d.cts +219 -220
  49. package/dist/apps/index.d.ts +219 -220
  50. package/dist/apps/index.js +229 -6
  51. package/dist/apps/index.js.map +1 -1
  52. package/dist/apps/types.cjs +0 -4
  53. package/dist/apps/types.d.cts +3 -3
  54. package/dist/apps/types.d.ts +3 -3
  55. package/dist/apps/types.js +1 -3
  56. package/dist/assets/index.cjs +33 -38
  57. package/dist/assets/index.cjs.map +1 -1
  58. package/dist/assets/index.d.cts +22 -22
  59. package/dist/assets/index.d.ts +22 -22
  60. package/dist/assets/index.js +32 -36
  61. package/dist/assets/index.js.map +1 -1
  62. package/dist/assets/schema.cjs +23 -13
  63. package/dist/assets/schema.cjs.map +1 -1
  64. package/dist/assets/schema.d.cts +29 -28
  65. package/dist/assets/schema.d.ts +29 -28
  66. package/dist/assets/schema.js +21 -2
  67. package/dist/assets/schema.js.map +1 -1
  68. package/dist/auth/index.cjs +14 -57
  69. package/dist/auth/index.d.cts +2 -318
  70. package/dist/auth/index.d.ts +2 -318
  71. package/dist/auth/index.js +2 -4
  72. package/dist/auth/types.cjs +0 -4
  73. package/dist/auth/types.d.cts +2 -7
  74. package/dist/auth/types.d.ts +2 -7
  75. package/dist/auth/types.js +1 -3
  76. package/dist/auth-5HCvCsZO.cjs +18 -0
  77. package/dist/auth-5HCvCsZO.cjs.map +1 -0
  78. package/dist/auth-D2jfNlpX.js +13 -0
  79. package/dist/{chunk-5A3AQIXR.js.map → auth-D2jfNlpX.js.map} +1 -1
  80. package/dist/authClient-Bgj2Ay7h.d.cts +320 -0
  81. package/dist/authClient-DOk6VKdV.js +332 -0
  82. package/dist/authClient-DOk6VKdV.js.map +1 -0
  83. package/dist/authClient-Dsd7W99W.d.ts +320 -0
  84. package/dist/authClient-Z8Eg8rlN.cjs +405 -0
  85. package/dist/authClient-Z8Eg8rlN.cjs.map +1 -0
  86. package/dist/backends-DKBz5OxE.d.cts +9 -0
  87. package/dist/backends-DKBz5OxE.d.ts +9 -0
  88. package/dist/chat/index.cjs +134 -13
  89. package/dist/chat/index.cjs.map +1 -1
  90. package/dist/chat/index.d.cts +49 -51
  91. package/dist/chat/index.d.ts +49 -51
  92. package/dist/chat/index.js +134 -5
  93. package/dist/chat/index.js.map +1 -1
  94. package/dist/chat/suggestions.cjs +152 -74
  95. package/dist/chat/suggestions.cjs.map +1 -1
  96. package/dist/chat/suggestions.d.cts +2 -437
  97. package/dist/chat/suggestions.d.ts +2 -437
  98. package/dist/chat/suggestions.js +136 -2
  99. package/dist/chat/suggestions.js.map +1 -1
  100. package/dist/chat/types.cjs +6 -8
  101. package/dist/chat/types.cjs.map +1 -1
  102. package/dist/chat/types.d.cts +2 -3
  103. package/dist/chat/types.d.ts +2 -3
  104. package/dist/chat/types.js +5 -6
  105. package/dist/chat/types.js.map +1 -1
  106. package/dist/componentId-DkyQ8PM0.cjs +73 -0
  107. package/dist/componentId-DkyQ8PM0.cjs.map +1 -0
  108. package/dist/componentId-vJz-kWs6.js +68 -0
  109. package/dist/componentId-vJz-kWs6.js.map +1 -0
  110. package/dist/concurrent-CH9fbNr3.js +34 -0
  111. package/dist/concurrent-CH9fbNr3.js.map +1 -0
  112. package/dist/concurrent-tbiIa0UL.cjs +39 -0
  113. package/dist/concurrent-tbiIa0UL.cjs.map +1 -0
  114. package/dist/configurations-Byt59bIa.js +726 -0
  115. package/dist/configurations-Byt59bIa.js.map +1 -0
  116. package/dist/configurations-CujCwDcB.cjs +743 -0
  117. package/dist/configurations-CujCwDcB.cjs.map +1 -0
  118. package/dist/configurations-DCOJONZZ.cjs +313 -0
  119. package/dist/configurations-DCOJONZZ.cjs.map +1 -0
  120. package/dist/configurations-iCbhe0tb.js +158 -0
  121. package/dist/configurations-iCbhe0tb.js.map +1 -0
  122. package/dist/constants/index.cjs +10 -34
  123. package/dist/constants/index.d.cts +4 -104
  124. package/dist/constants/index.d.ts +4 -104
  125. package/dist/constants/index.js +4 -5
  126. package/dist/constants-CqyyBkXW.cjs +197 -0
  127. package/dist/constants-CqyyBkXW.cjs.map +1 -0
  128. package/dist/constants-_HhqKvBg.js +174 -0
  129. package/dist/constants-_HhqKvBg.js.map +1 -0
  130. package/dist/createFetchClient-BK0TZK-U.js +184 -0
  131. package/dist/createFetchClient-BK0TZK-U.js.map +1 -0
  132. package/dist/createFetchClient-BsG719K1.cjs +263 -0
  133. package/dist/createFetchClient-BsG719K1.cjs.map +1 -0
  134. package/dist/createGenericFetchClient-CVZYekDk.js +7 -0
  135. package/dist/createGenericFetchClient-CVZYekDk.js.map +1 -0
  136. package/dist/createGenericFetchClient-DLbjX0eM.cjs +12 -0
  137. package/dist/createGenericFetchClient-DLbjX0eM.cjs.map +1 -0
  138. package/dist/createOpenapiFetchClient-B5U1fCHS.js +7 -0
  139. package/dist/createOpenapiFetchClient-B5U1fCHS.js.map +1 -0
  140. package/dist/createOpenapiFetchClient-Cr90VXY4.cjs +12 -0
  141. package/dist/createOpenapiFetchClient-Cr90VXY4.cjs.map +1 -0
  142. package/dist/createStore-BNiCRQXa.js +148 -0
  143. package/dist/createStore-BNiCRQXa.js.map +1 -0
  144. package/dist/createStore-MQbboXcB.cjs +177 -0
  145. package/dist/createStore-MQbboXcB.cjs.map +1 -0
  146. package/dist/credential-0c6yFwtp.cjs +44 -0
  147. package/dist/credential-0c6yFwtp.cjs.map +1 -0
  148. package/dist/credential-kEGLnVez.js +33 -0
  149. package/dist/credential-kEGLnVez.js.map +1 -0
  150. package/dist/dataScience/index.cjs +5 -20
  151. package/dist/dataScience/index.d.cts +3 -209
  152. package/dist/dataScience/index.d.ts +3 -209
  153. package/dist/dataScience/index.js +3 -7
  154. package/dist/dataScience/types.cjs +0 -4
  155. package/dist/dataScience/types.d.cts +3 -2172
  156. package/dist/dataScience/types.d.ts +3 -2172
  157. package/dist/dataScience/types.js +1 -3
  158. package/dist/dataScience-C-JrA0Uk.cjs +114 -0
  159. package/dist/dataScience-C-JrA0Uk.cjs.map +1 -0
  160. package/dist/dataScience-CE0pSWbl.js +109 -0
  161. package/dist/dataScience-CE0pSWbl.js.map +1 -0
  162. package/dist/dedupe-CiskLkGR.cjs +30 -0
  163. package/dist/dedupe-CiskLkGR.cjs.map +1 -0
  164. package/dist/dedupe-DYIHgZoG.js +25 -0
  165. package/dist/dedupe-DYIHgZoG.js.map +1 -0
  166. package/dist/developerPortal/index.cjs +6 -0
  167. package/dist/developerPortal/index.d.cts +3 -0
  168. package/dist/developerPortal/index.d.ts +3 -0
  169. package/dist/developerPortal/index.js +2 -0
  170. package/dist/developerPortal/types.cjs +0 -0
  171. package/dist/developerPortal/types.d.cts +2 -0
  172. package/dist/developerPortal/types.d.ts +2 -0
  173. package/dist/developerPortal/types.js +1 -0
  174. package/dist/developerPortalClient-BPPEAdJW.js +485 -0
  175. package/dist/developerPortalClient-BPPEAdJW.js.map +1 -0
  176. package/dist/developerPortalClient-C8oq48xW.cjs +508 -0
  177. package/dist/developerPortalClient-C8oq48xW.cjs.map +1 -0
  178. package/dist/domain/permissions/index.cjs +31 -122
  179. package/dist/domain/permissions/index.d.cts +19 -52
  180. package/dist/domain/permissions/index.d.ts +19 -52
  181. package/dist/domain/permissions/index.js +3 -5
  182. package/dist/domain/storageTable/index.cjs +4 -16
  183. package/dist/domain/storageTable/index.d.cts +2 -131
  184. package/dist/domain/storageTable/index.d.ts +2 -131
  185. package/dist/domain/storageTable/index.js +2 -3
  186. package/dist/editor/index.cjs +96 -12
  187. package/dist/editor/index.cjs.map +1 -1
  188. package/dist/editor/index.d.cts +163 -164
  189. package/dist/editor/index.d.ts +163 -164
  190. package/dist/editor/index.js +96 -4
  191. package/dist/editor/index.js.map +1 -1
  192. package/dist/editor/types.cjs +0 -4
  193. package/dist/editor/types.d.cts +2 -2
  194. package/dist/editor/types.d.ts +2 -2
  195. package/dist/editor/types.js +1 -3
  196. package/dist/encryption/index.cjs +58 -11
  197. package/dist/encryption/index.cjs.map +1 -1
  198. package/dist/encryption/index.d.cts +2 -20
  199. package/dist/encryption/index.d.ts +2 -20
  200. package/dist/encryption/index.js +58 -3
  201. package/dist/encryption/index.js.map +1 -1
  202. package/dist/encryption/types.cjs +0 -4
  203. package/dist/encryption/types.d.cts +2 -69
  204. package/dist/encryption/types.d.ts +2 -69
  205. package/dist/encryption/types.js +1 -3
  206. package/dist/generateUUID-C6qKBPIv.cjs +11 -0
  207. package/dist/generateUUID-C6qKBPIv.cjs.map +1 -0
  208. package/dist/generateUUID-Dr8l-aoc.js +6 -0
  209. package/dist/generateUUID-Dr8l-aoc.js.map +1 -0
  210. package/dist/import/index.cjs +3 -14
  211. package/dist/import/index.d.cts +41 -41
  212. package/dist/import/index.d.ts +41 -41
  213. package/dist/import/index.js +2 -5
  214. package/dist/import-Cf0W-7YD.js +116 -0
  215. package/dist/import-Cf0W-7YD.js.map +1 -0
  216. package/dist/import-KLH1uRtx.cjs +121 -0
  217. package/dist/import-KLH1uRtx.cjs.map +1 -0
  218. package/dist/index-8pN6Emos.d.ts +218 -0
  219. package/dist/index-BEKaJ7Cc.d.cts +1388 -0
  220. package/dist/index-BMqLPS6S.d.cts +135 -0
  221. package/dist/index-BMqLPS6S.d.ts +135 -0
  222. package/dist/index-BWBScAYc.d.cts +16 -0
  223. package/dist/index-BmjeNd9u.d.ts +1075 -0
  224. package/dist/index-BthgbVdd.d.ts +31 -0
  225. package/dist/index-CLPrlyIz.d.cts +218 -0
  226. package/dist/index-CXQRvZ-f.d.cts +31 -0
  227. package/dist/index-CeistZnj.d.ts +1388 -0
  228. package/dist/index-Cfrl7sd5.d.ts +65 -0
  229. package/dist/index-DIM8KZly.d.ts +16 -0
  230. package/dist/index-DNlX-H1V.d.ts +208 -0
  231. package/dist/index-DVsnxZap.d.cts +65 -0
  232. package/dist/index-DXi6wsr5.d.cts +77 -0
  233. package/dist/index-DYQt4zxC.d.ts +77 -0
  234. package/dist/index-DplMbm9E.d.cts +19882 -0
  235. package/dist/index-Dwp8tF6O.d.ts +19882 -0
  236. package/dist/index-IN0qzs52.d.cts +208 -0
  237. package/dist/index-KKJkrxjx.d.ts +26 -0
  238. package/dist/index-NC1dXRTD.d.cts +40 -0
  239. package/dist/index-NC1dXRTD.d.ts +40 -0
  240. package/dist/index-WQkVzx5e.d.cts +1075 -0
  241. package/dist/index-eEBVG5s3.d.cts +26 -0
  242. package/dist/index-vb9Rfqca.d.cts +115 -0
  243. package/dist/index-vb9Rfqca.d.ts +115 -0
  244. package/dist/index.cjs +1726 -1884
  245. package/dist/index.cjs.map +1 -1
  246. package/dist/index.d.cts +7 -15778
  247. package/dist/index.d.ts +7 -15778
  248. package/dist/index.js +1676 -1724
  249. package/dist/index.js.map +1 -1
  250. package/dist/isPlainObject-BB3iy87C.cjs +16 -0
  251. package/dist/isPlainObject-BB3iy87C.cjs.map +1 -0
  252. package/dist/isPlainObject-LYW-03uB.js +11 -0
  253. package/dist/isPlainObject-LYW-03uB.js.map +1 -0
  254. package/dist/jobStatus-DbMupQEK.js +423 -0
  255. package/dist/jobStatus-DbMupQEK.js.map +1 -0
  256. package/dist/jobStatus-kQ9JqF8t.cjs +494 -0
  257. package/dist/jobStatus-kQ9JqF8t.cjs.map +1 -0
  258. package/dist/management/index.cjs +4 -18
  259. package/dist/management/index.d.cts +2 -1076
  260. package/dist/management/index.d.ts +2 -1076
  261. package/dist/management/index.js +2 -5
  262. package/dist/management/types.cjs +0 -4
  263. package/dist/management/types.d.cts +2 -12
  264. package/dist/management/types.d.ts +2 -12
  265. package/dist/management/types.js +1 -3
  266. package/dist/management-DqwQcDCx.js +1065 -0
  267. package/dist/management-DqwQcDCx.js.map +1 -0
  268. package/dist/management-WOmlBt6H.cjs +1076 -0
  269. package/dist/management-WOmlBt6H.cjs.map +1 -0
  270. package/dist/metastore/index.cjs +3 -14
  271. package/dist/metastore/index.d.cts +2 -32
  272. package/dist/metastore/index.d.ts +2 -32
  273. package/dist/metastore/index.js +2 -5
  274. package/dist/metastore/types.cjs +0 -4
  275. package/dist/metastore/types.d.cts +2 -2
  276. package/dist/metastore/types.d.ts +2 -2
  277. package/dist/metastore/types.js +1 -3
  278. package/dist/metastore-CNEhL66f.js +134 -0
  279. package/dist/metastore-CNEhL66f.js.map +1 -0
  280. package/dist/metastore-CkQluyX1.cjs +139 -0
  281. package/dist/metastore-CkQluyX1.cjs.map +1 -0
  282. package/dist/notifications/index.cjs +67 -13
  283. package/dist/notifications/index.cjs.map +1 -1
  284. package/dist/notifications/index.d.cts +56 -57
  285. package/dist/notifications/index.d.ts +56 -57
  286. package/dist/notifications/index.js +67 -5
  287. package/dist/notifications/index.js.map +1 -1
  288. package/dist/notifications/types.cjs +0 -4
  289. package/dist/notifications/types.d.cts +2 -2
  290. package/dist/notifications/types.d.ts +2 -2
  291. package/dist/notifications/types.js +1 -3
  292. package/dist/oauth/index.cjs +3 -14
  293. package/dist/oauth/index.d.cts +49 -50
  294. package/dist/oauth/index.d.ts +49 -50
  295. package/dist/oauth/index.js +2 -5
  296. package/dist/oauth/types.cjs +0 -4
  297. package/dist/oauth/types.d.cts +2 -725
  298. package/dist/oauth/types.d.ts +2 -725
  299. package/dist/oauth/types.js +1 -3
  300. package/dist/oauth-DTvrqe6P.cjs +88 -0
  301. package/dist/oauth-DTvrqe6P.cjs.map +1 -0
  302. package/dist/oauth-DYDObUX9.js +83 -0
  303. package/dist/oauth-DYDObUX9.js.map +1 -0
  304. package/dist/omnisearch/index.cjs +47 -12
  305. package/dist/omnisearch/index.cjs.map +1 -1
  306. package/dist/omnisearch/index.d.cts +12 -14
  307. package/dist/omnisearch/index.d.ts +12 -14
  308. package/dist/omnisearch/index.js +47 -4
  309. package/dist/omnisearch/index.js.map +1 -1
  310. package/dist/omnisearch/types.cjs +0 -4
  311. package/dist/omnisearch/types.d.cts +2 -3
  312. package/dist/omnisearch/types.d.ts +2 -3
  313. package/dist/omnisearch/types.js +1 -3
  314. package/dist/project-BvFi19K_.cjs +56 -0
  315. package/dist/project-BvFi19K_.cjs.map +1 -0
  316. package/dist/project-CcGxXIW_.d.cts +18 -0
  317. package/dist/project-DWwZv66D.js +39 -0
  318. package/dist/project-DWwZv66D.js.map +1 -0
  319. package/dist/project-io1pY-hW.d.ts +18 -0
  320. package/dist/queryService/index.cjs +3 -14
  321. package/dist/queryService/index.d.cts +2 -40
  322. package/dist/queryService/index.d.ts +2 -40
  323. package/dist/queryService/index.js +2 -5
  324. package/dist/queryService/types.cjs +0 -4
  325. package/dist/queryService/types.d.cts +2 -2
  326. package/dist/queryService/types.d.ts +2 -2
  327. package/dist/queryService/types.js +1 -3
  328. package/dist/queryService-BHV_OZI2.js +114 -0
  329. package/dist/queryService-BHV_OZI2.js.map +1 -0
  330. package/dist/queryService-CvqDqigW.cjs +119 -0
  331. package/dist/queryService-CvqDqigW.cjs.map +1 -0
  332. package/dist/queue/index.cjs +3 -15
  333. package/dist/queue/index.d.cts +411 -340
  334. package/dist/queue/index.d.ts +411 -340
  335. package/dist/queue/index.js +2 -6
  336. package/dist/queue/types.cjs +0 -4
  337. package/dist/queue/types.d.cts +2 -2
  338. package/dist/queue/types.d.ts +2 -2
  339. package/dist/queue/types.js +1 -3
  340. package/dist/queue-CUHKupTA.cjs +137 -0
  341. package/dist/queue-CUHKupTA.cjs.map +1 -0
  342. package/dist/queue-uofE4Eu6.js +126 -0
  343. package/dist/queue-uofE4Eu6.js.map +1 -0
  344. package/dist/rolldown-runtime-VH7oDXx4.cjs +28 -0
  345. package/dist/scheduler/index.cjs +61 -13
  346. package/dist/scheduler/index.cjs.map +1 -1
  347. package/dist/scheduler/index.d.cts +73 -74
  348. package/dist/scheduler/index.d.ts +73 -74
  349. package/dist/scheduler/index.js +61 -5
  350. package/dist/scheduler/index.js.map +1 -1
  351. package/dist/scheduler/types.cjs +0 -4
  352. package/dist/scheduler/types.d.cts +2 -372
  353. package/dist/scheduler/types.d.ts +2 -372
  354. package/dist/scheduler/types.js +1 -3
  355. package/dist/sdk/configurations/index.cjs +3 -16
  356. package/dist/sdk/configurations/index.d.cts +3066 -3078
  357. package/dist/sdk/configurations/index.d.ts +3066 -3078
  358. package/dist/sdk/configurations/index.js +2 -7
  359. package/dist/sdk/developerPortal/index.cjs +203 -0
  360. package/dist/sdk/developerPortal/index.cjs.map +1 -0
  361. package/dist/sdk/developerPortal/index.d.cts +1371 -0
  362. package/dist/sdk/developerPortal/index.d.ts +1371 -0
  363. package/dist/sdk/developerPortal/index.js +202 -0
  364. package/dist/sdk/developerPortal/index.js.map +1 -0
  365. package/dist/sdk/queryService/index.cjs +91 -14
  366. package/dist/sdk/queryService/index.cjs.map +1 -1
  367. package/dist/sdk/queryService/index.d.cts +2 -35
  368. package/dist/sdk/queryService/index.d.ts +2 -35
  369. package/dist/sdk/queryService/index.js +91 -6
  370. package/dist/sdk/queryService/index.js.map +1 -1
  371. package/dist/sdk/semanticLayer/index.cjs +352 -54
  372. package/dist/sdk/semanticLayer/index.cjs.map +1 -1
  373. package/dist/sdk/semanticLayer/index.d.cts +95 -99
  374. package/dist/sdk/semanticLayer/index.d.ts +95 -99
  375. package/dist/sdk/semanticLayer/index.js +346 -4
  376. package/dist/sdk/semanticLayer/index.js.map +1 -1
  377. package/dist/sdk/semanticLayer/types.cjs +0 -4
  378. package/dist/sdk/semanticLayer/types.d.cts +2 -152
  379. package/dist/sdk/semanticLayer/types.d.ts +2 -152
  380. package/dist/sdk/semanticLayer/types.js +1 -3
  381. package/dist/sdk/storage/index.cjs +267 -48
  382. package/dist/sdk/storage/index.cjs.map +1 -1
  383. package/dist/sdk/storage/index.d.cts +2 -120
  384. package/dist/sdk/storage/index.d.ts +2 -120
  385. package/dist/sdk/storage/index.js +258 -4
  386. package/dist/sdk/storage/index.js.map +1 -1
  387. package/dist/sdk/tag/index.cjs +3 -14
  388. package/dist/sdk/tag/index.d.cts +16 -20
  389. package/dist/sdk/tag/index.d.ts +16 -20
  390. package/dist/sdk/tag/index.js +2 -5
  391. package/dist/sdk/tag/types.cjs +0 -4
  392. package/dist/sdk/tag/types.d.cts +2 -36
  393. package/dist/sdk/tag/types.d.ts +2 -36
  394. package/dist/sdk/tag/types.js +1 -3
  395. package/dist/sdk/vault/index.cjs +93 -31
  396. package/dist/sdk/vault/index.cjs.map +1 -1
  397. package/dist/sdk/vault/index.d.cts +2 -73
  398. package/dist/sdk/vault/index.d.ts +2 -73
  399. package/dist/sdk/vault/index.js +88 -3
  400. package/dist/sdk/vault/index.js.map +1 -1
  401. package/dist/status/index.cjs +16 -20
  402. package/dist/status/index.cjs.map +1 -1
  403. package/dist/status/index.d.cts +8 -9
  404. package/dist/status/index.d.ts +8 -9
  405. package/dist/status/index.js +15 -18
  406. package/dist/status/index.js.map +1 -1
  407. package/dist/status/types.cjs +0 -6
  408. package/dist/status/types.d.cts +17 -15
  409. package/dist/status/types.d.ts +17 -15
  410. package/dist/status/types.js +1 -3
  411. package/dist/storage/index.cjs +27 -92
  412. package/dist/storage/index.d.cts +3 -24
  413. package/dist/storage/index.d.ts +3 -24
  414. package/dist/storage/index.js +8 -11
  415. package/dist/storage/types.cjs +0 -4
  416. package/dist/storage/types.d.cts +5 -1949
  417. package/dist/storage/types.d.ts +5 -1949
  418. package/dist/storage/types.js +1 -3
  419. package/dist/storage-DbyNnkIJ.cjs +2458 -0
  420. package/dist/storage-DbyNnkIJ.cjs.map +1 -0
  421. package/dist/storage-luq7YBZF.js +2429 -0
  422. package/dist/storage-luq7YBZF.js.map +1 -0
  423. package/dist/storageTable-C9crh4Ef.cjs +310 -0
  424. package/dist/storageTable-C9crh4Ef.cjs.map +1 -0
  425. package/dist/storageTable-DslXtqNL.js +299 -0
  426. package/dist/storageTable-DslXtqNL.js.map +1 -0
  427. package/dist/stream/index.cjs +363 -12
  428. package/dist/stream/index.cjs.map +1 -1
  429. package/dist/stream/index.d.cts +345 -346
  430. package/dist/stream/index.d.ts +345 -346
  431. package/dist/stream/index.js +363 -4
  432. package/dist/stream/index.js.map +1 -1
  433. package/dist/stream/types.cjs +0 -4
  434. package/dist/stream/types.d.cts +2 -2
  435. package/dist/stream/types.d.ts +2 -2
  436. package/dist/stream/types.js +1 -3
  437. package/dist/suggestions-BH3x7xU7.d.cts +438 -0
  438. package/dist/suggestions-BH3x7xU7.d.ts +438 -0
  439. package/dist/syncActions/index.cjs +3 -19
  440. package/dist/syncActions/index.d.cts +2 -67
  441. package/dist/syncActions/index.d.ts +2 -67
  442. package/dist/syncActions/index.js +2 -10
  443. package/dist/syncActions/types.cjs +0 -4
  444. package/dist/syncActions/types.d.cts +2 -614
  445. package/dist/syncActions/types.d.ts +2 -614
  446. package/dist/syncActions/types.js +1 -3
  447. package/dist/syncActions-DKWeJ8GH.cjs +504 -0
  448. package/dist/syncActions-DKWeJ8GH.cjs.map +1 -0
  449. package/dist/syncActions-ssWWVN_4.js +497 -0
  450. package/dist/syncActions-ssWWVN_4.js.map +1 -0
  451. package/dist/tag-CsoOZWB_.cjs +175 -0
  452. package/dist/tag-CsoOZWB_.cjs.map +1 -0
  453. package/dist/tag-DCsoewjL.js +164 -0
  454. package/dist/{chunk-WUFODWZV.js.map → tag-DCsoewjL.js.map} +1 -1
  455. package/dist/telemetry/index.cjs +3 -14
  456. package/dist/telemetry/index.d.cts +10 -10
  457. package/dist/telemetry/index.d.ts +10 -10
  458. package/dist/telemetry/index.js +2 -5
  459. package/dist/telemetry/types.cjs +0 -4
  460. package/dist/telemetry/types.d.cts +2 -12
  461. package/dist/telemetry/types.d.ts +2 -12
  462. package/dist/telemetry/types.js +1 -3
  463. package/dist/telemetry-2IrE8HaZ.cjs +29 -0
  464. package/dist/telemetry-2IrE8HaZ.cjs.map +1 -0
  465. package/dist/telemetry-yQfQxBBI.js +24 -0
  466. package/dist/telemetry-yQfQxBBI.js.map +1 -0
  467. package/dist/types--T-vBqdd.d.cts +2835 -0
  468. package/dist/{types-Cffam0Nw.d.ts → types-2mHlPakp.d.cts} +84 -80
  469. package/dist/types-7H6Dnz0Y.d.ts +23 -0
  470. package/dist/{types-BcaALDYY.d.cts → types-B06L4-WE.d.cts} +9 -15
  471. package/dist/types-B1S2H7q1.d.ts +373 -0
  472. package/dist/types-B1glyy_Q.d.ts +726 -0
  473. package/dist/types-BCt0EMiO.d.ts +2162 -0
  474. package/dist/{types-Y1ynT2PH.d.cts → types-BD6czYPH.d.ts} +29 -106
  475. package/dist/{types-CwAYn1EJ.d.cts → types-BO-mTxKb.d.cts} +48 -80
  476. package/dist/{types-nt7I4XNc.d.cts → types-BREBK0xX.d.ts} +7 -6
  477. package/dist/types-BRQAKEC1.d.cts +32 -0
  478. package/dist/types-BXK6Ebtm.d.ts +32 -0
  479. package/dist/types-BefwoXik.d.cts +373 -0
  480. package/dist/{types-BuEkMmKT.d.ts → types-BhBvnvqe.d.ts} +219 -234
  481. package/dist/{types-qvle4Ydu.d.cts → types-BmFyDKe6.d.ts} +84 -80
  482. package/dist/types-BpWqpMkL.d.ts +66 -0
  483. package/dist/types-C8XiTXxi.d.cts +23 -0
  484. package/dist/{types-DrGnvgkB.d.ts → types-CAOvDtMC.d.cts} +9 -14
  485. package/dist/types-CC0wymfG.d.ts +2088 -0
  486. package/dist/{types-Bom93Zx2.d.cts → types-CI1mW2lA.d.ts} +9 -14
  487. package/dist/{types-EZBBpiFU.d.ts → types-CRYtdj5w.d.ts} +238 -349
  488. package/dist/{types-CniF_D1P.d.cts → types-CSmttcZ_.d.ts} +8 -10
  489. package/dist/{types-CxAH36ip.d.cts → types-CbZ8aMKW.d.cts} +9 -12
  490. package/dist/{types-D2qGShlS.d.ts → types-CexuN7Mw.d.cts} +29 -106
  491. package/dist/types-CjAia48k.d.ts +386 -0
  492. package/dist/{types-ebolWqn1.d.ts → types-CtdyAkzI.d.cts} +27 -16
  493. package/dist/{types-COti0FGo.d.ts → types-CvADp-x-.d.ts} +9 -12
  494. package/dist/types-CwvOcTOm.d.cts +2088 -0
  495. package/dist/types-CyRK5z-E.d.cts +386 -0
  496. package/dist/{types-BALUbGA5.d.ts → types-D2n3h1gp.d.ts} +48 -80
  497. package/dist/types-DBOEA7l0.d.cts +148 -0
  498. package/dist/{types-DM1glEQI.d.ts → types-DCBKso0t.d.cts} +8 -10
  499. package/dist/{types-DNyZ0z3L.d.cts → types-DEKF5pbg.d.cts} +219 -234
  500. package/dist/{types-D6dnnju2.d.ts → types-DMvU4kZ2.d.cts} +32 -30
  501. package/dist/{types-BPKQRahf.d.cts → types-DS8uFAeq.d.cts} +8 -13
  502. package/dist/{types-DOc5_aYZ.d.ts → types-DeApSCzx.d.cts} +16 -21
  503. package/dist/types-DebL68-g.d.ts +148 -0
  504. package/dist/types-DgaYUtu_.d.cts +726 -0
  505. package/dist/{types-CfzHhZVG.d.ts → types-DkbfBOBr.d.cts} +7 -6
  506. package/dist/types-DvsGS8By.d.cts +66 -0
  507. package/dist/{types-Dpwb4dD0.d.ts → types-DwX1uxp_.d.ts} +8 -13
  508. package/dist/{types-cxk-0ftN.d.cts → types-ISUNM_BR.d.cts} +238 -349
  509. package/dist/types-QOIQ-dZU.d.cts +2162 -0
  510. package/dist/{types-BsejtGjZ.d.ts → types-SGuvOEV8.d.ts} +9 -15
  511. package/dist/types-V8rC5if7.d.cts +621 -0
  512. package/dist/{types-BCBF_5cU.d.cts → types-Z-vUwgym.d.ts} +32 -30
  513. package/dist/{types-Bp8d9PJf.d.cts → types-bws2RtKq.d.ts} +16 -21
  514. package/dist/types-h9TTimS_.d.ts +2835 -0
  515. package/dist/types-lFsTSkhe.d.cts +14 -0
  516. package/dist/types-lFsTSkhe.d.ts +14 -0
  517. package/dist/types-n4FFKqa4.d.ts +621 -0
  518. package/dist/{types-CFeOCzzg.d.cts → types-x4xPlrr0.d.ts} +27 -16
  519. package/dist/vault/index.cjs +49 -13
  520. package/dist/vault/index.cjs.map +1 -1
  521. package/dist/vault/index.d.cts +2 -27
  522. package/dist/vault/index.d.ts +2 -27
  523. package/dist/vault/index.js +49 -5
  524. package/dist/vault/index.js.map +1 -1
  525. package/dist/vault/types.cjs +0 -4
  526. package/dist/vault/types.d.cts +2 -385
  527. package/dist/vault/types.d.ts +2 -385
  528. package/dist/vault/types.js +1 -3
  529. package/package.json +43 -5
  530. package/surface/apps.md +2 -2
  531. package/surface/chat.md +2 -2
  532. package/surface/dataScience.md +2 -2
  533. package/surface/kaiAgent.md +1 -1
  534. package/surface/queryService.md +4 -3
  535. package/surface/queue.md +2 -1
  536. package/surface/sdk.md +8 -8
  537. package/surface/storage.md +40 -35
  538. package/surface/syncActions.md +2 -2
  539. package/dist/ManagementClientAuthError-4J0S5tV-.d.ts +0 -9
  540. package/dist/ManagementClientAuthError-CyDpa4NS.d.cts +0 -9
  541. package/dist/adminRoles-BSUPLfNf.d.cts +0 -12
  542. package/dist/adminRoles-BSUPLfNf.d.ts +0 -12
  543. package/dist/ai/types.cjs.map +0 -1
  544. package/dist/ai/types.js.map +0 -1
  545. package/dist/appLogs-BbgAJ5I8.d.cts +0 -7
  546. package/dist/appLogs-BbgAJ5I8.d.ts +0 -7
  547. package/dist/apps/types.cjs.map +0 -1
  548. package/dist/apps/types.js.map +0 -1
  549. package/dist/auth/index.cjs.map +0 -1
  550. package/dist/auth/index.js.map +0 -1
  551. package/dist/auth/types.cjs.map +0 -1
  552. package/dist/auth/types.js.map +0 -1
  553. package/dist/backends-UNp_e5y9.d.cts +0 -7
  554. package/dist/backends-UNp_e5y9.d.ts +0 -7
  555. package/dist/chunk-22E6IGXR.js +0 -6
  556. package/dist/chunk-22E6IGXR.js.map +0 -1
  557. package/dist/chunk-24YVNNAG.js +0 -83
  558. package/dist/chunk-24YVNNAG.js.map +0 -1
  559. package/dist/chunk-255CHZ3U.js +0 -200
  560. package/dist/chunk-255CHZ3U.js.map +0 -1
  561. package/dist/chunk-2BCH2U57.js +0 -67
  562. package/dist/chunk-2BCH2U57.js.map +0 -1
  563. package/dist/chunk-2BQBKU6E.js +0 -270
  564. package/dist/chunk-2BQBKU6E.js.map +0 -1
  565. package/dist/chunk-2JKTV7UG.cjs +0 -35
  566. package/dist/chunk-2JKTV7UG.cjs.map +0 -1
  567. package/dist/chunk-3UBGQFBU.js +0 -29
  568. package/dist/chunk-3UBGQFBU.js.map +0 -1
  569. package/dist/chunk-4RC5E3SL.js +0 -140
  570. package/dist/chunk-4RC5E3SL.js.map +0 -1
  571. package/dist/chunk-552FC4ZV.js +0 -14
  572. package/dist/chunk-552FC4ZV.js.map +0 -1
  573. package/dist/chunk-57Q4CY4H.js +0 -190
  574. package/dist/chunk-57Q4CY4H.js.map +0 -1
  575. package/dist/chunk-5A3AQIXR.js +0 -14
  576. package/dist/chunk-5HEIR4DC.js +0 -39
  577. package/dist/chunk-5HEIR4DC.js.map +0 -1
  578. package/dist/chunk-5SR2L35Y.cjs +0 -1828
  579. package/dist/chunk-5SR2L35Y.cjs.map +0 -1
  580. package/dist/chunk-62LG5KPI.js +0 -285
  581. package/dist/chunk-62LG5KPI.js.map +0 -1
  582. package/dist/chunk-67P5UI6H.js +0 -58
  583. package/dist/chunk-67P5UI6H.js.map +0 -1
  584. package/dist/chunk-6PVEHUJL.cjs +0 -1308
  585. package/dist/chunk-6PVEHUJL.cjs.map +0 -1
  586. package/dist/chunk-6XFXU5N4.js +0 -119
  587. package/dist/chunk-6XFXU5N4.js.map +0 -1
  588. package/dist/chunk-6YZQIMML.cjs +0 -163
  589. package/dist/chunk-6YZQIMML.cjs.map +0 -1
  590. package/dist/chunk-6ZQBFK2Y.js +0 -24
  591. package/dist/chunk-6ZQBFK2Y.js.map +0 -1
  592. package/dist/chunk-7J2R6XHB.js +0 -3
  593. package/dist/chunk-7J2R6XHB.js.map +0 -1
  594. package/dist/chunk-AJ3SCWUB.cjs +0 -69
  595. package/dist/chunk-AJ3SCWUB.cjs.map +0 -1
  596. package/dist/chunk-AXYNFDUI.cjs +0 -43
  597. package/dist/chunk-AXYNFDUI.cjs.map +0 -1
  598. package/dist/chunk-B45B4AYG.js +0 -272
  599. package/dist/chunk-B45B4AYG.js.map +0 -1
  600. package/dist/chunk-B4T4QCLB.js +0 -116
  601. package/dist/chunk-B4T4QCLB.js.map +0 -1
  602. package/dist/chunk-BCZPCMGL.cjs +0 -49
  603. package/dist/chunk-BCZPCMGL.cjs.map +0 -1
  604. package/dist/chunk-BGJWHTBJ.js +0 -66
  605. package/dist/chunk-BGJWHTBJ.js.map +0 -1
  606. package/dist/chunk-BVRPZKRE.cjs +0 -147
  607. package/dist/chunk-BVRPZKRE.cjs.map +0 -1
  608. package/dist/chunk-BZB4UVQA.cjs +0 -192
  609. package/dist/chunk-BZB4UVQA.cjs.map +0 -1
  610. package/dist/chunk-CHRBWCL7.cjs +0 -472
  611. package/dist/chunk-CHRBWCL7.cjs.map +0 -1
  612. package/dist/chunk-CPZME73I.js +0 -16
  613. package/dist/chunk-CPZME73I.js.map +0 -1
  614. package/dist/chunk-DVV35AIS.js +0 -468
  615. package/dist/chunk-DVV35AIS.js.map +0 -1
  616. package/dist/chunk-E7GGDLAH.cjs +0 -202
  617. package/dist/chunk-E7GGDLAH.cjs.map +0 -1
  618. package/dist/chunk-EQPBR3BE.cjs +0 -85
  619. package/dist/chunk-EQPBR3BE.cjs.map +0 -1
  620. package/dist/chunk-ERZEQ5JR.js +0 -40
  621. package/dist/chunk-ERZEQ5JR.js.map +0 -1
  622. package/dist/chunk-ES3ADC2G.cjs +0 -18
  623. package/dist/chunk-ES3ADC2G.cjs.map +0 -1
  624. package/dist/chunk-EWMXK3EI.cjs +0 -8
  625. package/dist/chunk-EWMXK3EI.cjs.map +0 -1
  626. package/dist/chunk-FEAE6L3K.cjs +0 -60
  627. package/dist/chunk-FEAE6L3K.cjs.map +0 -1
  628. package/dist/chunk-FPB6OGTV.js +0 -26
  629. package/dist/chunk-FPB6OGTV.js.map +0 -1
  630. package/dist/chunk-FVU7WU2H.cjs +0 -66
  631. package/dist/chunk-FVU7WU2H.cjs.map +0 -1
  632. package/dist/chunk-FW5GBBKL.js +0 -67
  633. package/dist/chunk-FW5GBBKL.js.map +0 -1
  634. package/dist/chunk-G2SWCC3X.js +0 -90
  635. package/dist/chunk-G2SWCC3X.js.map +0 -1
  636. package/dist/chunk-G3JHVIDZ.cjs +0 -286
  637. package/dist/chunk-G3JHVIDZ.cjs.map +0 -1
  638. package/dist/chunk-G3N5KDEY.js +0 -10
  639. package/dist/chunk-G3N5KDEY.js.map +0 -1
  640. package/dist/chunk-HGKDXF35.js +0 -301
  641. package/dist/chunk-HGKDXF35.js.map +0 -1
  642. package/dist/chunk-HITKHHWN.cjs +0 -174
  643. package/dist/chunk-HITKHHWN.cjs.map +0 -1
  644. package/dist/chunk-HQO572JW.cjs +0 -34
  645. package/dist/chunk-HQO572JW.cjs.map +0 -1
  646. package/dist/chunk-HUQ5ATIL.cjs +0 -290
  647. package/dist/chunk-HUQ5ATIL.cjs.map +0 -1
  648. package/dist/chunk-HZDVMHU6.js +0 -344
  649. package/dist/chunk-HZDVMHU6.js.map +0 -1
  650. package/dist/chunk-ICWUR5WA.cjs +0 -68
  651. package/dist/chunk-ICWUR5WA.cjs.map +0 -1
  652. package/dist/chunk-IQFNHQWP.cjs +0 -47
  653. package/dist/chunk-IQFNHQWP.cjs.map +0 -1
  654. package/dist/chunk-IZ4QM7O4.js +0 -1304
  655. package/dist/chunk-IZ4QM7O4.js.map +0 -1
  656. package/dist/chunk-J5JCXSAS.cjs +0 -117
  657. package/dist/chunk-J5JCXSAS.cjs.map +0 -1
  658. package/dist/chunk-JI7HLIDL.cjs +0 -119
  659. package/dist/chunk-JI7HLIDL.cjs.map +0 -1
  660. package/dist/chunk-JWISA775.cjs +0 -92
  661. package/dist/chunk-JWISA775.cjs.map +0 -1
  662. package/dist/chunk-K3BLXPLA.cjs +0 -16
  663. package/dist/chunk-K3BLXPLA.cjs.map +0 -1
  664. package/dist/chunk-KATUDT3E.js +0 -45
  665. package/dist/chunk-KATUDT3E.js.map +0 -1
  666. package/dist/chunk-KGBWWS6I.js +0 -32
  667. package/dist/chunk-KGBWWS6I.js.map +0 -1
  668. package/dist/chunk-KQENBXPS.cjs +0 -34
  669. package/dist/chunk-KQENBXPS.cjs.map +0 -1
  670. package/dist/chunk-KTKJD4DM.js +0 -60
  671. package/dist/chunk-KTKJD4DM.js.map +0 -1
  672. package/dist/chunk-LNZP2O4P.js +0 -169
  673. package/dist/chunk-LNZP2O4P.js.map +0 -1
  674. package/dist/chunk-LWQP7OWA.js +0 -75
  675. package/dist/chunk-LWQP7OWA.js.map +0 -1
  676. package/dist/chunk-MRHQJNWF.cjs +0 -8
  677. package/dist/chunk-MRHQJNWF.cjs.map +0 -1
  678. package/dist/chunk-MSI6FVGG.js +0 -6
  679. package/dist/chunk-MSI6FVGG.js.map +0 -1
  680. package/dist/chunk-N4COL54U.cjs +0 -22
  681. package/dist/chunk-N4COL54U.cjs.map +0 -1
  682. package/dist/chunk-NFJKJGXR.js +0 -397
  683. package/dist/chunk-NFJKJGXR.js.map +0 -1
  684. package/dist/chunk-NH2TQGRL.cjs +0 -28
  685. package/dist/chunk-NH2TQGRL.cjs.map +0 -1
  686. package/dist/chunk-NHYL5QPM.js +0 -74
  687. package/dist/chunk-NHYL5QPM.js.map +0 -1
  688. package/dist/chunk-ON4ILCHP.js +0 -1822
  689. package/dist/chunk-ON4ILCHP.js.map +0 -1
  690. package/dist/chunk-PLF4JX5B.cjs +0 -155
  691. package/dist/chunk-PLF4JX5B.cjs.map +0 -1
  692. package/dist/chunk-PSR3N4NC.js +0 -136
  693. package/dist/chunk-PSR3N4NC.js.map +0 -1
  694. package/dist/chunk-QHD4LPAQ.cjs +0 -8
  695. package/dist/chunk-QHD4LPAQ.cjs.map +0 -1
  696. package/dist/chunk-QNF3L4B7.js +0 -115
  697. package/dist/chunk-QNF3L4B7.js.map +0 -1
  698. package/dist/chunk-RBN3ITTM.js +0 -153
  699. package/dist/chunk-RBN3ITTM.js.map +0 -1
  700. package/dist/chunk-RRC5RKF7.cjs +0 -12
  701. package/dist/chunk-RRC5RKF7.cjs.map +0 -1
  702. package/dist/chunk-RXYT7EMN.cjs +0 -318
  703. package/dist/chunk-RXYT7EMN.cjs.map +0 -1
  704. package/dist/chunk-S46FMY4G.cjs +0 -64
  705. package/dist/chunk-S46FMY4G.cjs.map +0 -1
  706. package/dist/chunk-S6BWQKHJ.cjs +0 -116
  707. package/dist/chunk-S6BWQKHJ.cjs.map +0 -1
  708. package/dist/chunk-SFTI6QFB.cjs +0 -85
  709. package/dist/chunk-SFTI6QFB.cjs.map +0 -1
  710. package/dist/chunk-SNP577FA.cjs +0 -346
  711. package/dist/chunk-SNP577FA.cjs.map +0 -1
  712. package/dist/chunk-SUVM3S2T.cjs +0 -69
  713. package/dist/chunk-SUVM3S2T.cjs.map +0 -1
  714. package/dist/chunk-SYZ5OFNT.js +0 -114
  715. package/dist/chunk-SYZ5OFNT.js.map +0 -1
  716. package/dist/chunk-SZBW4EE2.cjs +0 -180
  717. package/dist/chunk-SZBW4EE2.cjs.map +0 -1
  718. package/dist/chunk-T526LPBK.js +0 -6
  719. package/dist/chunk-T526LPBK.js.map +0 -1
  720. package/dist/chunk-TBHJQCAE.js +0 -64
  721. package/dist/chunk-TBHJQCAE.js.map +0 -1
  722. package/dist/chunk-U3E5YMLO.cjs +0 -82
  723. package/dist/chunk-U3E5YMLO.cjs.map +0 -1
  724. package/dist/chunk-U5SE6W5M.cjs +0 -158
  725. package/dist/chunk-U5SE6W5M.cjs.map +0 -1
  726. package/dist/chunk-UUY6LQT6.cjs +0 -267
  727. package/dist/chunk-UUY6LQT6.cjs.map +0 -1
  728. package/dist/chunk-UVX733BX.js +0 -83
  729. package/dist/chunk-UVX733BX.js.map +0 -1
  730. package/dist/chunk-V6FT3RTU.cjs +0 -42
  731. package/dist/chunk-V6FT3RTU.cjs.map +0 -1
  732. package/dist/chunk-VB56OVFM.cjs +0 -312
  733. package/dist/chunk-VB56OVFM.cjs.map +0 -1
  734. package/dist/chunk-WQ7NNIJ3.js +0 -33
  735. package/dist/chunk-WQ7NNIJ3.js.map +0 -1
  736. package/dist/chunk-WUFODWZV.js +0 -177
  737. package/dist/chunk-WUJ53PP7.cjs +0 -76
  738. package/dist/chunk-WUJ53PP7.cjs.map +0 -1
  739. package/dist/chunk-XPDEQND7.cjs +0 -4
  740. package/dist/chunk-XPDEQND7.cjs.map +0 -1
  741. package/dist/chunk-YDOSWWE4.cjs +0 -419
  742. package/dist/chunk-YDOSWWE4.cjs.map +0 -1
  743. package/dist/chunk-YGEJDWGG.js +0 -19
  744. package/dist/chunk-YGEJDWGG.js.map +0 -1
  745. package/dist/chunk-YXGBD4WP.cjs +0 -16
  746. package/dist/chunk-YXGBD4WP.cjs.map +0 -1
  747. package/dist/chunk-ZOREOLGE.js +0 -264
  748. package/dist/chunk-ZOREOLGE.js.map +0 -1
  749. package/dist/constants/index.cjs.map +0 -1
  750. package/dist/constants/index.js.map +0 -1
  751. package/dist/createFetchClient-BHAsPDgF.d.cts +0 -86
  752. package/dist/createFetchClient-CFIwc6Lh.d.ts +0 -86
  753. package/dist/createGenericFetchClient-JcbIIqwF.d.cts +0 -18
  754. package/dist/createGenericFetchClient-ZGG5wbAC.d.ts +0 -18
  755. package/dist/createOpenapiFetchClient-CduEua6F.d.cts +0 -24
  756. package/dist/createOpenapiFetchClient-wLlVgp3k.d.ts +0 -24
  757. package/dist/dataScience/index.cjs.map +0 -1
  758. package/dist/dataScience/index.js.map +0 -1
  759. package/dist/dataScience/types.cjs.map +0 -1
  760. package/dist/dataScience/types.js.map +0 -1
  761. package/dist/domain/permissions/index.cjs.map +0 -1
  762. package/dist/domain/permissions/index.js.map +0 -1
  763. package/dist/domain/storageTable/index.cjs.map +0 -1
  764. package/dist/domain/storageTable/index.js.map +0 -1
  765. package/dist/editor/types.cjs.map +0 -1
  766. package/dist/editor/types.js.map +0 -1
  767. package/dist/encryption/types.cjs.map +0 -1
  768. package/dist/encryption/types.js.map +0 -1
  769. package/dist/import/index.cjs.map +0 -1
  770. package/dist/import/index.js.map +0 -1
  771. package/dist/keboolaUID-D1DGSbge.d.cts +0 -19
  772. package/dist/keboolaUID-D1DGSbge.d.ts +0 -19
  773. package/dist/management/index.cjs.map +0 -1
  774. package/dist/management/index.js.map +0 -1
  775. package/dist/management/types.cjs.map +0 -1
  776. package/dist/management/types.js.map +0 -1
  777. package/dist/metastore/index.cjs.map +0 -1
  778. package/dist/metastore/index.js.map +0 -1
  779. package/dist/metastore/types.cjs.map +0 -1
  780. package/dist/metastore/types.js.map +0 -1
  781. package/dist/notifications/types.cjs.map +0 -1
  782. package/dist/notifications/types.js.map +0 -1
  783. package/dist/oauth/index.cjs.map +0 -1
  784. package/dist/oauth/index.js.map +0 -1
  785. package/dist/oauth/types.cjs.map +0 -1
  786. package/dist/oauth/types.js.map +0 -1
  787. package/dist/omnisearch/types.cjs.map +0 -1
  788. package/dist/omnisearch/types.js.map +0 -1
  789. package/dist/project-Dmr-zrQG.d.ts +0 -17
  790. package/dist/project-DstzWVMN.d.cts +0 -17
  791. package/dist/queryService/index.cjs.map +0 -1
  792. package/dist/queryService/index.js.map +0 -1
  793. package/dist/queryService/types.cjs.map +0 -1
  794. package/dist/queryService/types.js.map +0 -1
  795. package/dist/queue/index.cjs.map +0 -1
  796. package/dist/queue/index.js.map +0 -1
  797. package/dist/queue/types.cjs.map +0 -1
  798. package/dist/queue/types.js.map +0 -1
  799. package/dist/registry-CcKlB-yY.d.ts +0 -1046
  800. package/dist/registry-Cg0Yng1z.d.cts +0 -1046
  801. package/dist/scheduler/types.cjs.map +0 -1
  802. package/dist/scheduler/types.js.map +0 -1
  803. package/dist/sdk/configurations/index.cjs.map +0 -1
  804. package/dist/sdk/configurations/index.js.map +0 -1
  805. package/dist/sdk/semanticLayer/types.cjs.map +0 -1
  806. package/dist/sdk/semanticLayer/types.js.map +0 -1
  807. package/dist/sdk/tag/index.cjs.map +0 -1
  808. package/dist/sdk/tag/index.js.map +0 -1
  809. package/dist/sdk/tag/types.cjs.map +0 -1
  810. package/dist/sdk/tag/types.js.map +0 -1
  811. package/dist/status/types.cjs.map +0 -1
  812. package/dist/status/types.js.map +0 -1
  813. package/dist/storage/index.cjs.map +0 -1
  814. package/dist/storage/index.js.map +0 -1
  815. package/dist/storage/types.cjs.map +0 -1
  816. package/dist/storage/types.js.map +0 -1
  817. package/dist/storageClient-BAid0vi2.d.cts +0 -1750
  818. package/dist/storageClient-BX50Attd.d.ts +0 -1750
  819. package/dist/storageSdk-BS5982c_.d.cts +0 -753
  820. package/dist/storageSdk-BeJcnEIO.d.ts +0 -753
  821. package/dist/stream/types.cjs.map +0 -1
  822. package/dist/stream/types.js.map +0 -1
  823. package/dist/syncActions/index.cjs.map +0 -1
  824. package/dist/syncActions/index.js.map +0 -1
  825. package/dist/syncActions/types.cjs.map +0 -1
  826. package/dist/syncActions/types.js.map +0 -1
  827. package/dist/telemetry/index.cjs.map +0 -1
  828. package/dist/telemetry/index.js.map +0 -1
  829. package/dist/telemetry/types.cjs.map +0 -1
  830. package/dist/telemetry/types.js.map +0 -1
  831. package/dist/types-C5DdOzx8.d.cts +0 -12
  832. package/dist/types-C_jxWM7A.d.ts +0 -12
  833. package/dist/types-UwuKN9Kx.d.cts +0 -60
  834. package/dist/types-UwuKN9Kx.d.ts +0 -60
  835. package/dist/types-f8dUjMX4.d.cts +0 -90
  836. package/dist/types-f8dUjMX4.d.ts +0 -90
  837. package/dist/vault/types.cjs.map +0 -1
  838. package/dist/vault/types.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,1804 +1,1756 @@
1
- import { createVaultSdk } from './chunk-LWQP7OWA.js';
2
- import { createSemanticLayerSdk } from './chunk-B45B4AYG.js';
3
- import { createStorageSdk } from './chunk-HGKDXF35.js';
4
- export { createStorageSdk } from './chunk-HGKDXF35.js';
5
- export { createQueryServiceSdk } from './chunk-G2SWCC3X.js';
6
- import { delay } from './chunk-KTKJD4DM.js';
7
- export { PollException, delay, poll } from './chunk-KTKJD4DM.js';
8
- import { createConfigurationSdk } from './chunk-DVV35AIS.js';
9
- export { isEmptyDeep, schemaGuidedMerge } from './chunk-DVV35AIS.js';
10
- import { createProject } from './chunk-5HEIR4DC.js';
11
- import './chunk-PSR3N4NC.js';
12
- import { createStorageTable } from './chunk-ZOREOLGE.js';
13
- import { createTagSdk } from './chunk-WUFODWZV.js';
14
- export { keboolaUID } from './chunk-WUFODWZV.js';
15
- import { generateUUID } from './chunk-T526LPBK.js';
16
- export { generateUUID } from './chunk-T526LPBK.js';
17
- import { createQueryServiceClient } from './chunk-UVX733BX.js';
18
- import { createQueueClient } from './chunk-B4T4QCLB.js';
19
- export { collect } from './chunk-B4T4QCLB.js';
20
- import './chunk-22E6IGXR.js';
21
- import { createStorageClient, ServiceUnavailableError } from './chunk-ON4ILCHP.js';
22
- export { ServiceUnavailableError, series } from './chunk-ON4ILCHP.js';
23
- export { QueryJobError, QueryJobTimeoutError, isQueryJobError, isQueryJobTimeoutError } from './chunk-3UBGQFBU.js';
24
- import { createStreamClient } from './chunk-HZDVMHU6.js';
25
- import { createSyncActionsClient } from './chunk-NFJKJGXR.js';
26
- import { ProjectFeature } from './chunk-LNZP2O4P.js';
27
- import './chunk-NHYL5QPM.js';
28
- import './chunk-552FC4ZV.js';
29
- export { SyncActionError, isSyncActionError } from './chunk-YGEJDWGG.js';
30
- export { ValidationError, isValidationError, parseOrThrow } from './chunk-6ZQBFK2Y.js';
31
- import { createTelemetryClient } from './chunk-WQ7NNIJ3.js';
32
- import { createVaultClient } from './chunk-BGJWHTBJ.js';
33
- export { UserError } from './chunk-G3N5KDEY.js';
34
- import { createEncryptionClient } from './chunk-KATUDT3E.js';
35
- import { createImportClient } from './chunk-67P5UI6H.js';
36
- import { createManagementClient, dedupe } from './chunk-IZ4QM7O4.js';
37
- export { dedupe, isManagementClientAuthError } from './chunk-IZ4QM7O4.js';
38
- export { ManagementClientAuthError } from './chunk-CPZME73I.js';
39
- import { createMetastoreClient } from './chunk-255CHZ3U.js';
40
- import { createNotificationsClient } from './chunk-2BCH2U57.js';
41
- import { createOauthClient } from './chunk-24YVNNAG.js';
42
- import { createOmnisearchClient } from './chunk-KGBWWS6I.js';
43
- import { createSchedulerClient } from './chunk-FW5GBBKL.js';
44
- export { concurrent } from './chunk-ERZEQ5JR.js';
45
- import { createAiClient } from './chunk-TBHJQCAE.js';
46
- import { createAppsClient } from './chunk-57Q4CY4H.js';
47
- import { createAuthClient } from './chunk-62LG5KPI.js';
48
- import { createChatClient } from './chunk-RBN3ITTM.js';
49
- import './chunk-4RC5E3SL.js';
50
- import { createDataScienceClient } from './chunk-SYZ5OFNT.js';
51
- export { parseLogLines } from './chunk-6XFXU5N4.js';
52
- import { isPlainObject } from './chunk-MSI6FVGG.js';
53
- export { isPlainObject } from './chunk-MSI6FVGG.js';
54
- import { createEditorClient } from './chunk-QNF3L4B7.js';
55
- import { createAuthHeaders } from './chunk-5A3AQIXR.js';
56
- import { KeboolaHttpHeader, HttpStatus, isApiError, ApiError, normalizeBaseUrl, HttpHeader, createOpenapiFetchClient, createGenericFetchClient } from './chunk-2BQBKU6E.js';
57
- export { ApiError, HttpContentType, HttpHeader, KeboolaHttpHeader, createGenericFetchClient, isAbortError, isApiError, isFetchClientError } from './chunk-2BQBKU6E.js';
58
- import * as z2 from 'zod';
59
- import { z } from 'zod';
60
-
61
- // src/utils/assert.ts
1
+ import { t as createProject } from "./project-DWwZv66D.js";
2
+ import { a as poller, c as Result, d as delay, i as poll, l as asError, n as emitter, o as clamp, r as failureOf, s as finiteOr, t as jobStatus, u as lazy } from "./jobStatus-DbMupQEK.js";
3
+ import { n as collect, t as createQueueClient } from "./queue-uofE4Eu6.js";
4
+ import { t as concurrent } from "./concurrent-CH9fbNr3.js";
5
+ import { t as dedupe } from "./dedupe-DYIHgZoG.js";
6
+ import { a as shallowEqual, i as createStore, n as createDerivedStore, r as createEmitter, t as createDerivedAsyncStore } from "./createStore-BNiCRQXa.js";
7
+ import { a as series, i as ServiceUnavailableError, t as createStorageClient } from "./storage-luq7YBZF.js";
8
+ import { n as keboolaUID, t as createTagSdk } from "./tag-DCsoewjL.js";
9
+ import { t as generateUUID } from "./generateUUID-Dr8l-aoc.js";
10
+ import { t as isPlainObject } from "./isPlainObject-LYW-03uB.js";
11
+ import { n as schemaGuidedMerge, r as isEmptyDeep, t as createConfigurationSdk } from "./configurations-Byt59bIa.js";
12
+ import { t as UserError } from "./UserError-By_Zckmc.js";
13
+ import { a as HttpContentType, c as normalizeBaseUrl, d as HttpStatus, f as KeboolaHttpHeader, i as isFetchClientError, n as isAbortError, o as HttpHeader, p as ApiError, r as isApiError } from "./createFetchClient-BK0TZK-U.js";
14
+ import { t as ManagementClientAuthError } from "./ManagementClientAuthError-B97OtOQ7.js";
15
+ import { i as isQueryJobError, n as isQueryJobTimeoutError, r as QueryJobError, t as QueryJobTimeoutError } from "./QueryJobTimeoutError-C7JbNGOM.js";
16
+ import { n as isSyncActionError, t as SyncActionError } from "./SyncActionError-CoZFsdUk.js";
17
+ import { n as isValidationError, r as parseOrThrow, t as ValidationError } from "./ValidationError-CzPWydEb.js";
18
+ import { t as createGenericFetchClient } from "./createGenericFetchClient-CVZYekDk.js";
19
+ import { t as createImportClient } from "./import-Cf0W-7YD.js";
20
+ import { t as createOpenapiFetchClient } from "./createOpenapiFetchClient-B5U1fCHS.js";
21
+ import { t as createAuthClient } from "./authClient-DOk6VKdV.js";
22
+ import { n as isManagementClientAuthError, t as createManagementClient } from "./management-DqwQcDCx.js";
23
+ import { t as createAuthHeaders } from "./auth-D2jfNlpX.js";
24
+ import { i as ProjectFeature } from "./constants-_HhqKvBg.js";
25
+ import { t as createStorageTable } from "./storageTable-DslXtqNL.js";
26
+ import { createSemanticLayerSdk } from "./sdk/semanticLayer/index.js";
27
+ import { createStorageSdk } from "./sdk/storage/index.js";
28
+ import { createVaultSdk } from "./sdk/vault/index.js";
29
+ import { createAiClient } from "./ai/index.js";
30
+ import { t as parseLogLines } from "./appLogs-enL9XR9r.js";
31
+ import { createAppsClient } from "./apps/index.js";
32
+ import { createChatClient } from "./chat/index.js";
33
+ import { t as createDataScienceClient } from "./dataScience-CE0pSWbl.js";
34
+ import { createEditorClient } from "./editor/index.js";
35
+ import { createEncryptionClient } from "./encryption/index.js";
36
+ import { t as createMetastoreClient } from "./metastore-CNEhL66f.js";
37
+ import { createNotificationsClient } from "./notifications/index.js";
38
+ import { t as createOauthClient } from "./oauth-DYDObUX9.js";
39
+ import { createOmnisearchClient } from "./omnisearch/index.js";
40
+ import { t as createQueryServiceClient } from "./queryService-BHV_OZI2.js";
41
+ import { createSchedulerClient } from "./scheduler/index.js";
42
+ import { createStreamClient } from "./stream/index.js";
43
+ import { t as createSyncActionsClient } from "./syncActions-ssWWVN_4.js";
44
+ import { t as createTelemetryClient } from "./telemetry-yQfQxBBI.js";
45
+ import { createVaultClient } from "./vault/index.js";
46
+ import { n as isUnauthorized, t as createBearerCredential } from "./credential-kEGLnVez.js";
47
+ import { createQueryServiceSdk } from "./sdk/queryService/index.js";
48
+ import * as z$1 from "zod";
49
+ import { z } from "zod";
50
+ //#region src/utils/assert.ts
62
51
  function assert(value, message) {
63
- if (value == null) {
64
- throw new Error(message);
65
- }
52
+ if (value == null) throw new Error(message);
66
53
  }
67
-
68
- // src/utils/async/coalesce.ts
69
- var coalesce = (task) => {
70
- let running = false;
71
- const waiters = [];
72
- const drain = async () => {
73
- running = true;
74
- const batch = waiters.splice(0);
75
- try {
76
- const result = await task();
77
- batch.forEach((waiter) => waiter.resolve(result));
78
- } catch (error) {
79
- batch.forEach((waiter) => waiter.reject(error));
80
- }
81
- if (waiters.length > 0) return drain();
82
- running = false;
83
- };
84
- return () => {
85
- const waiter = Promise.withResolvers();
86
- waiters.push(waiter);
87
- if (!running) void drain();
88
- return waiter.promise;
89
- };
90
- };
91
-
92
- // src/utils/async/lazy.ts
93
- var lazy = (task) => {
94
- let value = null;
95
- const runTask = async () => await task();
96
- return () => {
97
- value ??= runTask().catch((error) => {
98
- value = null;
99
- throw error;
100
- });
101
- return value;
102
- };
103
- };
104
-
105
- // src/utils/createStore.ts
106
- var createStore = (initial) => {
107
- let value = initial;
108
- const listeners = /* @__PURE__ */ new Set();
109
- return {
110
- get: () => value,
111
- set: (next) => {
112
- if (Object.is(next, value)) return;
113
- value = next;
114
- listeners.forEach((listener) => listener(value));
115
- },
116
- subscribe: (listener) => {
117
- listeners.add(listener);
118
- return () => {
119
- listeners.delete(listener);
120
- };
121
- },
122
- dispose: () => {
123
- value = initial;
124
- listeners.clear();
125
- }
126
- };
127
- };
128
- var isPlainObjectOrArray = (value) => {
129
- if (Array.isArray(value)) return true;
130
- const proto = Object.getPrototypeOf(value);
131
- return proto === Object.prototype || proto === null;
132
- };
133
- var shallowEqual = (a, b) => {
134
- if (Object.is(a, b)) return true;
135
- if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) return false;
136
- if (!isPlainObjectOrArray(a) || !isPlainObjectOrArray(b)) return false;
137
- const aKeys = Object.keys(a);
138
- const bKeys = Object.keys(b);
139
- return aKeys.length === bKeys.length && aKeys.every((key) => Object.is(a[key], b[key]));
54
+ //#endregion
55
+ //#region src/utils/async/coalesce.ts
56
+ /**
57
+ * Coalesces concurrent triggers onto a single, never-parallel run of `task`.
58
+ * Triggers fired while a run is busy collapse into one trailing run, and each
59
+ * resolves with the first run that started after it — so it never sees stale state.
60
+ *
61
+ * Example — A triggers, then B and C trigger while A's run is still going:
62
+ * 1. trigger A → run #1 starts
63
+ * 2. trigger B, C → run #1 busy, so they wait
64
+ * 3. run #1 done → A resolves
65
+ * 4. run #2 starts → covers B and C together (one trailing run, not two)
66
+ * 5. run #2 done → B and C resolve
67
+ *
68
+ * @returns a trigger; each call returns a promise of the task result.
69
+ * @throws The returned promise rejects with whatever `task` throws or rejects
70
+ * with — the caller handles it (try/catch, or `.catch` on `void trigger()`).
71
+ */
72
+ const coalesce = (task) => {
73
+ let running = false;
74
+ const waiters = [];
75
+ const drain = async () => {
76
+ running = true;
77
+ const batch = waiters.splice(0);
78
+ try {
79
+ const result = await task();
80
+ batch.forEach((waiter) => waiter.resolve(result));
81
+ } catch (error) {
82
+ batch.forEach((waiter) => waiter.reject(error));
83
+ }
84
+ if (waiters.length > 0) return drain();
85
+ running = false;
86
+ };
87
+ return () => {
88
+ const waiter = Promise.withResolvers();
89
+ waiters.push(waiter);
90
+ if (!running) drain();
91
+ return waiter.promise;
92
+ };
140
93
  };
141
- var createDerivedStore = ({
142
- source,
143
- dependsOn,
144
- build,
145
- keyEquals = shallowEqual
146
- }) => {
147
- let key = dependsOn(source.get());
148
- const store = createStore(build(key));
149
- const unsubscribe = source.subscribe((state) => {
150
- const next = dependsOn(state);
151
- if (keyEquals(key, next)) return;
152
- key = next;
153
- store.set(build(next));
154
- });
155
- return {
156
- get: store.get,
157
- subscribe: store.subscribe,
158
- dispose: () => {
159
- unsubscribe();
160
- store.dispose();
161
- }
162
- };
94
+ //#endregion
95
+ //#region src/utils/async/poll/registry.ts
96
+ const DEFAULT_LIMIT = 50;
97
+ const isFinished = ({ snapshot }) => snapshot.state !== "idle" && snapshot.state !== "polling";
98
+ const createPollRegistry = ({ limit = DEFAULT_LIMIT } = {}) => {
99
+ const entries = createStore([]);
100
+ const unsubscribes = /* @__PURE__ */ new Map();
101
+ const maxEntries = clamp(finiteOr(limit, DEFAULT_LIMIT), 1);
102
+ let nextKey = 1;
103
+ const forget = (key) => {
104
+ unsubscribes.get(key)?.();
105
+ unsubscribes.delete(key);
106
+ };
107
+ const trim = (list) => {
108
+ let kept = list;
109
+ while (kept.length > maxEntries) {
110
+ const dropped = kept.findLast(isFinished) ?? kept.at(-1);
111
+ if (!dropped) break;
112
+ forget(dropped.key);
113
+ kept = kept.filter((entry) => entry !== dropped);
114
+ }
115
+ return kept;
116
+ };
117
+ const replace = (key, snapshot) => entries.set(entries.get().map((entry) => entry.key === key ? {
118
+ ...entry,
119
+ snapshot
120
+ } : entry));
121
+ const register = (poller) => {
122
+ const key = nextKey++;
123
+ const entry = {
124
+ key,
125
+ startedAt: Date.now(),
126
+ snapshot: poller.debug(),
127
+ stop: poller.stop,
128
+ start: poller.start
129
+ };
130
+ unsubscribes.set(key, poller.subscribe((snapshot) => replace(key, snapshot)));
131
+ entries.set(trim([entry, ...entries.get()]));
132
+ };
133
+ const collect = () => {
134
+ emitter.subscribe(register);
135
+ };
136
+ return {
137
+ list: entries.get,
138
+ collect,
139
+ subscribe: (listener) => entries.subscribe(() => listener()),
140
+ clear: () => {
141
+ entries.get().forEach(({ key }) => forget(key));
142
+ entries.set([]);
143
+ },
144
+ stopAll: (reason) => entries.get().forEach((entry) => entry.stop(reason))
145
+ };
163
146
  };
164
- var createDerivedAsyncStore = ({
165
- source,
166
- dependsOn,
167
- build,
168
- keyEquals = shallowEqual
169
- }) => {
170
- const store = createStore({ state: "idle" });
171
- let currentKey = null;
172
- let generation = 0;
173
- let controller = null;
174
- const run = (key) => {
175
- controller?.abort();
176
- controller = new AbortController();
177
- const runGeneration = ++generation;
178
- store.set({ state: "pending" });
179
- build(key, controller.signal).then(
180
- (value) => {
181
- if (runGeneration === generation) store.set({ state: "ready", value });
182
- },
183
- (error) => {
184
- if (runGeneration === generation) store.set({ state: "errored", error });
185
- }
186
- );
187
- };
188
- const sync = (state) => {
189
- const next = dependsOn(state);
190
- if (next === null) {
191
- if (currentKey === null) return;
192
- controller?.abort();
193
- controller = null;
194
- generation += 1;
195
- currentKey = null;
196
- store.set({ state: "idle" });
197
- return;
198
- }
199
- if (currentKey !== null && keyEquals(currentKey, next)) return;
200
- currentKey = next;
201
- run(next);
202
- };
203
- sync(source.get());
204
- const unsubscribe = source.subscribe(sync);
205
- const readable = {
206
- get: store.get,
207
- subscribe: store.subscribe,
208
- dispose: () => {
209
- controller?.abort();
210
- unsubscribe();
211
- store.dispose();
212
- }
213
- };
214
- const settled = () => new Promise((resolve) => {
215
- let unsubscribeSettled = () => {
216
- };
217
- const check = (state) => {
218
- if (state.state === "ready" || state.state === "errored") {
219
- unsubscribeSettled();
220
- resolve(state);
221
- }
222
- };
223
- unsubscribeSettled = store.subscribe(check);
224
- check(store.get());
225
- });
226
- return { store: readable, settled };
227
- };
228
-
229
- // src/utils/deepMerge.ts
230
- var deepMerge = (base, patch) => {
231
- const out = { ...base };
232
- for (const [key, value] of Object.entries(patch)) {
233
- if (value === void 0) continue;
234
- const current = out[key];
235
- out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;
236
- }
237
- return out;
147
+ //#endregion
148
+ //#region src/utils/deepMerge.ts
149
+ /**
150
+ * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every
151
+ * other value (primitives, arrays, or a type mismatch between the two sides) replaces the
152
+ * base value. `undefined` patch values are skipped, so a partial patch leaves untouched
153
+ * fields alone. Pure — neither argument is mutated; the result preserves `base`'s type.
154
+ */
155
+ const deepMerge = (base, patch) => {
156
+ const out = { ...base };
157
+ for (const [key, value] of Object.entries(patch)) {
158
+ if (value === void 0) continue;
159
+ const current = out[key];
160
+ out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;
161
+ }
162
+ return out;
238
163
  };
239
-
240
- // src/utils/persistor/adapters.ts
241
- var createNullStorage = () => ({
242
- getItem: () => null,
243
- setItem: () => {
244
- },
245
- removeItem: () => {
246
- }
164
+ //#endregion
165
+ //#region src/utils/persistor/adapters.ts
166
+ const createNullStorage = () => ({
167
+ getItem: () => null,
168
+ setItem: () => {},
169
+ removeItem: () => {}
247
170
  });
248
- var createMemoryStorage = () => {
249
- const store = /* @__PURE__ */ new Map();
250
- return {
251
- getItem: (key) => store.get(key) ?? null,
252
- setItem: (key, value) => {
253
- store.set(key, value);
254
- },
255
- removeItem: (key) => {
256
- store.delete(key);
257
- }
258
- };
171
+ const createMemoryStorage = () => {
172
+ const store = /* @__PURE__ */ new Map();
173
+ return {
174
+ getItem: (key) => store.get(key) ?? null,
175
+ setItem: (key, value) => {
176
+ store.set(key, value);
177
+ },
178
+ removeItem: (key) => {
179
+ store.delete(key);
180
+ }
181
+ };
259
182
  };
260
- var createWebStorage = (pick) => {
261
- let web = null;
262
- try {
263
- web = pick();
264
- if (web) {
265
- const probe = "__keboola_storage_probe__";
266
- web.setItem(probe, probe);
267
- web.removeItem(probe);
268
- }
269
- } catch (err) {
270
- console.warn("createWebStorage: web storage unavailable, falling back to memory", err);
271
- web = null;
272
- }
273
- if (!web) return createMemoryStorage();
274
- const storage = web;
275
- return {
276
- getItem: (key) => storage.getItem(key),
277
- setItem: (key, value) => {
278
- storage.setItem(key, value);
279
- },
280
- removeItem: (key) => {
281
- storage.removeItem(key);
282
- }
283
- };
183
+ const createWebStorage = (pick) => {
184
+ let web = null;
185
+ try {
186
+ web = pick();
187
+ if (web) {
188
+ const probe = "__keboola_storage_probe__";
189
+ web.setItem(probe, probe);
190
+ web.removeItem(probe);
191
+ }
192
+ } catch (err) {
193
+ console.warn("createWebStorage: web storage unavailable, falling back to memory", err);
194
+ web = null;
195
+ }
196
+ if (!web) return createMemoryStorage();
197
+ const storage = web;
198
+ return {
199
+ getItem: (key) => storage.getItem(key),
200
+ setItem: (key, value) => {
201
+ storage.setItem(key, value);
202
+ },
203
+ removeItem: (key) => {
204
+ storage.removeItem(key);
205
+ }
206
+ };
284
207
  };
285
- var createLocalStorage = () => createWebStorage(() => "localStorage" in globalThis ? globalThis.localStorage : null);
286
- var createSessionStorage = () => createWebStorage(() => "sessionStorage" in globalThis ? globalThis.sessionStorage : null);
287
-
288
- // src/utils/persistor/persistor.ts
289
- var createPersistor = ({
290
- storage = createNullStorage(),
291
- key,
292
- schema,
293
- defaultValue,
294
- encode = JSON.stringify,
295
- decode = JSON.parse
296
- }) => {
297
- const clear = () => {
298
- try {
299
- storage.removeItem(key);
300
- } catch (err) {
301
- console.warn(`createPersistor: failed to clear "${key}"`, err);
302
- }
303
- };
304
- const hasPersistedValue = () => {
305
- try {
306
- return !!storage.getItem(key);
307
- } catch (err) {
308
- console.warn(`createPersistor: failed to read "${key}", assuming empty`, err);
309
- return false;
310
- }
311
- };
312
- const hydrate = () => {
313
- let raw;
314
- try {
315
- raw = storage.getItem(key);
316
- } catch (err) {
317
- console.warn(`createPersistor: failed to read "${key}", using default`, err);
318
- return defaultValue;
319
- }
320
- if (raw === null) return defaultValue;
321
- let decoded;
322
- try {
323
- decoded = decode(raw);
324
- } catch (err) {
325
- console.warn(`createPersistor: failed to decode "${key}", resetting`, err);
326
- clear();
327
- return defaultValue;
328
- }
329
- const parsed = schema.safeParse(decoded);
330
- if (parsed.success) return parsed.data;
331
- clear();
332
- return defaultValue;
333
- };
334
- const persist = (value) => {
335
- let raw;
336
- try {
337
- raw = encode(value);
338
- } catch (err) {
339
- console.warn(`createPersistor: failed to encode "${key}", not persisting`, err);
340
- return;
341
- }
342
- try {
343
- storage.setItem(key, raw);
344
- } catch (err) {
345
- console.warn(`createPersistor: failed to write "${key}"`, err);
346
- }
347
- };
348
- return { hydrate, persist, clear, hasPersistedValue };
208
+ const createLocalStorage = () => createWebStorage(() => "localStorage" in globalThis ? globalThis.localStorage : null);
209
+ const createSessionStorage = () => createWebStorage(() => "sessionStorage" in globalThis ? globalThis.sessionStorage : null);
210
+ //#endregion
211
+ //#region src/utils/persistor/persistor.ts
212
+ const createPersistor = ({ storage = createNullStorage(), key, schema, defaultValue, encode = JSON.stringify, decode = JSON.parse }) => {
213
+ const clear = () => {
214
+ try {
215
+ storage.removeItem(key);
216
+ } catch (err) {
217
+ console.warn(`createPersistor: failed to clear "${key}"`, err);
218
+ }
219
+ };
220
+ const hasPersistedValue = () => {
221
+ try {
222
+ return !!storage.getItem(key);
223
+ } catch (err) {
224
+ console.warn(`createPersistor: failed to read "${key}", assuming empty`, err);
225
+ return false;
226
+ }
227
+ };
228
+ const hydrate = () => {
229
+ let raw;
230
+ try {
231
+ raw = storage.getItem(key);
232
+ } catch (err) {
233
+ console.warn(`createPersistor: failed to read "${key}", using default`, err);
234
+ return defaultValue;
235
+ }
236
+ if (raw === null) return defaultValue;
237
+ let decoded;
238
+ try {
239
+ decoded = decode(raw);
240
+ } catch (err) {
241
+ console.warn(`createPersistor: failed to decode "${key}", resetting`, err);
242
+ clear();
243
+ return defaultValue;
244
+ }
245
+ const parsed = schema.safeParse(decoded);
246
+ if (parsed.success) return parsed.data;
247
+ clear();
248
+ return defaultValue;
249
+ };
250
+ const persist = (value) => {
251
+ let raw;
252
+ try {
253
+ raw = encode(value);
254
+ } catch (err) {
255
+ console.warn(`createPersistor: failed to encode "${key}", not persisting`, err);
256
+ return;
257
+ }
258
+ try {
259
+ storage.setItem(key, raw);
260
+ } catch (err) {
261
+ console.warn(`createPersistor: failed to write "${key}"`, err);
262
+ }
263
+ };
264
+ return {
265
+ hydrate,
266
+ persist,
267
+ clear,
268
+ hasPersistedValue
269
+ };
349
270
  };
350
-
351
- // src/keboola/createLiveProject.ts
352
- var STORAGE_TOKEN_MUTATING_PATTERNS = [
353
- // Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.
354
- // At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)
355
- // under /buckets/{id}/... don't trigger a re-verify.
356
- /\/buckets(\/[^/]+)?$/,
357
- // Project feature toggles — changes token.owner.features. Anchored to
358
- // /projects/{id}/features so /manage/features and /users/{id}/features don't match.
359
- /\/projects\/[^/]+\/features(\/[^/]+)?$/
360
- ];
361
- var isStorageTokenMutatingRequest = (request) => {
362
- if (request.method === "GET") return false;
363
- const { pathname } = new URL(request.url);
364
- return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));
271
+ //#endregion
272
+ //#region src/keboola/createLiveProject.ts
273
+ const STORAGE_TOKEN_MUTATING_PATTERNS = [/\/buckets(\/[^/]+)?$/, /\/projects\/[^/]+\/features(\/[^/]+)?$/];
274
+ const isStorageTokenMutatingRequest = (request) => {
275
+ if (request.method === "GET") return false;
276
+ const { pathname } = new URL(request.url);
277
+ return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));
365
278
  };
366
- var createProjectRefreshMiddleware = (shouldRefresh, requestRefresh) => (next) => async (request) => {
367
- const response = await next(request);
368
- if (shouldRefresh(request.request)) await requestRefresh();
369
- return response;
279
+ const createProjectRefreshMiddleware = (shouldRefresh, requestRefresh) => (next) => async (request) => {
280
+ const response = await next(request);
281
+ if (shouldRefresh(request.request)) await requestRefresh();
282
+ return response;
370
283
  };
371
- var createLiveProject = ({
372
- initialToken,
373
- verify
374
- }) => {
375
- const store = createStore(createProject({ sapiToken: initialToken }));
376
- const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));
377
- const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);
378
- return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware, refresh };
284
+ /**
285
+ * The live project store: seeded from the verified token, re-verified (coalesced) after a
286
+ * token-mutating request or an explicit re-scope. Its `middleware` drives the auto re-verify.
287
+ */
288
+ const createLiveProject = ({ initialToken, verify }) => {
289
+ const store = createStore(createProject({ sapiToken: initialToken }));
290
+ const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));
291
+ const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);
292
+ return {
293
+ store,
294
+ getProject: () => store.get(),
295
+ subscribe: store.subscribe,
296
+ middleware,
297
+ refresh
298
+ };
379
299
  };
380
-
381
- // src/keboola/errors.ts
382
- var KeboolaErrorType = {
383
- Unconfigured: "unconfigured",
384
- NotAuthenticated: "not-authenticated",
385
- AlreadyAuthenticated: "already-authenticated",
386
- NoStorageToken: "no-storage-token",
387
- NoManagementToken: "no-management-token",
388
- MissingProject: "missing-project",
389
- NotBearer: "not-bearer",
390
- NotReady: "not-ready",
391
- InvalidBuildTransition: "invalid-build-transition"
300
+ //#endregion
301
+ //#region src/keboola/errors.ts
302
+ /**
303
+ * The single error the keboola client / session throws. It carries a stable `type` (the switchable
304
+ * contract) and a human-readable message derived from that type — no per-call message strings.
305
+ */
306
+ const KeboolaErrorType = {
307
+ Unconfigured: "unconfigured",
308
+ NotAuthenticated: "not-authenticated",
309
+ AlreadyAuthenticated: "already-authenticated",
310
+ NoStorageToken: "no-storage-token",
311
+ NoManagementToken: "no-management-token",
312
+ MissingProject: "missing-project",
313
+ NotBearer: "not-bearer",
314
+ NotReady: "not-ready",
315
+ InvalidBuildTransition: "invalid-build-transition"
392
316
  };
393
- var MESSAGES = {
394
- [KeboolaErrorType.Unconfigured]: "The session is not configured \u2014 set a baseUrl first.",
395
- [KeboolaErrorType.NotAuthenticated]: "The session is not authenticated \u2014 sign in first.",
396
- [KeboolaErrorType.AlreadyAuthenticated]: "The session is already authenticated \u2014 reset before authenticating again.",
397
- [KeboolaErrorType.NoStorageToken]: "No storage token \u2014 authenticate the storage realm first.",
398
- [KeboolaErrorType.NoManagementToken]: "No management token \u2014 authenticate the management realm first.",
399
- [KeboolaErrorType.MissingProject]: "A bearer storage session requires a project \u2014 call setProject(projectId) first.",
400
- [KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
401
- [KeboolaErrorType.NotReady]: "The client is not ready \u2014 authenticate the storage realm first.",
402
- [KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition \u2014 the build goes idle \u2192 initializing \u2192 ready | failed."
317
+ const MESSAGES = {
318
+ [KeboolaErrorType.Unconfigured]: "The session is not configured — set a baseUrl first.",
319
+ [KeboolaErrorType.NotAuthenticated]: "The session is not authenticated — sign in first.",
320
+ [KeboolaErrorType.AlreadyAuthenticated]: "The session is already authenticated — reset before authenticating again.",
321
+ [KeboolaErrorType.NoStorageToken]: "No storage token — authenticate the storage realm first.",
322
+ [KeboolaErrorType.NoManagementToken]: "No management token — authenticate the management realm first.",
323
+ [KeboolaErrorType.MissingProject]: "A bearer storage session requires a project — call setProject(projectId) first.",
324
+ [KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
325
+ [KeboolaErrorType.NotReady]: "The client is not ready — authenticate the storage realm first.",
326
+ [KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition — the build goes idle → initializing → ready | failed."
403
327
  };
404
- var KeboolaError = class _KeboolaError extends Error {
405
- type;
406
- constructor(type) {
407
- super(MESSAGES[type]);
408
- this.type = type;
409
- this.name = "KeboolaError";
410
- Object.setPrototypeOf(this, _KeboolaError.prototype);
411
- }
328
+ var KeboolaError = class KeboolaError extends Error {
329
+ type;
330
+ constructor(type) {
331
+ super(MESSAGES[type]);
332
+ this.type = type;
333
+ this.name = "KeboolaError";
334
+ Object.setPrototypeOf(this, KeboolaError.prototype);
335
+ }
412
336
  };
413
- var isKeboolaError = (error) => error instanceof KeboolaError;
414
- function assert2(value, type) {
415
- if (value == null) throw new KeboolaError(type);
337
+ const isKeboolaError = (error) => error instanceof KeboolaError;
338
+ /** Throw a {@link KeboolaError} of `type` when `value` is null/undefined; otherwise narrow it. */
339
+ function assert$1(value, type) {
340
+ if (value == null) throw new KeboolaError(type);
416
341
  }
417
-
418
- // src/middlewares/loggingMiddleware.ts
419
- var CORRELATION_ID_HEADER = "X-Correlation-ID";
420
- var ALWAYS_REDACTED_HEADERS = [
421
- KeboolaHttpHeader.MANAGEMENT_API_TOKEN,
422
- KeboolaHttpHeader.STORAGE_API_TOKEN,
423
- "authorization",
424
- "cookie",
425
- "set-cookie"
342
+ //#endregion
343
+ //#region src/middlewares/loggingMiddleware.ts
344
+ const CORRELATION_ID_HEADER = "X-Correlation-ID";
345
+ const ALWAYS_REDACTED_HEADERS = [
346
+ KeboolaHttpHeader.MANAGEMENT_API_TOKEN,
347
+ KeboolaHttpHeader.STORAGE_API_TOKEN,
348
+ "authorization",
349
+ "cookie",
350
+ "set-cookie"
426
351
  ];
427
- var ALWAYS_REDACTED_QUERY_PARAMS = /* @__PURE__ */ new Set([
428
- "token",
429
- "apikey",
430
- "api_key",
431
- "access_token",
432
- "refresh_token",
433
- "code",
434
- "state",
435
- "signature",
436
- "sig",
437
- "x-amz-signature",
438
- "x-amz-credential",
439
- "x-amz-security-token",
440
- "password",
441
- "secret"
352
+ const ALWAYS_REDACTED_QUERY_PARAMS = /* @__PURE__ */ new Set([
353
+ "token",
354
+ "apikey",
355
+ "api_key",
356
+ "access_token",
357
+ "refresh_token",
358
+ "code",
359
+ "state",
360
+ "signature",
361
+ "sig",
362
+ "x-amz-signature",
363
+ "x-amz-credential",
364
+ "x-amz-security-token",
365
+ "password",
366
+ "secret"
442
367
  ]);
443
- var REDACTED = "[REDACTED]";
444
- var getRedactedUrl = (rawUrl) => {
445
- const url = new URL(rawUrl);
446
- if (url.username) url.username = REDACTED;
447
- if (url.password) url.password = REDACTED;
448
- url.searchParams.forEach((_value, key) => {
449
- if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {
450
- url.searchParams.set(key, REDACTED);
451
- }
452
- });
453
- return url.toString();
368
+ const REDACTED = "[REDACTED]";
369
+ const getRedactedUrl = (rawUrl) => {
370
+ const url = new URL(rawUrl);
371
+ if (url.username) url.username = REDACTED;
372
+ if (url.password) url.password = REDACTED;
373
+ url.searchParams.forEach((_value, key) => {
374
+ if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) url.searchParams.set(key, REDACTED);
375
+ });
376
+ return url.toString();
454
377
  };
455
- var ensureCorrelationId = (request) => {
456
- const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();
457
- request.headers.set(CORRELATION_ID_HEADER, correlationId);
458
- return correlationId;
378
+ const ensureCorrelationId = (request) => {
379
+ const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();
380
+ request.headers.set(CORRELATION_ID_HEADER, correlationId);
381
+ return correlationId;
459
382
  };
460
- var getRedactedHeaders = (headers, redacted) => {
461
- const redactedSet = new Set(
462
- [...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase())
463
- );
464
- const result = {};
465
- headers.forEach((value, name) => {
466
- result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;
467
- });
468
- return result;
383
+ const getRedactedHeaders = (headers, redacted) => {
384
+ const redactedSet = new Set([...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase()));
385
+ const result = {};
386
+ headers.forEach((value, name) => {
387
+ result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;
388
+ });
389
+ return result;
469
390
  };
470
- var getRequestLog = (request, redactedHeaders) => ({
471
- url: getRedactedUrl(request.url),
472
- headers: getRedactedHeaders(request.headers, redactedHeaders)
391
+ const getRequestLog = (request, redactedHeaders) => ({
392
+ url: getRedactedUrl(request.url),
393
+ headers: getRedactedHeaders(request.headers, redactedHeaders)
473
394
  });
474
- var getResponseLog = (response, redactedHeaders) => ({
475
- status: response.status,
476
- statusText: response.statusText,
477
- headers: getRedactedHeaders(response.headers, redactedHeaders)
395
+ const getResponseLog = (response, redactedHeaders) => ({
396
+ status: response.status,
397
+ statusText: response.statusText,
398
+ headers: getRedactedHeaders(response.headers, redactedHeaders)
478
399
  });
479
- var redactApiError = (error, redactedHeaders) => new ApiError({
480
- request: new Request(getRedactedUrl(error.request.url), {
481
- method: error.request.method,
482
- headers: getRedactedHeaders(error.request.headers, redactedHeaders)
483
- }),
484
- response: new Response(null, {
485
- status: error.response.status,
486
- statusText: error.response.statusText,
487
- headers: getRedactedHeaders(error.response.headers, redactedHeaders)
488
- }),
489
- data: error.data
400
+ const redactApiError = (error, redactedHeaders) => new ApiError({
401
+ request: new Request(getRedactedUrl(error.request.url), {
402
+ method: error.request.method,
403
+ headers: getRedactedHeaders(error.request.headers, redactedHeaders)
404
+ }),
405
+ response: new Response(null, {
406
+ status: error.response.status,
407
+ statusText: error.response.statusText,
408
+ headers: getRedactedHeaders(error.response.headers, redactedHeaders)
409
+ }),
410
+ data: error.data
490
411
  });
491
- var formatLog = (level, log) => {
492
- const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];
493
- parts.push(log.request.url);
494
- if ("response" in log) parts.push(String(log.response.status));
495
- return parts.join(" ");
412
+ const formatLog = (level, log) => {
413
+ const parts = [
414
+ `[${level.toUpperCase()}]`,
415
+ `${Math.round(log.durationMs)}ms`,
416
+ log.method
417
+ ];
418
+ parts.push(log.request.url);
419
+ if ("response" in log) parts.push(String(log.response.status));
420
+ return parts.join(" ");
496
421
  };
497
- var createSafeLogger = (logger, level = "error-only") => {
498
- return {
499
- info: (log) => {
500
- if (level !== "all") return;
501
- try {
502
- if (logger?.info) {
503
- logger.info(log);
504
- return;
505
- }
506
- console.info(formatLog("info", log));
507
- } catch {
508
- }
509
- },
510
- error: (log) => {
511
- try {
512
- if (logger?.error) {
513
- logger.error(log);
514
- return;
515
- }
516
- console.error(formatLog("error", log));
517
- } catch {
518
- }
519
- }
520
- };
422
+ const createSafeLogger = (logger, level = "error-only") => {
423
+ return {
424
+ info: (log) => {
425
+ if (level !== "all") return;
426
+ try {
427
+ if (logger?.info) {
428
+ logger.info(log);
429
+ return;
430
+ }
431
+ console.info(formatLog("info", log));
432
+ } catch {}
433
+ },
434
+ error: (log) => {
435
+ try {
436
+ if (logger?.error) {
437
+ logger.error(log);
438
+ return;
439
+ }
440
+ console.error(formatLog("error", log));
441
+ } catch {}
442
+ }
443
+ };
521
444
  };
522
- var createLoggingMiddleware = (options = {}) => {
523
- const safeLogger = createSafeLogger(options.logger, options.level);
524
- const redactHeaders = options.redactHeaders ?? [];
525
- return (next) => async (fetchRequest) => {
526
- const correlationId = ensureCorrelationId(fetchRequest.request);
527
- const start = performance.now();
528
- const method = fetchRequest.request.method.toLowerCase();
529
- const requestLog = getRequestLog(fetchRequest.request, redactHeaders);
530
- try {
531
- const result = await next(fetchRequest);
532
- safeLogger.info({
533
- correlationId,
534
- method,
535
- durationMs: performance.now() - start,
536
- request: requestLog,
537
- response: getResponseLog(result.response, redactHeaders)
538
- });
539
- return result;
540
- } catch (error) {
541
- if (error instanceof Error)
542
- safeLogger.error({
543
- correlationId,
544
- method,
545
- durationMs: performance.now() - start,
546
- request: requestLog,
547
- error: isApiError(error) ? redactApiError(error, redactHeaders) : error
548
- });
549
- throw error;
550
- }
551
- };
445
+ const createLoggingMiddleware = (options = {}) => {
446
+ const safeLogger = createSafeLogger(options.logger, options.level);
447
+ const redactHeaders = options.redactHeaders ?? [];
448
+ return (next) => async (fetchRequest) => {
449
+ const correlationId = ensureCorrelationId(fetchRequest.request);
450
+ const start = performance.now();
451
+ const method = fetchRequest.request.method.toLowerCase();
452
+ const requestLog = getRequestLog(fetchRequest.request, redactHeaders);
453
+ try {
454
+ const result = await next(fetchRequest);
455
+ safeLogger.info({
456
+ correlationId,
457
+ method,
458
+ durationMs: performance.now() - start,
459
+ request: requestLog,
460
+ response: getResponseLog(result.response, redactHeaders)
461
+ });
462
+ return result;
463
+ } catch (error) {
464
+ if (error instanceof Error) safeLogger.error({
465
+ correlationId,
466
+ method,
467
+ durationMs: performance.now() - start,
468
+ request: requestLog,
469
+ error: isApiError(error) ? redactApiError(error, redactHeaders) : error
470
+ });
471
+ throw error;
472
+ }
473
+ };
552
474
  };
553
-
554
- // src/middlewares/retryMiddleware.ts
555
- var DEFAULT_MAX_RETRIES = 5;
556
- var DEFAULT_RETRYABLE_STATUSES = [
557
- HttpStatus.INTERNAL_SERVER_ERROR,
558
- HttpStatus.BAD_GATEWAY,
559
- HttpStatus.SERVICE_UNAVAILABLE,
560
- HttpStatus.GATEWAY_TIMEOUT
475
+ //#endregion
476
+ //#region src/middlewares/retryMiddleware.ts
477
+ const DEFAULT_MAX_RETRIES = 5;
478
+ const DEFAULT_RETRYABLE_STATUSES = [
479
+ HttpStatus.INTERNAL_SERVER_ERROR,
480
+ HttpStatus.BAD_GATEWAY,
481
+ HttpStatus.SERVICE_UNAVAILABLE,
482
+ HttpStatus.GATEWAY_TIMEOUT
561
483
  ];
562
- var DEFAULT_BACKOFF_FACTOR = 0.3;
563
- var defaultShouldRetry = (error) => error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);
564
- var createRetryMiddleware = (options) => {
565
- const {
566
- maxRetries = DEFAULT_MAX_RETRIES,
567
- backoffFactor = DEFAULT_BACKOFF_FACTOR,
568
- shouldRetry = defaultShouldRetry
569
- } = options ?? {};
570
- if (!Number.isInteger(maxRetries) || maxRetries < 0) {
571
- throw new RangeError("maxRetries must be a non-negative integer");
572
- }
573
- if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {
574
- throw new RangeError("backoffFactor must be a finite non-negative number");
575
- }
576
- return (next) => async (request) => {
577
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
578
- try {
579
- return await next({ ...request, request: request.request.clone() });
580
- } catch (error) {
581
- if (attempt === maxRetries || !shouldRetry(error, attempt)) {
582
- throw error;
583
- }
584
- const delayMs = backoffFactor * 1e3 * Math.pow(2, attempt);
585
- await delay(delayMs, request.request.signal ?? void 0);
586
- }
587
- }
588
- throw new Error("unreachable");
589
- };
484
+ const DEFAULT_BACKOFF_FACTOR = .3;
485
+ const defaultShouldRetry = (error) => error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);
486
+ const createRetryMiddleware = (options) => {
487
+ const { maxRetries = DEFAULT_MAX_RETRIES, backoffFactor = DEFAULT_BACKOFF_FACTOR, shouldRetry = defaultShouldRetry } = options ?? {};
488
+ if (!Number.isInteger(maxRetries) || maxRetries < 0) throw new RangeError("maxRetries must be a non-negative integer");
489
+ if (!Number.isFinite(backoffFactor) || backoffFactor < 0) throw new RangeError("backoffFactor must be a finite non-negative number");
490
+ return (next) => async (request) => {
491
+ for (let attempt = 0; attempt <= maxRetries; attempt++) try {
492
+ return await next({
493
+ ...request,
494
+ request: request.request.clone()
495
+ });
496
+ } catch (error) {
497
+ if (attempt === maxRetries || !shouldRetry(error, attempt)) throw error;
498
+ const delayMs = backoffFactor * 1e3 * Math.pow(2, attempt);
499
+ await delay(delayMs, request.request.signal ?? void 0);
500
+ }
501
+ throw new Error("unreachable");
502
+ };
590
503
  };
591
-
592
- // src/serviceClientRegistry/utils.ts
593
- var isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
594
- var createDummyClient = ({
595
- onCall
596
- }) => {
597
- const createProxy = (path = []) => new Proxy(() => {
598
- }, {
599
- // Create a new proxy for nested property access
600
- get: (_target, prop) => {
601
- if (isBuiltInProperty(prop)) return void 0;
602
- return createProxy([...path, prop]);
603
- },
604
- // When called as a function, invoke the interceptor
605
- apply: (_target, _thisArgs, args) => onCall(path, args)
606
- });
607
- return createProxy();
504
+ //#endregion
505
+ //#region src/serviceClientRegistry/utils.ts
506
+ const isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
507
+ /**
508
+ * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.
509
+ */
510
+ const createDummyClient = ({ onCall }) => {
511
+ const createProxy = (path = []) => new Proxy(() => {}, {
512
+ get: (_target, prop) => {
513
+ if (isBuiltInProperty(prop)) return void 0;
514
+ return createProxy([...path, prop]);
515
+ },
516
+ apply: (_target, _thisArgs, args) => onCall(path, args)
517
+ });
518
+ return createProxy();
608
519
  };
609
-
610
- // src/serviceClientRegistry/createServiceClientRegistry.ts
611
- var createServiceClientRegistry = () => ({
612
- getServiceBaseUrl,
613
- onUnavailable
614
- }) => {
615
- const dummy = (serviceId, clientName) => createDummyClient({
616
- onCall: (path, args) => {
617
- onUnavailable?.({
618
- serviceId,
619
- path,
620
- args,
621
- clientName
622
- });
623
- }
624
- });
625
- const configs = [];
626
- const resolveClient = ({
627
- serviceId,
628
- clientFn,
629
- clientName
630
- }) => {
631
- const serviceBaseUrl = getServiceBaseUrl(serviceId);
632
- return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);
633
- };
634
- const registry = {
635
- add: (config) => {
636
- configs.push(config);
637
- return registry;
638
- },
639
- build: () => {
640
- const clientMap = {};
641
- const clientMeta = [];
642
- configs.forEach((config) => {
643
- clientMap[config.clientName] = resolveClient(config);
644
- clientMeta.push({
645
- clientName: config.clientName,
646
- serviceId: config.serviceId,
647
- isAvailable: !!getServiceBaseUrl(config.serviceId)
648
- });
649
- });
650
- return {
651
- client: clientMap,
652
- meta: clientMeta
653
- };
654
- }
655
- };
656
- return registry;
520
+ //#endregion
521
+ //#region src/serviceClientRegistry/createServiceClientRegistry.ts
522
+ const createServiceClientRegistry = () => ({ getServiceBaseUrl, onUnavailable }) => {
523
+ const dummy = (serviceId, clientName) => createDummyClient({ onCall: (path, args) => {
524
+ onUnavailable?.({
525
+ serviceId,
526
+ path,
527
+ args,
528
+ clientName
529
+ });
530
+ } });
531
+ const configs = [];
532
+ const resolveClient = ({ serviceId, clientFn, clientName }) => {
533
+ const serviceBaseUrl = getServiceBaseUrl(serviceId);
534
+ return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);
535
+ };
536
+ const registry = {
537
+ add: (config) => {
538
+ configs.push(config);
539
+ return registry;
540
+ },
541
+ build: () => {
542
+ const clientMap = {};
543
+ const clientMeta = [];
544
+ configs.forEach((config) => {
545
+ clientMap[config.clientName] = resolveClient(config);
546
+ clientMeta.push({
547
+ clientName: config.clientName,
548
+ serviceId: config.serviceId,
549
+ isAvailable: !!getServiceBaseUrl(config.serviceId)
550
+ });
551
+ });
552
+ return {
553
+ client: clientMap,
554
+ meta: clientMeta
555
+ };
556
+ }
557
+ };
558
+ return registry;
657
559
  };
658
-
659
- // src/keboola/createApi.ts
660
- var createApi = (state) => new Proxy({}, {
661
- get(_target, property) {
662
- if (isBuiltInProperty(property)) return void 0;
663
- if (property === "auth") {
664
- const authClient = state.getAuthClient();
665
- assert2(authClient, KeboolaErrorType.Unconfigured);
666
- return authClient;
667
- }
668
- if (property === "management") {
669
- const management = state.getManagementClient();
670
- assert2(management, KeboolaErrorType.NoManagementToken);
671
- return management;
672
- }
673
- const clients = state.getProjectClients();
674
- assert2(clients, KeboolaErrorType.NotReady);
675
- return clients[property];
676
- }
677
- });
678
-
679
- // src/keboola/createMiddlewareFor.ts
680
- var createMiddlewareFor = (middlewares) => {
681
- return (target, baseline = []) => {
682
- if (Array.isArray(middlewares)) return [...baseline, ...middlewares];
683
- const all = middlewares?.all ?? [];
684
- const targeted = middlewares?.[target] ?? [];
685
- return [...baseline, ...all, ...targeted];
686
- };
560
+ //#endregion
561
+ //#region src/keboola/createApi.ts
562
+ const createApi = (state) => new Proxy({}, { get(_target, property) {
563
+ if (isBuiltInProperty(property)) return void 0;
564
+ if (property === "auth") {
565
+ const authClient = state.getAuthClient();
566
+ assert$1(authClient, KeboolaErrorType.Unconfigured);
567
+ return authClient;
568
+ }
569
+ if (property === "management") {
570
+ const management = state.getManagementClient();
571
+ assert$1(management, KeboolaErrorType.NoManagementToken);
572
+ return management;
573
+ }
574
+ const clients = state.getProjectClients();
575
+ assert$1(clients, KeboolaErrorType.NotReady);
576
+ return clients[property];
577
+ } });
578
+ //#endregion
579
+ //#region src/keboola/createMiddlewareFor.ts
580
+ const createMiddlewareFor = (middlewares) => {
581
+ return (target, baseline = []) => {
582
+ if (Array.isArray(middlewares)) return [...baseline, ...middlewares];
583
+ const all = middlewares?.all ?? [];
584
+ const targeted = middlewares?.[target] ?? [];
585
+ return [
586
+ ...baseline,
587
+ ...all,
588
+ ...targeted
589
+ ];
590
+ };
687
591
  };
688
-
689
- // src/keboola/bearer/createConfig.ts
690
- var INITIAL = { status: "anonymous", baseUrl: null };
691
- var stamp = (tokens) => ({ ...tokens, issuedAt: Date.now() });
692
- var createConfig = (initial = INITIAL) => {
693
- const store = createStore(initial);
694
- let expiredNotified = false;
695
- const setBaseUrl = (baseUrl) => {
696
- if (store.get().status !== "anonymous")
697
- throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
698
- store.set({ status: "anonymous", baseUrl });
699
- };
700
- const authenticate = (tokens) => {
701
- const state = store.get();
702
- if (state.status !== "anonymous") throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
703
- if (!state.baseUrl) throw new KeboolaError(KeboolaErrorType.Unconfigured);
704
- expiredNotified = false;
705
- store.set({ status: "authenticated", baseUrl: state.baseUrl, credential: stamp(tokens) });
706
- };
707
- const setProjectId = (projectId) => {
708
- const state = store.get();
709
- if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
710
- store.set({
711
- status: "scoped",
712
- baseUrl: state.baseUrl,
713
- credential: state.credential,
714
- projectId
715
- });
716
- };
717
- const clearProjectId = () => {
718
- const state = store.get();
719
- if (state.status !== "scoped") return;
720
- store.set({ status: "authenticated", baseUrl: state.baseUrl, credential: state.credential });
721
- };
722
- const reset = () => {
723
- store.set({ status: "anonymous", baseUrl: store.get().baseUrl });
724
- };
725
- const applyRefresh = (tokens) => {
726
- const state = store.get();
727
- if (state.status === "anonymous") return;
728
- store.set({ ...state, credential: stamp(tokens) });
729
- };
730
- const forceExpire = () => {
731
- const state = store.get();
732
- if (state.status === "anonymous") return;
733
- const issuedAt = Date.now() - state.credential.expiresIn * 1e3;
734
- store.set({ ...state, credential: { ...state.credential, issuedAt } });
735
- };
736
- const requireCredential = () => {
737
- const state = store.get();
738
- if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
739
- return state.credential;
740
- };
741
- const getBaseUrl = () => store.get().baseUrl;
742
- const notifyExpired = () => {
743
- if (expiredNotified) return false;
744
- expiredNotified = true;
745
- return true;
746
- };
747
- const debug = () => store.get();
748
- const readable = {
749
- get: store.get,
750
- subscribe: store.subscribe,
751
- dispose: store.dispose
752
- };
753
- return {
754
- store: readable,
755
- setBaseUrl,
756
- authenticate,
757
- setProjectId,
758
- clearProjectId,
759
- reset,
760
- applyRefresh,
761
- forceExpire,
762
- requireCredential,
763
- getBaseUrl,
764
- notifyExpired,
765
- debug
766
- };
592
+ //#endregion
593
+ //#region src/keboola/bearer/createConfig.ts
594
+ const INITIAL = {
595
+ status: "anonymous",
596
+ baseUrl: null
767
597
  };
768
-
769
- // src/domain/defaultBranch.ts
770
- var createDefaultBranch = ({ devBranches }) => {
771
- const defaultBranch = devBranches.find((branch) => branch.isDefault);
772
- assert(defaultBranch, "No default branch found for the project.");
773
- const getType = (branchId) => {
774
- if (branchId == null || branchId === "default") return "default";
775
- return Number(branchId) === defaultBranch.id ? "default" : "dev";
776
- };
777
- return {
778
- id: defaultBranch.id,
779
- name: defaultBranch.name,
780
- getType,
781
- isDev: (branchId) => getType(branchId) === "dev",
782
- isDefault: (branchId) => getType(branchId) === "default"
783
- };
598
+ const stamp = (tokens) => ({
599
+ ...tokens,
600
+ issuedAt: Date.now()
601
+ });
602
+ const createConfig$1 = (initial = INITIAL) => {
603
+ const store = createStore(initial);
604
+ let expiredNotified = false;
605
+ const setBaseUrl = (baseUrl) => {
606
+ if (store.get().status !== "anonymous") throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
607
+ store.set({
608
+ status: "anonymous",
609
+ baseUrl
610
+ });
611
+ };
612
+ const authenticate = (tokens) => {
613
+ const state = store.get();
614
+ if (state.status !== "anonymous") throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
615
+ if (!state.baseUrl) throw new KeboolaError(KeboolaErrorType.Unconfigured);
616
+ expiredNotified = false;
617
+ store.set({
618
+ status: "authenticated",
619
+ baseUrl: state.baseUrl,
620
+ credential: stamp(tokens)
621
+ });
622
+ };
623
+ const setProjectId = (projectId) => {
624
+ const state = store.get();
625
+ if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
626
+ store.set({
627
+ status: "scoped",
628
+ baseUrl: state.baseUrl,
629
+ credential: state.credential,
630
+ projectId
631
+ });
632
+ };
633
+ /**
634
+ * Drop the project scope, keeping the credential — the inverse of `setProjectId`, for leaving a
635
+ * project without signing out. The project clients are keyed on the scope, so they tear down and
636
+ * the storage build returns to `idle`; the session stays usable for `auth` and `management`.
637
+ * No-op unless currently scoped.
638
+ */
639
+ const clearProjectId = () => {
640
+ const state = store.get();
641
+ if (state.status !== "scoped") return;
642
+ store.set({
643
+ status: "authenticated",
644
+ baseUrl: state.baseUrl,
645
+ credential: state.credential
646
+ });
647
+ };
648
+ /** Drop the credential (sign out); keeps the configured baseUrl. */
649
+ const reset = () => {
650
+ store.set({
651
+ status: "anonymous",
652
+ baseUrl: store.get().baseUrl
653
+ });
654
+ };
655
+ /** Apply a token refresh: replace the credential (fresh tokens, new issue time); no-op before auth. */
656
+ const applyRefresh = (tokens) => {
657
+ const state = store.get();
658
+ if (state.status === "anonymous") return;
659
+ store.set({
660
+ ...state,
661
+ credential: stamp(tokens)
662
+ });
663
+ };
664
+ /**
665
+ * Dev/test lever: backdate the current token's issue time by a full lifetime so it reads as
666
+ * expired, making the refresh policy rotate it on the next request. No-op before auth.
667
+ */
668
+ const forceExpire = () => {
669
+ const state = store.get();
670
+ if (state.status === "anonymous") return;
671
+ const issuedAt = Date.now() - state.credential.expiresIn * 1e3;
672
+ store.set({
673
+ ...state,
674
+ credential: {
675
+ ...state.credential,
676
+ issuedAt
677
+ }
678
+ });
679
+ };
680
+ /**
681
+ * The current credential, asserting the session is authenticated (or scoped). Single point for that
682
+ * check so callers (token attach, refresh) don't each re-narrow the state.
683
+ */
684
+ const requireCredential = () => {
685
+ const state = store.get();
686
+ if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
687
+ return state.credential;
688
+ };
689
+ const getBaseUrl = () => store.get().baseUrl;
690
+ /**
691
+ * Session-expiry latch (fire-once):
692
+ * - why: concurrent 401s all report expiry, but the app must sign out once; and the credential /
693
+ * auth middleware are long-lived singletons, so the latch can't live in them — it must reset
694
+ * per session.
695
+ * - how: returns `true` only for the first call since the last `authenticate` (which re-arms it),
696
+ * so the caller runs its sign-out exactly once per session death.
697
+ */
698
+ const notifyExpired = () => {
699
+ if (expiredNotified) return false;
700
+ expiredNotified = true;
701
+ return true;
702
+ };
703
+ const debug = () => store.get();
704
+ return {
705
+ store: {
706
+ get: store.get,
707
+ subscribe: store.subscribe,
708
+ dispose: store.dispose
709
+ },
710
+ setBaseUrl,
711
+ authenticate,
712
+ setProjectId,
713
+ clearProjectId,
714
+ reset,
715
+ applyRefresh,
716
+ forceExpire,
717
+ requireCredential,
718
+ getBaseUrl,
719
+ notifyExpired,
720
+ debug
721
+ };
784
722
  };
785
-
786
- // src/domain/stack.ts
787
- var SERVICE_URL_OVERRIDES = {
788
- // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.
789
- // I assume the service is versioned.
790
- "kai-assistant": (url) => `${url}/api`
723
+ //#endregion
724
+ //#region src/domain/defaultBranch.ts
725
+ const createDefaultBranch = ({ devBranches }) => {
726
+ const defaultBranch = devBranches.find((branch) => branch.isDefault);
727
+ assert(defaultBranch, "No default branch found for the project.");
728
+ const getType = (branchId) => {
729
+ if (branchId == null || branchId === "default") return "default";
730
+ return Number(branchId) === defaultBranch.id ? "default" : "dev";
731
+ };
732
+ return {
733
+ id: defaultBranch.id,
734
+ name: defaultBranch.name,
735
+ getType,
736
+ isDev: (branchId) => getType(branchId) === "dev",
737
+ isDefault: (branchId) => getType(branchId) === "default"
738
+ };
791
739
  };
792
- var createStack = ({ stackInfo, clientServiceUrls }) => {
793
- const { services, components, features, ...infoRest } = stackInfo;
794
- const serviceMap = new Map(
795
- services.map((service) => {
796
- const devOverride = clientServiceUrls?.[service.id]?.(service.url);
797
- const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
798
- const url = devOverride ?? prodOverride ?? service.url;
799
- return [service.id, url];
800
- })
801
- );
802
- const componentMap = new Map(components.map((component) => [component.id, component]));
803
- const featureSet = new Set(features);
804
- const hasFeature = (...feature) => {
805
- if (feature.length === 0) return false;
806
- return feature.every((x) => featureSet.has(x));
807
- };
808
- const hasComponent = (...componentId) => {
809
- if (componentId.length === 0) return false;
810
- return componentId.every((x) => componentMap.has(x));
811
- };
812
- const getComponent = (componentId) => componentMap.get(componentId) ?? null;
813
- const hasService = (serviceId) => serviceMap.has(serviceId);
814
- const getServiceUrl = (serviceId) => serviceMap.get(serviceId) ?? null;
815
- return {
816
- ...infoRest,
817
- services,
818
- features,
819
- components,
820
- hasFeature,
821
- getServiceUrl,
822
- hasService,
823
- getComponent,
824
- hasComponent
825
- };
740
+ //#endregion
741
+ //#region src/domain/stack.ts
742
+ const SERVICE_URL_OVERRIDES = { "kai-assistant": (url) => `${url}/api` };
743
+ const createStack = ({ stackInfo, clientServiceUrls }) => {
744
+ const { services, components, features, ...infoRest } = stackInfo;
745
+ const serviceMap = new Map(services.map((service) => {
746
+ const devOverride = clientServiceUrls?.[service.id]?.(service.url);
747
+ const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
748
+ const url = devOverride ?? prodOverride ?? service.url;
749
+ return [service.id, url];
750
+ }));
751
+ const componentMap = new Map(components.map((component) => [component.id, component]));
752
+ const featureSet = new Set(features);
753
+ const hasFeature = (...feature) => {
754
+ if (feature.length === 0) return false;
755
+ return feature.every((x) => featureSet.has(x));
756
+ };
757
+ const hasComponent = (...componentId) => {
758
+ if (componentId.length === 0) return false;
759
+ return componentId.every((x) => componentMap.has(x));
760
+ };
761
+ const getComponent = (componentId) => componentMap.get(componentId) ?? null;
762
+ const hasService = (serviceId) => serviceMap.has(serviceId);
763
+ const getServiceUrl = (serviceId) => serviceMap.get(serviceId) ?? null;
764
+ return {
765
+ ...infoRest,
766
+ services,
767
+ features,
768
+ components,
769
+ hasFeature,
770
+ getServiceUrl,
771
+ hasService,
772
+ getComponent,
773
+ hasComponent
774
+ };
826
775
  };
827
-
828
- // src/sdks/variables/variablesSdk.ts
829
- var VARIABLES_COMPONENT_ID = "keboola.variables";
830
- var mergeVariableDefinitions = (target, source) => {
831
- const targetNames = new Set(target.map((definition) => definition.name));
832
- return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];
776
+ //#endregion
777
+ //#region src/sdks/variables/variablesSdk.ts
778
+ const VARIABLES_COMPONENT_ID = "keboola.variables";
779
+ /** Union the definitions by name; on a name conflict the target's definition is kept. */
780
+ const mergeVariableDefinitions = (target, source) => {
781
+ const targetNames = new Set(target.map((definition) => definition.name));
782
+ return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];
833
783
  };
834
- var mergeVariableValues = (target, source) => {
835
- const sourceByName = new Map(source.map((value) => [value.name, value.value]));
836
- const targetNames = new Set(target.map((value) => value.name));
837
- return [
838
- ...target.map(
839
- (value) => sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value
840
- ),
841
- ...source.filter((value) => !targetNames.has(value.name))
842
- ];
784
+ /** Add values missing in the target; on a name conflict the value is updated to the source's. */
785
+ const mergeVariableValues = (target, source) => {
786
+ const sourceByName = new Map(source.map((value) => [value.name, value.value]));
787
+ const targetNames = new Set(target.map((value) => value.name));
788
+ return [...target.map((value) => sourceByName.has(value.name) ? {
789
+ ...value,
790
+ value: sourceByName.get(value.name)
791
+ } : value), ...source.filter((value) => !targetNames.has(value.name))];
843
792
  };
844
- var createVariablesSdk = ({ storageClient }) => {
845
- const configs = storageClient.configurations;
846
- const rows = storageClient.configurationRows;
847
- const readVariables = async (configId, valuesRowId, branchId) => {
848
- const config = await configs.getConfiguration({
849
- componentId: VARIABLES_COMPONENT_ID,
850
- configId,
851
- branchId
852
- });
853
- const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];
854
- const rawDefinitions = config.configuration?.variables;
855
- const rawValues = row?.configuration?.values;
856
- return {
857
- definitions: Array.isArray(rawDefinitions) ? rawDefinitions : [],
858
- values: Array.isArray(rawValues) ? rawValues : []
859
- };
860
- };
861
- const createVariables = async (definitions, values, branchId) => {
862
- const config = await configs.createConfiguration({
863
- branchId,
864
- componentId: VARIABLES_COMPONENT_ID,
865
- name: "Variables definition",
866
- configuration: { variables: definitions }
867
- });
868
- try {
869
- const row = await rows.createConfigurationRow({
870
- branchId: String(branchId),
871
- componentId: VARIABLES_COMPONENT_ID,
872
- configurationId: config.id,
873
- name: "Default values",
874
- configuration: { values }
875
- });
876
- return { variablesId: config.id, variablesValuesId: row.id };
877
- } catch (error) {
878
- await configs.deleteConfiguration({
879
- branchId,
880
- componentId: VARIABLES_COMPONENT_ID,
881
- configId: config.id
882
- }).catch((cleanupError) => {
883
- if (error instanceof Error && error.cause === void 0) {
884
- error.cause = cleanupError;
885
- }
886
- });
887
- throw error;
888
- }
889
- };
890
- return {
891
- /** Copy a variables config into a fresh, independent config + values row. */
892
- copy: async ({
893
- variablesId,
894
- variablesValuesId,
895
- branchId = "default"
896
- }) => {
897
- const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);
898
- return createVariables(definitions, values, branchId);
899
- },
900
- /** Merge the source's variables into the target's and create a fresh merged config + values row. */
901
- merge: async ({
902
- targetVariablesId,
903
- targetValuesId,
904
- sourceVariablesId,
905
- sourceValuesId,
906
- branchId = "default"
907
- }) => {
908
- const [target, source] = await Promise.all([
909
- readVariables(targetVariablesId, targetValuesId, branchId),
910
- readVariables(sourceVariablesId, sourceValuesId, branchId)
911
- ]);
912
- return createVariables(
913
- mergeVariableDefinitions(target.definitions, source.definitions),
914
- mergeVariableValues(target.values, source.values),
915
- branchId
916
- );
917
- }
918
- };
793
+ /**
794
+ * Orchestration for `keboola.variables` configs: copy a config, or merge two configs into a fresh
795
+ * one (union definitions, upsert values — source wins on a name conflict). Each result is a brand
796
+ * new config + values row, so the caller can reference it without sharing lineage with the source.
797
+ */
798
+ const createVariablesSdk = ({ storageClient }) => {
799
+ const configs = storageClient.configurations;
800
+ const rows = storageClient.configurationRows;
801
+ const readVariables = async (configId, valuesRowId, branchId) => {
802
+ const config = await configs.getConfiguration({
803
+ componentId: VARIABLES_COMPONENT_ID,
804
+ configId,
805
+ branchId
806
+ });
807
+ const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];
808
+ const rawDefinitions = config.configuration?.variables;
809
+ const rawValues = row?.configuration?.values;
810
+ return {
811
+ definitions: Array.isArray(rawDefinitions) ? rawDefinitions : [],
812
+ values: Array.isArray(rawValues) ? rawValues : []
813
+ };
814
+ };
815
+ const createVariables = async (definitions, values, branchId) => {
816
+ const config = await configs.createConfiguration({
817
+ branchId,
818
+ componentId: VARIABLES_COMPONENT_ID,
819
+ name: "Variables definition",
820
+ configuration: { variables: definitions }
821
+ });
822
+ try {
823
+ const row = await rows.createConfigurationRow({
824
+ branchId: String(branchId),
825
+ componentId: VARIABLES_COMPONENT_ID,
826
+ configurationId: config.id,
827
+ name: "Default values",
828
+ configuration: { values }
829
+ });
830
+ return {
831
+ variablesId: config.id,
832
+ variablesValuesId: row.id
833
+ };
834
+ } catch (error) {
835
+ await configs.deleteConfiguration({
836
+ branchId,
837
+ componentId: VARIABLES_COMPONENT_ID,
838
+ configId: config.id
839
+ }).catch((cleanupError) => {
840
+ if (error instanceof Error && error.cause === void 0) error.cause = cleanupError;
841
+ });
842
+ throw error;
843
+ }
844
+ };
845
+ return {
846
+ /** Copy a variables config into a fresh, independent config + values row. */
847
+ copy: async ({ variablesId, variablesValuesId, branchId = "default" }) => {
848
+ const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);
849
+ return createVariables(definitions, values, branchId);
850
+ },
851
+ /** Merge the source's variables into the target's and create a fresh merged config + values row. */
852
+ merge: async ({ targetVariablesId, targetValuesId, sourceVariablesId, sourceValuesId, branchId = "default" }) => {
853
+ const [target, source] = await Promise.all([readVariables(targetVariablesId, targetValuesId, branchId), readVariables(sourceVariablesId, sourceValuesId, branchId)]);
854
+ return createVariables(mergeVariableDefinitions(target.definitions, source.definitions), mergeVariableValues(target.values, source.values), branchId);
855
+ }
856
+ };
919
857
  };
920
- var agentSettingsSchema = z.object({
921
- projectId: z.string(),
922
- customInstructions: z.string().nullable(),
923
- createdAt: z.string(),
924
- updatedAt: z.string()
925
- });
926
- var toolPermissionValueSchema = z.enum(["always_allow", "always_ask", "blocked"]);
927
- var userAgentSettingsSchema = z.object({
928
- projectId: z.string(),
929
- userId: z.string(),
930
- customInstructions: z.string().nullable(),
931
- toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),
932
- createdAt: z.string(),
933
- updatedAt: z.string()
934
- });
935
- var toolInfoSchema = z.object({
936
- name: z.string(),
937
- description: z.string(),
938
- readOnly: z.boolean()
939
- });
940
- var toolsListResponseSchema = z.object({
941
- tools: z.array(toolInfoSchema)
858
+ //#endregion
859
+ //#region src/clients/kaiAgent/kaiAgentClient.ts
860
+ const agentSettingsSchema = z.object({
861
+ projectId: z.string(),
862
+ customInstructions: z.string().nullable(),
863
+ createdAt: z.string(),
864
+ updatedAt: z.string()
942
865
  });
943
- var skillInfoSchema = z.object({
944
- name: z.string(),
945
- description: z.string().nullable(),
946
- source: z.enum(["first-party", "vendored", "project"])
866
+ const toolPermissionValueSchema = z.enum([
867
+ "always_allow",
868
+ "always_ask",
869
+ "blocked"
870
+ ]);
871
+ const userAgentSettingsSchema = z.object({
872
+ projectId: z.string(),
873
+ userId: z.string(),
874
+ customInstructions: z.string().nullable(),
875
+ toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),
876
+ createdAt: z.string(),
877
+ updatedAt: z.string()
947
878
  });
948
- var builtInCommandSchema = z.object({
949
- name: z.string(),
950
- description: z.string()
879
+ const toolInfoSchema = z.object({
880
+ name: z.string(),
881
+ description: z.string(),
882
+ readOnly: z.boolean()
951
883
  });
952
- var skillsListResponseSchema = z.object({
953
- skills: z.array(skillInfoSchema),
954
- commands: z.array(builtInCommandSchema)
884
+ const toolsListResponseSchema = z.object({ tools: z.array(toolInfoSchema) });
885
+ const skillInfoSchema = z.object({
886
+ name: z.string(),
887
+ description: z.string().nullable(),
888
+ source: z.enum([
889
+ "first-party",
890
+ "vendored",
891
+ "project"
892
+ ])
955
893
  });
956
- var sandboxFileEntrySchema = z.object({
957
- name: z.string(),
958
- path: z.string(),
959
- type: z.enum(["file", "dir"]),
960
- size: z.number().int().nonnegative().optional()
894
+ const builtInCommandSchema = z.object({
895
+ name: z.string(),
896
+ description: z.string()
961
897
  });
962
- var sandboxFileListingSchema = z.object({
963
- entries: z.array(sandboxFileEntrySchema)
898
+ const skillsListResponseSchema = z.object({
899
+ skills: z.array(skillInfoSchema),
900
+ commands: z.array(builtInCommandSchema)
964
901
  });
965
- var sandboxFileContentSchema = z.object({
966
- content: z.string(),
967
- encoding: z.enum(["utf-8", "binary"]),
968
- truncated: z.boolean(),
969
- size: z.number().int().nonnegative()
902
+ const sandboxFileEntrySchema = z.object({
903
+ name: z.string(),
904
+ path: z.string(),
905
+ type: z.enum(["file", "dir"]),
906
+ size: z.number().int().nonnegative().optional()
970
907
  });
971
- var sandboxGitBranchSchema = z.object({
972
- branch: z.string().nullable()
908
+ const sandboxFileListingSchema = z.object({ entries: z.array(sandboxFileEntrySchema) });
909
+ const sandboxFileContentSchema = z.object({
910
+ content: z.string(),
911
+ encoding: z.enum(["utf-8", "binary"]),
912
+ truncated: z.boolean(),
913
+ size: z.number().int().nonnegative()
973
914
  });
974
- var votesResponseSchema = z.array(
975
- z.object({
976
- chatId: z.string(),
977
- messageId: z.string(),
978
- isUpvoted: z.boolean()
979
- })
980
- );
981
- var createKaiAgentClient = ({ baseUrl, middlewares, auth }) => {
982
- const clientOptions = {
983
- baseUrl,
984
- middlewares,
985
- headers: createAuthHeaders(auth)
986
- };
987
- const client = createOpenapiFetchClient(clientOptions);
988
- const genericClient = createGenericFetchClient(clientOptions);
989
- const getHistory = async (params) => {
990
- const { data } = await client.get("/api/history", { query: params });
991
- return data;
992
- };
993
- const getChat = async (chatId, signal) => {
994
- const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
995
- return data;
996
- };
997
- const deleteChat = async (chatId) => {
998
- const { data } = await client.delete("/api/chat", { query: { id: chatId } });
999
- return data;
1000
- };
1001
- const createChat = async (request) => {
1002
- const { response } = await client.post("/api/chat", { body: request });
1003
- return response;
1004
- };
1005
- const getVotes = async (chatId) => {
1006
- const { data } = await client.get("/api/vote", { query: { chatId } });
1007
- const result = votesResponseSchema.safeParse(data);
1008
- if (!result.success) {
1009
- throw new Error("Invalid votes response format");
1010
- }
1011
- return result.data;
1012
- };
1013
- const submitVote = async (params) => {
1014
- await client.patch("/api/vote", { body: params });
1015
- };
1016
- const getUsage = async (signal) => {
1017
- const { data } = await client.get("/api/usage", {}, { signal });
1018
- return data;
1019
- };
1020
- const approveToolCall = async (chatId, body) => {
1021
- await client.post("/api/chat/{id}/approval", { path: { id: chatId }, body });
1022
- };
1023
- const submitToolOutput = async (chatId, body) => {
1024
- await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
1025
- };
1026
- const stopChat = async (chatId) => {
1027
- const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
1028
- return data;
1029
- };
1030
- const getSuggestions = async (request, signal) => {
1031
- const { data } = await client.post("/api/suggestions", { body: request }, { signal });
1032
- return data;
1033
- };
1034
- const getAgentSettings = async (signal) => {
1035
- const { data } = await genericClient.get("/api/settings", {}, { signal });
1036
- const result = agentSettingsSchema.safeParse(data);
1037
- if (!result.success) {
1038
- throw new Error("Invalid agent settings response format");
1039
- }
1040
- return result.data;
1041
- };
1042
- const updateAgentSettings = async (request, signal) => {
1043
- const { data } = await genericClient.patch(
1044
- "/api/settings",
1045
- { body: request },
1046
- { signal }
1047
- );
1048
- const result = agentSettingsSchema.safeParse(data);
1049
- if (!result.success) {
1050
- throw new Error("Invalid agent settings response format");
1051
- }
1052
- return result.data;
1053
- };
1054
- const getUserAgentSettings = async (signal) => {
1055
- const { data } = await genericClient.get(
1056
- "/api/settings/user",
1057
- {},
1058
- { signal }
1059
- );
1060
- const result = userAgentSettingsSchema.safeParse(data);
1061
- if (!result.success) {
1062
- throw new Error("Invalid user agent settings response format");
1063
- }
1064
- return result.data;
1065
- };
1066
- const updateUserAgentSettings = async (request, signal) => {
1067
- const { data } = await genericClient.patch(
1068
- "/api/settings/user",
1069
- { body: request },
1070
- { signal }
1071
- );
1072
- const result = userAgentSettingsSchema.safeParse(data);
1073
- if (!result.success) {
1074
- throw new Error("Invalid user agent settings response format");
1075
- }
1076
- return result.data;
1077
- };
1078
- const getToolsList = async (signal) => {
1079
- const { data } = await genericClient.get(
1080
- "/api/settings/tools",
1081
- {},
1082
- { signal }
1083
- );
1084
- const result = toolsListResponseSchema.safeParse(data);
1085
- if (!result.success) {
1086
- throw new Error("Invalid tools list response format");
1087
- }
1088
- return result.data;
1089
- };
1090
- const getSkillsList = async (signal) => {
1091
- const { data } = await genericClient.get("/api/skills", {}, { signal });
1092
- const result = skillsListResponseSchema.safeParse(data);
1093
- if (!result.success) {
1094
- throw new Error("Invalid skills list response format");
1095
- }
1096
- return result.data;
1097
- };
1098
- const listSandboxFiles = async (chatId, path, signal) => {
1099
- const { data } = await genericClient.get(
1100
- `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,
1101
- { query: path ? { path } : void 0 },
1102
- { signal }
1103
- );
1104
- const result = sandboxFileListingSchema.safeParse(data);
1105
- if (!result.success) {
1106
- throw new Error("Invalid sandbox files response format");
1107
- }
1108
- return result.data;
1109
- };
1110
- const readSandboxFile = async (chatId, path, signal) => {
1111
- const { data } = await genericClient.get(
1112
- `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,
1113
- { query: { path } },
1114
- { signal }
1115
- );
1116
- const result = sandboxFileContentSchema.safeParse(data);
1117
- if (!result.success) {
1118
- throw new Error("Invalid sandbox file response format");
1119
- }
1120
- return result.data;
1121
- };
1122
- const getSandboxGitBranch = async (chatId, signal) => {
1123
- const { data } = await genericClient.get(
1124
- `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,
1125
- {},
1126
- { signal }
1127
- );
1128
- const result = sandboxGitBranchSchema.safeParse(data);
1129
- if (!result.success) {
1130
- throw new Error("Invalid sandbox git-branch response format");
1131
- }
1132
- return result.data;
1133
- };
1134
- const chatStreamUrl = clientOptions.baseUrl + "/api/chat";
1135
- const healthCheck = async (signal) => {
1136
- const { data } = await genericClient.get("/health", {}, { signal });
1137
- return data;
1138
- };
1139
- return {
1140
- healthCheck,
1141
- getHistory,
1142
- getChat,
1143
- deleteChat,
1144
- createChat,
1145
- getVotes,
1146
- submitVote,
1147
- getUsage,
1148
- approveToolCall,
1149
- submitToolOutput,
1150
- stopChat,
1151
- getSuggestions,
1152
- getAgentSettings,
1153
- updateAgentSettings,
1154
- getUserAgentSettings,
1155
- updateUserAgentSettings,
1156
- getToolsList,
1157
- getSkillsList,
1158
- listSandboxFiles,
1159
- readSandboxFile,
1160
- getSandboxGitBranch,
1161
- chatStreamUrl
1162
- };
915
+ const sandboxGitBranchSchema = z.object({ branch: z.string().nullable() });
916
+ const votesResponseSchema = z.array(z.object({
917
+ chatId: z.string(),
918
+ messageId: z.string(),
919
+ isUpvoted: z.boolean()
920
+ }));
921
+ const createKaiAgentClient = ({ baseUrl, middlewares, auth }) => {
922
+ const clientOptions = {
923
+ baseUrl,
924
+ middlewares,
925
+ headers: createAuthHeaders(auth)
926
+ };
927
+ const client = createOpenapiFetchClient(clientOptions);
928
+ const genericClient = createGenericFetchClient(clientOptions);
929
+ const getHistory = async (params) => {
930
+ const { data } = await client.get("/api/history", { query: params });
931
+ return data;
932
+ };
933
+ const getChat = async (chatId, signal) => {
934
+ const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
935
+ return data;
936
+ };
937
+ const deleteChat = async (chatId) => {
938
+ const { data } = await client.delete("/api/chat", { query: { id: chatId } });
939
+ return data;
940
+ };
941
+ const createChat = async (request) => {
942
+ const { response } = await client.post("/api/chat", { body: request });
943
+ return response;
944
+ };
945
+ const getVotes = async (chatId) => {
946
+ const { data } = await client.get("/api/vote", { query: { chatId } });
947
+ const result = votesResponseSchema.safeParse(data);
948
+ if (!result.success) throw new Error("Invalid votes response format");
949
+ return result.data;
950
+ };
951
+ const submitVote = async (params) => {
952
+ await client.patch("/api/vote", { body: params });
953
+ };
954
+ const getUsage = async (signal) => {
955
+ const { data } = await client.get("/api/usage", {}, { signal });
956
+ return data;
957
+ };
958
+ const approveToolCall = async (chatId, body) => {
959
+ await client.post("/api/chat/{id}/approval", {
960
+ path: { id: chatId },
961
+ body
962
+ });
963
+ };
964
+ const submitToolOutput = async (chatId, body) => {
965
+ await client.post("/api/chat/{id}/ui-tool-result", {
966
+ path: { id: chatId },
967
+ body
968
+ });
969
+ };
970
+ const stopChat = async (chatId) => {
971
+ const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
972
+ return data;
973
+ };
974
+ const getSuggestions = async (request, signal) => {
975
+ const { data } = await client.post("/api/suggestions", { body: request }, { signal });
976
+ return data;
977
+ };
978
+ const getAgentSettings = async (signal) => {
979
+ const { data } = await genericClient.get("/api/settings", {}, { signal });
980
+ const result = agentSettingsSchema.safeParse(data);
981
+ if (!result.success) throw new Error("Invalid agent settings response format");
982
+ return result.data;
983
+ };
984
+ const updateAgentSettings = async (request, signal) => {
985
+ const { data } = await genericClient.patch("/api/settings", { body: request }, { signal });
986
+ const result = agentSettingsSchema.safeParse(data);
987
+ if (!result.success) throw new Error("Invalid agent settings response format");
988
+ return result.data;
989
+ };
990
+ const getUserAgentSettings = async (signal) => {
991
+ const { data } = await genericClient.get("/api/settings/user", {}, { signal });
992
+ const result = userAgentSettingsSchema.safeParse(data);
993
+ if (!result.success) throw new Error("Invalid user agent settings response format");
994
+ return result.data;
995
+ };
996
+ const updateUserAgentSettings = async (request, signal) => {
997
+ const { data } = await genericClient.patch("/api/settings/user", { body: request }, { signal });
998
+ const result = userAgentSettingsSchema.safeParse(data);
999
+ if (!result.success) throw new Error("Invalid user agent settings response format");
1000
+ return result.data;
1001
+ };
1002
+ const getToolsList = async (signal) => {
1003
+ const { data } = await genericClient.get("/api/settings/tools", {}, { signal });
1004
+ const result = toolsListResponseSchema.safeParse(data);
1005
+ if (!result.success) throw new Error("Invalid tools list response format");
1006
+ return result.data;
1007
+ };
1008
+ const getSkillsList = async (signal) => {
1009
+ const { data } = await genericClient.get("/api/skills", {}, { signal });
1010
+ const result = skillsListResponseSchema.safeParse(data);
1011
+ if (!result.success) throw new Error("Invalid skills list response format");
1012
+ return result.data;
1013
+ };
1014
+ const listSandboxFiles = async (chatId, path, signal) => {
1015
+ const { data } = await genericClient.get(`/api/chat/${encodeURIComponent(chatId)}/sandbox/files`, { query: path ? { path } : void 0 }, { signal });
1016
+ const result = sandboxFileListingSchema.safeParse(data);
1017
+ if (!result.success) throw new Error("Invalid sandbox files response format");
1018
+ return result.data;
1019
+ };
1020
+ const readSandboxFile = async (chatId, path, signal) => {
1021
+ const { data } = await genericClient.get(`/api/chat/${encodeURIComponent(chatId)}/sandbox/file`, { query: { path } }, { signal });
1022
+ const result = sandboxFileContentSchema.safeParse(data);
1023
+ if (!result.success) throw new Error("Invalid sandbox file response format");
1024
+ return result.data;
1025
+ };
1026
+ const getSandboxGitBranch = async (chatId, signal) => {
1027
+ const { data } = await genericClient.get(`/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`, {}, { signal });
1028
+ const result = sandboxGitBranchSchema.safeParse(data);
1029
+ if (!result.success) throw new Error("Invalid sandbox git-branch response format");
1030
+ return result.data;
1031
+ };
1032
+ const chatStreamUrl = clientOptions.baseUrl + "/api/chat";
1033
+ const healthCheck = async (signal) => {
1034
+ const { data } = await genericClient.get("/health", {}, { signal });
1035
+ return data;
1036
+ };
1037
+ return {
1038
+ healthCheck,
1039
+ getHistory,
1040
+ getChat,
1041
+ deleteChat,
1042
+ createChat,
1043
+ getVotes,
1044
+ submitVote,
1045
+ getUsage,
1046
+ approveToolCall,
1047
+ submitToolOutput,
1048
+ stopChat,
1049
+ getSuggestions,
1050
+ getAgentSettings,
1051
+ updateAgentSettings,
1052
+ getUserAgentSettings,
1053
+ updateUserAgentSettings,
1054
+ getToolsList,
1055
+ getSkillsList,
1056
+ listSandboxFiles,
1057
+ readSandboxFile,
1058
+ getSandboxGitBranch,
1059
+ chatStreamUrl
1060
+ };
1163
1061
  };
1164
-
1165
- // src/keboola/createServiceClients.ts
1166
- var createServiceClients = ({
1167
- baseUrl,
1168
- auth,
1169
- getServiceBaseUrl,
1170
- middlewareFor,
1171
- attachTokenMiddleware
1172
- }) => createServiceClientRegistry()({
1173
- getServiceBaseUrl,
1174
- onUnavailable: ({ serviceId, path, clientName }) => {
1175
- throw new ServiceUnavailableError(serviceId, path, clientName);
1176
- }
1062
+ //#endregion
1063
+ //#region src/keboola/createServiceClients.ts
1064
+ const createServiceClients = ({ baseUrl, auth, getServiceBaseUrl, middlewareFor, attachTokenMiddleware }) => createServiceClientRegistry()({
1065
+ getServiceBaseUrl,
1066
+ onUnavailable: ({ serviceId, path, clientName }) => {
1067
+ throw new ServiceUnavailableError(serviceId, path, clientName);
1068
+ }
1177
1069
  }).add({
1178
- serviceId: "vault",
1179
- clientName: "vault",
1180
- clientFn: (serviceBaseUrl) => createVaultClient({
1181
- baseUrl: serviceBaseUrl,
1182
- middlewares: middlewareFor("vault", [attachTokenMiddleware]),
1183
- auth
1184
- })
1070
+ serviceId: "vault",
1071
+ clientName: "vault",
1072
+ clientFn: (serviceBaseUrl) => createVaultClient({
1073
+ baseUrl: serviceBaseUrl,
1074
+ middlewares: middlewareFor("vault", [attachTokenMiddleware]),
1075
+ auth
1076
+ })
1185
1077
  }).add({
1186
- serviceId: "data-science",
1187
- clientName: "dataScience",
1188
- clientFn: (serviceBaseUrl) => createDataScienceClient({
1189
- baseUrl: serviceBaseUrl,
1190
- middlewares: middlewareFor("dataScience", [attachTokenMiddleware]),
1191
- auth
1192
- })
1078
+ serviceId: "data-science",
1079
+ clientName: "dataScience",
1080
+ clientFn: (serviceBaseUrl) => createDataScienceClient({
1081
+ baseUrl: serviceBaseUrl,
1082
+ middlewares: middlewareFor("dataScience", [attachTokenMiddleware]),
1083
+ auth
1084
+ })
1193
1085
  }).add({
1194
- // Deliberately the `data-science` service: the `/v2` App Deployments surface is the same
1195
- // sandboxes-service deployment one path prefix over, so it resolves off that URL with `/v2`
1196
- // appended. The `apps.<stack>` vanity host serves the same routes at its root but is absent
1197
- // from the stack's service index, so it cannot be resolved.
1198
- // Second client composing a prefix onto a service URL after `omnisearch` below; at a third,
1199
- // give `.add()` a `pathPrefix` the registry joins so the join can't be got wrong per call site.
1200
- serviceId: "data-science",
1201
- clientName: "apps",
1202
- clientFn: (serviceBaseUrl) => createAppsClient({
1203
- baseUrl: `${serviceBaseUrl}/v2`,
1204
- middlewares: middlewareFor("apps", [attachTokenMiddleware]),
1205
- auth
1206
- })
1086
+ serviceId: "data-science",
1087
+ clientName: "apps",
1088
+ clientFn: (serviceBaseUrl) => createAppsClient({
1089
+ baseUrl: `${serviceBaseUrl}/v2`,
1090
+ middlewares: middlewareFor("apps", [attachTokenMiddleware]),
1091
+ auth
1092
+ })
1207
1093
  }).add({
1208
- serviceId: "encryption",
1209
- clientName: "encryption",
1210
- clientFn: (serviceBaseUrl) => createEncryptionClient({
1211
- baseUrl: serviceBaseUrl,
1212
- middlewares: middlewareFor("encryption")
1213
- })
1094
+ serviceId: "encryption",
1095
+ clientName: "encryption",
1096
+ clientFn: (serviceBaseUrl) => createEncryptionClient({
1097
+ baseUrl: serviceBaseUrl,
1098
+ middlewares: middlewareFor("encryption")
1099
+ })
1214
1100
  }).add({
1215
- serviceId: "editor",
1216
- clientName: "editor",
1217
- clientFn: (serviceBaseUrl) => createEditorClient({
1218
- baseUrl: serviceBaseUrl,
1219
- middlewares: middlewareFor("editor", [attachTokenMiddleware]),
1220
- auth
1221
- })
1101
+ serviceId: "editor",
1102
+ clientName: "editor",
1103
+ clientFn: (serviceBaseUrl) => createEditorClient({
1104
+ baseUrl: serviceBaseUrl,
1105
+ middlewares: middlewareFor("editor", [attachTokenMiddleware]),
1106
+ auth
1107
+ })
1222
1108
  }).add({
1223
- serviceId: "sync-actions",
1224
- clientName: "syncActions",
1225
- clientFn: (serviceBaseUrl) => createSyncActionsClient({
1226
- baseUrl: serviceBaseUrl,
1227
- middlewares: middlewareFor("syncActions", [attachTokenMiddleware]),
1228
- auth
1229
- })
1109
+ serviceId: "sync-actions",
1110
+ clientName: "syncActions",
1111
+ clientFn: (serviceBaseUrl) => createSyncActionsClient({
1112
+ baseUrl: serviceBaseUrl,
1113
+ middlewares: middlewareFor("syncActions", [attachTokenMiddleware]),
1114
+ auth
1115
+ })
1230
1116
  }).add({
1231
- serviceId: "telemetry",
1232
- clientName: "telemetry",
1233
- clientFn: (serviceBaseUrl) => createTelemetryClient({
1234
- baseUrl: serviceBaseUrl,
1235
- middlewares: middlewareFor("telemetry", [attachTokenMiddleware]),
1236
- auth
1237
- })
1117
+ serviceId: "telemetry",
1118
+ clientName: "telemetry",
1119
+ clientFn: (serviceBaseUrl) => createTelemetryClient({
1120
+ baseUrl: serviceBaseUrl,
1121
+ middlewares: middlewareFor("telemetry", [attachTokenMiddleware]),
1122
+ auth
1123
+ })
1238
1124
  }).add({
1239
- serviceId: "query",
1240
- clientName: "queryService",
1241
- clientFn: (serviceBaseUrl) => createQueryServiceClient({
1242
- baseUrl: serviceBaseUrl,
1243
- middlewares: middlewareFor("queryService", [attachTokenMiddleware]),
1244
- auth
1245
- })
1125
+ serviceId: "query",
1126
+ clientName: "queryService",
1127
+ clientFn: (serviceBaseUrl) => createQueryServiceClient({
1128
+ baseUrl: serviceBaseUrl,
1129
+ middlewares: middlewareFor("queryService", [attachTokenMiddleware]),
1130
+ auth
1131
+ })
1246
1132
  }).add({
1247
- serviceId: "queue",
1248
- clientName: "queue",
1249
- clientFn: (serviceBaseUrl) => createQueueClient({
1250
- baseUrl: serviceBaseUrl,
1251
- middlewares: middlewareFor("queue", [attachTokenMiddleware]),
1252
- auth
1253
- })
1133
+ serviceId: "queue",
1134
+ clientName: "queue",
1135
+ clientFn: (serviceBaseUrl) => createQueueClient({
1136
+ baseUrl: serviceBaseUrl,
1137
+ middlewares: middlewareFor("queue", [attachTokenMiddleware]),
1138
+ auth
1139
+ })
1254
1140
  }).add({
1255
- serviceId: "kai-assistant",
1256
- clientName: "chat",
1257
- clientFn: (serviceBaseUrl) => createChatClient({
1258
- storageApiUrl: baseUrl,
1259
- baseUrl: serviceBaseUrl,
1260
- middlewares: middlewareFor("chat", [attachTokenMiddleware]),
1261
- auth
1262
- })
1141
+ serviceId: "kai-assistant",
1142
+ clientName: "chat",
1143
+ clientFn: (serviceBaseUrl) => createChatClient({
1144
+ storageApiUrl: baseUrl,
1145
+ baseUrl: serviceBaseUrl,
1146
+ middlewares: middlewareFor("chat", [attachTokenMiddleware]),
1147
+ auth
1148
+ })
1263
1149
  }).add({
1264
- serviceId: "ai",
1265
- clientName: "ai",
1266
- clientFn: (serviceBaseUrl) => createAiClient({
1267
- baseUrl: serviceBaseUrl,
1268
- middlewares: middlewareFor("ai", [attachTokenMiddleware]),
1269
- auth
1270
- })
1150
+ serviceId: "ai",
1151
+ clientName: "ai",
1152
+ clientFn: (serviceBaseUrl) => createAiClient({
1153
+ baseUrl: serviceBaseUrl,
1154
+ middlewares: middlewareFor("ai", [attachTokenMiddleware]),
1155
+ auth
1156
+ })
1271
1157
  }).add({
1272
- // Deliberately the `ai` service: omnisearch is a separate deployment that the ai-service
1273
- // ingress exposes under `/omnisearch`, so it resolves off that URL with the prefix appended —
1274
- // the same shape as the `kai-assistant` `/api` override in `domain/stack.ts`.
1275
- serviceId: "ai",
1276
- clientName: "omnisearch",
1277
- clientFn: (serviceBaseUrl) => createOmnisearchClient({
1278
- baseUrl: `${serviceBaseUrl}/omnisearch`,
1279
- middlewares: middlewareFor("omnisearch", [attachTokenMiddleware]),
1280
- auth
1281
- })
1158
+ serviceId: "ai",
1159
+ clientName: "omnisearch",
1160
+ clientFn: (serviceBaseUrl) => createOmnisearchClient({
1161
+ baseUrl: `${serviceBaseUrl}/omnisearch`,
1162
+ middlewares: middlewareFor("omnisearch", [attachTokenMiddleware]),
1163
+ auth
1164
+ })
1282
1165
  }).add({
1283
- serviceId: "import",
1284
- clientName: "import",
1285
- clientFn: (serviceBaseUrl) => createImportClient({
1286
- baseUrl: serviceBaseUrl,
1287
- middlewares: middlewareFor("import", [attachTokenMiddleware]),
1288
- auth
1289
- })
1166
+ serviceId: "import",
1167
+ clientName: "import",
1168
+ clientFn: (serviceBaseUrl) => createImportClient({
1169
+ baseUrl: serviceBaseUrl,
1170
+ middlewares: middlewareFor("import", [attachTokenMiddleware]),
1171
+ auth
1172
+ })
1290
1173
  }).add({
1291
- serviceId: "kai-agent",
1292
- clientName: "kaiAgent",
1293
- clientFn: (serviceBaseUrl) => createKaiAgentClient({
1294
- baseUrl: serviceBaseUrl,
1295
- middlewares: middlewareFor("kaiAgent", [attachTokenMiddleware]),
1296
- auth
1297
- })
1174
+ serviceId: "kai-agent",
1175
+ clientName: "kaiAgent",
1176
+ clientFn: (serviceBaseUrl) => createKaiAgentClient({
1177
+ baseUrl: serviceBaseUrl,
1178
+ middlewares: middlewareFor("kaiAgent", [attachTokenMiddleware]),
1179
+ auth
1180
+ })
1298
1181
  }).add({
1299
- serviceId: "oauth",
1300
- clientName: "oauth",
1301
- clientFn: (serviceBaseUrl) => createOauthClient({
1302
- baseUrl: serviceBaseUrl,
1303
- middlewares: middlewareFor("oauth", [attachTokenMiddleware]),
1304
- auth
1305
- })
1182
+ serviceId: "oauth",
1183
+ clientName: "oauth",
1184
+ clientFn: (serviceBaseUrl) => createOauthClient({
1185
+ baseUrl: serviceBaseUrl,
1186
+ middlewares: middlewareFor("oauth", [attachTokenMiddleware]),
1187
+ auth
1188
+ })
1306
1189
  }).add({
1307
- serviceId: "scheduler",
1308
- clientName: "scheduler",
1309
- clientFn: (serviceBaseUrl) => createSchedulerClient({
1310
- baseUrl: serviceBaseUrl,
1311
- middlewares: middlewareFor("scheduler", [attachTokenMiddleware]),
1312
- auth
1313
- })
1190
+ serviceId: "scheduler",
1191
+ clientName: "scheduler",
1192
+ clientFn: (serviceBaseUrl) => createSchedulerClient({
1193
+ baseUrl: serviceBaseUrl,
1194
+ middlewares: middlewareFor("scheduler", [attachTokenMiddleware]),
1195
+ auth
1196
+ })
1314
1197
  }).add({
1315
- serviceId: "stream",
1316
- clientName: "stream",
1317
- clientFn: (serviceBaseUrl) => createStreamClient({
1318
- baseUrl: serviceBaseUrl,
1319
- middlewares: middlewareFor("stream", [attachTokenMiddleware]),
1320
- auth
1321
- })
1198
+ serviceId: "stream",
1199
+ clientName: "stream",
1200
+ clientFn: (serviceBaseUrl) => createStreamClient({
1201
+ baseUrl: serviceBaseUrl,
1202
+ middlewares: middlewareFor("stream", [attachTokenMiddleware]),
1203
+ auth
1204
+ })
1322
1205
  }).add({
1323
- serviceId: "notification",
1324
- clientName: "notifications",
1325
- clientFn: (serviceBaseUrl) => createNotificationsClient({
1326
- baseUrl: serviceBaseUrl,
1327
- middlewares: middlewareFor("notifications", [attachTokenMiddleware]),
1328
- auth
1329
- })
1206
+ serviceId: "notification",
1207
+ clientName: "notifications",
1208
+ clientFn: (serviceBaseUrl) => createNotificationsClient({
1209
+ baseUrl: serviceBaseUrl,
1210
+ middlewares: middlewareFor("notifications", [attachTokenMiddleware]),
1211
+ auth
1212
+ })
1330
1213
  }).add({
1331
- serviceId: "metastore",
1332
- clientName: "metastore",
1333
- clientFn: (serviceBaseUrl) => createMetastoreClient({
1334
- baseUrl: serviceBaseUrl,
1335
- middlewares: middlewareFor("metastore", [attachTokenMiddleware]),
1336
- auth
1337
- })
1214
+ serviceId: "metastore",
1215
+ clientName: "metastore",
1216
+ clientFn: (serviceBaseUrl) => createMetastoreClient({
1217
+ baseUrl: serviceBaseUrl,
1218
+ middlewares: middlewareFor("metastore", [attachTokenMiddleware]),
1219
+ auth
1220
+ })
1338
1221
  }).build();
1339
-
1340
- // src/keboola/bearer/createProjectClients.ts
1341
- var createProjectClients = async ({
1342
- baseUrl,
1343
- projectId,
1344
- authMiddleware,
1345
- middlewareFor,
1346
- clientServiceUrls
1347
- }) => {
1348
- const auth = { type: "bearer", token: "", projectId };
1349
- const projectIdMiddleware = (next) => (request) => {
1350
- request.request.headers.set(KeboolaHttpHeader.PROJECT_ID, String(projectId));
1351
- return next(request);
1352
- };
1353
- const attach = (next) => projectIdMiddleware(authMiddleware(next));
1354
- const reader = createStorageClient({ baseUrl, auth, middlewares: [attach] });
1355
- const [stackInfo, sapiToken, devBranches] = await Promise.all([
1356
- reader.getStackInfo({ exclude: "componentDetails" }),
1357
- reader.tokens.verify(),
1358
- reader.branches.getDevBranches()
1359
- ]);
1360
- const stack = createStack({ stackInfo, clientServiceUrls });
1361
- const defaultBranch = createDefaultBranch({ devBranches });
1362
- const liveProject = createLiveProject({
1363
- initialToken: sapiToken,
1364
- verify: () => reader.tokens.verify()
1365
- });
1366
- const storageTableStore = createDerivedStore({
1367
- source: liveProject.store,
1368
- build: createStorageTable,
1369
- dependsOn: (project) => ({
1370
- useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),
1371
- hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),
1372
- hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches)
1373
- })
1374
- });
1375
- const context = {
1376
- baseUrl: normalizeBaseUrl(baseUrl),
1377
- stack,
1378
- defaultBranch,
1379
- get project() {
1380
- return liveProject.getProject();
1381
- },
1382
- get st() {
1383
- return storageTableStore.get();
1384
- }
1385
- };
1386
- const storage = createStorageClient({
1387
- baseUrl,
1388
- auth,
1389
- middlewares: middlewareFor("storage", [attach, liveProject.middleware])
1390
- });
1391
- const { client: services, meta: serviceMeta } = createServiceClients({
1392
- baseUrl,
1393
- auth,
1394
- getServiceBaseUrl: context.stack.getServiceUrl,
1395
- middlewareFor,
1396
- attachTokenMiddleware: attach
1397
- });
1398
- const sdk = {
1399
- configuration: createConfigurationSdk({
1400
- storageClient: storage,
1401
- encryptionClient: services.encryption,
1402
- context
1403
- }),
1404
- tag: createTagSdk({ metastoreClient: services.metastore }),
1405
- semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),
1406
- storage: createStorageSdk({ storageClient: storage }),
1407
- vault: createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),
1408
- variables: createVariablesSdk({ storageClient: storage })
1409
- };
1410
- return { context, serviceMeta, storage, ...services, sdk };
1411
- };
1412
-
1413
- // src/keboola/bearer/credential.ts
1414
- var DEFAULT_REFRESH_THRESHOLD = 0.9;
1415
- var isUnauthorized = (error) => error instanceof ApiError && error.response.status === HttpStatus.UNAUTHORIZED;
1416
- var createBearerCredential = ({
1417
- refresh,
1418
- getToken,
1419
- onSessionExpired,
1420
- refreshThreshold = DEFAULT_REFRESH_THRESHOLD
1421
- }) => {
1422
- const doRefresh = async () => {
1423
- try {
1424
- return await refresh();
1425
- } catch (error) {
1426
- if (isUnauthorized(error)) onSessionExpired?.();
1427
- throw error;
1428
- }
1429
- };
1430
- const refreshShared = dedupe(doRefresh);
1431
- const refreshAt = (timing) => timing.issuedAt + timing.expiresIn * 1e3 * refreshThreshold;
1432
- const getAccessToken = async ({ forceRefresh = false } = {}) => {
1433
- const snapshot = getToken();
1434
- if (snapshot === null) return null;
1435
- const { accessToken, timing } = snapshot;
1436
- if (forceRefresh) return refreshShared();
1437
- if (Date.now() < refreshAt(timing)) return accessToken;
1438
- return refreshShared().catch(() => accessToken);
1439
- };
1440
- return { getAccessToken, notifyExpired: () => onSessionExpired?.() };
1222
+ //#endregion
1223
+ //#region src/keboola/bearer/createProjectClients.ts
1224
+ /**
1225
+ * Bearer (OAuth) project surface. Same handshake + assembly as the legacy build. The
1226
+ * `Authorization: Bearer` header + transparent refresh come from the engine-shared `authMiddleware`
1227
+ * (one instance for management + every project client). This build only adds the project-scoped
1228
+ * `X-KBC-ProjectId` header, composed *outside* the auth middleware so the header is present
1229
+ * before it clones the request for the 401 replay. Bearer has no static token header, so this
1230
+ * combined `attach` rides on every client — including the operational storage and the bootstrap reader.
1231
+ */
1232
+ const createProjectClients$1 = async ({ baseUrl, projectId, authMiddleware, middlewareFor, clientServiceUrls }) => {
1233
+ const auth = {
1234
+ type: "bearer",
1235
+ token: "",
1236
+ projectId
1237
+ };
1238
+ const projectIdMiddleware = (next) => (request) => {
1239
+ request.request.headers.set(KeboolaHttpHeader.PROJECT_ID, String(projectId));
1240
+ return next(request);
1241
+ };
1242
+ const attach = (next) => projectIdMiddleware(authMiddleware(next));
1243
+ const reader = createStorageClient({
1244
+ baseUrl,
1245
+ auth,
1246
+ middlewares: [attach]
1247
+ });
1248
+ const [stackInfo, sapiToken, devBranches] = await Promise.all([
1249
+ reader.getStackInfo({ exclude: "componentDetails" }),
1250
+ reader.tokens.verify(),
1251
+ reader.branches.getDevBranches()
1252
+ ]);
1253
+ const stack = createStack({
1254
+ stackInfo,
1255
+ clientServiceUrls
1256
+ });
1257
+ const defaultBranch = createDefaultBranch({ devBranches });
1258
+ const liveProject = createLiveProject({
1259
+ initialToken: sapiToken,
1260
+ verify: () => reader.tokens.verify()
1261
+ });
1262
+ const storageTableStore = createDerivedStore({
1263
+ source: liveProject.store,
1264
+ build: createStorageTable,
1265
+ dependsOn: (project) => ({
1266
+ useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),
1267
+ hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),
1268
+ hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches)
1269
+ })
1270
+ });
1271
+ const context = {
1272
+ baseUrl: normalizeBaseUrl(baseUrl),
1273
+ stack,
1274
+ defaultBranch,
1275
+ get project() {
1276
+ return liveProject.getProject();
1277
+ },
1278
+ get st() {
1279
+ return storageTableStore.get();
1280
+ }
1281
+ };
1282
+ const storage = createStorageClient({
1283
+ baseUrl,
1284
+ auth,
1285
+ middlewares: middlewareFor("storage", [attach, liveProject.middleware])
1286
+ });
1287
+ const { client: services, meta: serviceMeta } = createServiceClients({
1288
+ baseUrl,
1289
+ auth,
1290
+ getServiceBaseUrl: context.stack.getServiceUrl,
1291
+ middlewareFor,
1292
+ attachTokenMiddleware: attach
1293
+ });
1294
+ const sdk = {
1295
+ configuration: createConfigurationSdk({
1296
+ storageClient: storage,
1297
+ encryptionClient: services.encryption,
1298
+ context
1299
+ }),
1300
+ tag: createTagSdk({ metastoreClient: services.metastore }),
1301
+ semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),
1302
+ storage: createStorageSdk({ storageClient: storage }),
1303
+ vault: createVaultSdk({
1304
+ vaultClient: services.vault,
1305
+ encryptionClient: services.encryption
1306
+ }),
1307
+ variables: createVariablesSdk({ storageClient: storage })
1308
+ };
1309
+ return {
1310
+ context,
1311
+ serviceMeta,
1312
+ storage,
1313
+ ...services,
1314
+ sdk
1315
+ };
1441
1316
  };
1442
-
1443
- // src/keboola/bearer/middleware.ts
1444
- var createBearerAuthMiddleware = (credential) => {
1445
- return (next) => async (request) => {
1446
- const token = await credential.getAccessToken({ forceRefresh: false });
1447
- if (token === null) return next(request);
1448
- const retryRequest = request.request.clone();
1449
- request.request.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${token}`);
1450
- try {
1451
- return await next(request);
1452
- } catch (error) {
1453
- if (!isUnauthorized(error)) throw error;
1454
- const refreshed = await credential.getAccessToken({ forceRefresh: true });
1455
- if (refreshed === null) throw error;
1456
- retryRequest.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${refreshed}`);
1457
- try {
1458
- return await next({ ...request, request: retryRequest });
1459
- } catch (retryError) {
1460
- if (isUnauthorized(retryError)) credential.notifyExpired();
1461
- throw retryError;
1462
- }
1463
- }
1464
- };
1317
+ //#endregion
1318
+ //#region src/keboola/bearer/middleware.ts
1319
+ /**
1320
+ * Bearer auth for every outgoing request:
1321
+ * - Stamps the current access token (from the credential) as the `Authorization` header.
1322
+ * - On a 401, force-refreshes the token and replays the request once.
1323
+ * - If the replay still 401s, the fresh token is rejected → marks the session expired.
1324
+ *
1325
+ * When the session is anonymous (`getAccessToken` → `null`) the request is passed through untouched
1326
+ * with no 401 dance — so pre-auth calls on the auth client (`login`, `refresh`) work and a failed
1327
+ * login is never mistaken for session expiry.
1328
+ *
1329
+ * Holds no token and never touches config — all token and refresh state lives in the credential.
1330
+ */
1331
+ const createBearerAuthMiddleware = (credential) => {
1332
+ return (next) => async (request) => {
1333
+ const token = await credential.getAccessToken({ forceRefresh: false });
1334
+ if (token === null) return next(request);
1335
+ const retryRequest = request.request.clone();
1336
+ request.request.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${token}`);
1337
+ try {
1338
+ return await next(request);
1339
+ } catch (error) {
1340
+ if (!isUnauthorized(error)) throw error;
1341
+ const refreshed = await credential.getAccessToken({ forceRefresh: true });
1342
+ if (refreshed === null) throw error;
1343
+ retryRequest.headers.set(HttpHeader.AUTHORIZATION, `Bearer ${refreshed}`);
1344
+ try {
1345
+ return await next({
1346
+ ...request,
1347
+ request: retryRequest
1348
+ });
1349
+ } catch (retryError) {
1350
+ if (isUnauthorized(retryError)) credential.notifyExpired();
1351
+ throw retryError;
1352
+ }
1353
+ }
1354
+ };
1465
1355
  };
1466
- var SESSION_KEY = "keboola:bearer-session";
1467
- var persistedSessionSchema = z2.object({
1468
- baseUrl: z2.string().nullable(),
1469
- projectId: z2.number().nullable(),
1470
- refreshToken: z2.string().nullable()
1356
+ //#endregion
1357
+ //#region src/keboola/bearer/persistor.ts
1358
+ const SESSION_KEY = "keboola:bearer-session";
1359
+ const persistedSessionSchema = z$1.object({
1360
+ baseUrl: z$1.string().nullable(),
1361
+ projectId: z$1.number().nullable(),
1362
+ refreshToken: z$1.string().nullable()
1471
1363
  });
1472
- var EMPTY_PERSISTED_SESSION = {
1473
- baseUrl: null,
1474
- projectId: null,
1475
- refreshToken: null
1364
+ const EMPTY_PERSISTED_SESSION = {
1365
+ baseUrl: null,
1366
+ projectId: null,
1367
+ refreshToken: null
1476
1368
  };
1477
- var createSessionPersistor = (storage) => createPersistor({
1478
- storage,
1479
- key: SESSION_KEY,
1480
- schema: persistedSessionSchema,
1481
- defaultValue: EMPTY_PERSISTED_SESSION
1369
+ const createSessionPersistor = (storage) => createPersistor({
1370
+ storage,
1371
+ key: SESSION_KEY,
1372
+ schema: persistedSessionSchema,
1373
+ defaultValue: EMPTY_PERSISTED_SESSION
1482
1374
  });
1483
-
1484
- // src/keboola/bearer/keboola.ts
1485
- var createKeboola = (options = {}) => {
1486
- const persistor = createSessionPersistor(options.storage);
1487
- const config = createConfig();
1488
- const middlewareFor = createMiddlewareFor(options.middlewares);
1489
- const retryContention = createRetryMiddleware({
1490
- shouldRetry: (error) => error instanceof ApiError && error.response.status === HttpStatus.SERVICE_UNAVAILABLE
1491
- });
1492
- const authClientBare = createDerivedStore({
1493
- source: config.store,
1494
- dependsOn: (state) => state.baseUrl,
1495
- build: (baseUrl) => baseUrl ? createAuthClient({ baseUrl, middlewares: middlewareFor("auth", [retryContention]) }) : null
1496
- });
1497
- const refresh = async () => {
1498
- const client = authClientBare.get();
1499
- assert2(client, KeboolaErrorType.NotReady);
1500
- const refreshed = await client.token.refresh(config.requireCredential().refreshToken);
1501
- config.applyRefresh(refreshed);
1502
- return refreshed.accessToken;
1503
- };
1504
- const getToken = () => {
1505
- const state = config.store.get();
1506
- if (state.status === "anonymous") return null;
1507
- const { accessToken, issuedAt, expiresIn } = state.credential;
1508
- return { accessToken, timing: { issuedAt, expiresIn } };
1509
- };
1510
- const signOut = () => {
1511
- config.reset();
1512
- persistor.clear();
1513
- };
1514
- const onSessionExpired = () => {
1515
- if (config.notifyExpired()) signOut();
1516
- };
1517
- const credential = createBearerCredential({ refresh, getToken, onSessionExpired });
1518
- const authMiddleware = createBearerAuthMiddleware(credential);
1519
- const authClient = createDerivedStore({
1520
- source: config.store,
1521
- dependsOn: (state) => state.baseUrl,
1522
- build: (baseUrl) => baseUrl ? createAuthClient({
1523
- baseUrl,
1524
- middlewares: middlewareFor("auth", [retryContention, authMiddleware])
1525
- }) : null
1526
- });
1527
- const management = createDerivedStore({
1528
- source: config.store,
1529
- dependsOn: (state) => state.status === "anonymous" ? null : state.baseUrl,
1530
- build: (baseUrl) => baseUrl ? createManagementClient({
1531
- baseUrl,
1532
- auth: { type: "bearer", token: "" },
1533
- middlewares: middlewareFor("management", [authMiddleware])
1534
- }) : null
1535
- });
1536
- const projectClientsAsync = createDerivedAsyncStore({
1537
- source: config.store,
1538
- // Keyed on baseUrl + projectId only — a rotation (new credential, same project) must not rebuild.
1539
- dependsOn: (state) => state.status === "scoped" ? { baseUrl: state.baseUrl, projectId: state.projectId } : null,
1540
- build: ({ baseUrl, projectId }) => {
1541
- return createProjectClients({
1542
- baseUrl,
1543
- authMiddleware,
1544
- projectId,
1545
- middlewareFor,
1546
- clientServiceUrls: options.clientServiceUrls
1547
- });
1548
- }
1549
- });
1550
- if (options.baseUrl) config.setBaseUrl(options.baseUrl);
1551
- config.store.subscribe((state) => {
1552
- if (state.status === "anonymous") return;
1553
- persistor.persist({
1554
- baseUrl: state.baseUrl,
1555
- projectId: state.status === "scoped" ? state.projectId : null,
1556
- refreshToken: state.credential.refreshToken
1557
- });
1558
- });
1559
- const debug = () => ({
1560
- type: "Bearer",
1561
- config: config.debug(),
1562
- authReady: authClient.get() !== null,
1563
- managementReady: management.get() !== null,
1564
- storage: projectClientsAsync.store.get().state
1565
- });
1566
- const session = {
1567
- hasPersistedValue: persistor.hasPersistedValue,
1568
- setBaseUrl: config.setBaseUrl,
1569
- isStorageReady: () => projectClientsAsync.store.get().state === "ready",
1570
- authenticate: (tokens) => config.authenticate(tokens),
1571
- setProject: config.setProjectId,
1572
- setProjectAsync: async (projectId) => {
1573
- config.setProjectId(projectId);
1574
- await projectClientsAsync.settled();
1575
- },
1576
- /**
1577
- * Leave the current project but stay signed in — the storage build returns to `idle`, so a
1578
- * consumer gating on it falls back to its project picker. The persisted session is rewritten with
1579
- * `projectId: null` by the subscription above, so a reload lands on the picker rather than
1580
- * re-entering the project. Use `reset` to sign out instead.
1581
- */
1582
- clearProject: config.clearProjectId,
1583
- reset: signOut,
1584
- /**
1585
- * Dev/test only: mark the current access token as expired so the bearer credential rotates it on
1586
- * the next request. Pair with any authenticated call (e.g. `api.storage.tokens.verify()`) to force
1587
- * the rotation immediately and observe the new credential.
1588
- */
1589
- debugForceRefresh: config.forceExpire,
1590
- restore: async () => {
1591
- const persisted = persistor.hydrate();
1592
- if (!persisted.refreshToken || !persisted.baseUrl) return { status: "empty" };
1593
- const configured = config.getBaseUrl();
1594
- if (configured && configured !== persisted.baseUrl) {
1595
- persistor.clear();
1596
- return { status: "empty" };
1597
- }
1598
- if (!configured) config.setBaseUrl(persisted.baseUrl);
1599
- const client = authClientBare.get();
1600
- assert2(client, KeboolaErrorType.NotReady);
1601
- try {
1602
- const refreshed = await client.token.refresh(persisted.refreshToken);
1603
- config.authenticate(refreshed);
1604
- if (persisted.projectId !== null) {
1605
- config.setProjectId(persisted.projectId);
1606
- await projectClientsAsync.settled();
1607
- }
1608
- return { status: "restored" };
1609
- } catch (err) {
1610
- if (isUnauthorized(err)) {
1611
- persistor.clear();
1612
- return { status: "expired" };
1613
- }
1614
- throw err;
1615
- }
1616
- },
1617
- subscribe: (listener) => {
1618
- const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
1619
- const unsubscribeBuild = projectClientsAsync.store.subscribe(() => listener(debug()));
1620
- return () => {
1621
- unsubscribeConfig();
1622
- unsubscribeBuild();
1623
- };
1624
- },
1625
- debug
1626
- };
1627
- const api = createApi({
1628
- getAuthClient: () => authClient.get(),
1629
- getManagementClient: () => management.get(),
1630
- getProjectClients: () => {
1631
- const state = projectClientsAsync.store.get();
1632
- return state.state === "ready" ? state.value : null;
1633
- }
1634
- });
1635
- return { api, session };
1375
+ //#endregion
1376
+ //#region src/keboola/bearer/keboola.ts
1377
+ const createKeboola = (options = {}) => {
1378
+ const persistor = createSessionPersistor(options.storage);
1379
+ const config = createConfig$1();
1380
+ const middlewareFor = createMiddlewareFor(options.middlewares);
1381
+ const retryContention = createRetryMiddleware({ shouldRetry: (error) => error instanceof ApiError && error.response.status === HttpStatus.SERVICE_UNAVAILABLE });
1382
+ const authClientBare = createDerivedStore({
1383
+ source: config.store,
1384
+ dependsOn: (state) => state.baseUrl,
1385
+ build: (baseUrl) => baseUrl ? createAuthClient({
1386
+ baseUrl,
1387
+ middlewares: middlewareFor("auth", [retryContention])
1388
+ }) : null
1389
+ });
1390
+ const refresh = async () => {
1391
+ const client = authClientBare.get();
1392
+ assert$1(client, KeboolaErrorType.NotReady);
1393
+ const refreshed = await client.token.refresh(config.requireCredential().refreshToken);
1394
+ config.applyRefresh(refreshed);
1395
+ return refreshed.accessToken;
1396
+ };
1397
+ const getToken = () => {
1398
+ const state = config.store.get();
1399
+ if (state.status === "anonymous") return null;
1400
+ const { accessToken, issuedAt, expiresIn } = state.credential;
1401
+ return {
1402
+ accessToken,
1403
+ timing: {
1404
+ issuedAt,
1405
+ expiresIn
1406
+ }
1407
+ };
1408
+ };
1409
+ const signOut = () => {
1410
+ config.reset();
1411
+ persistor.clear();
1412
+ };
1413
+ const onSessionExpired = () => {
1414
+ if (config.notifyExpired()) signOut();
1415
+ };
1416
+ const credential = createBearerCredential({
1417
+ refresh,
1418
+ getToken,
1419
+ onSessionExpired
1420
+ });
1421
+ const authMiddleware = createBearerAuthMiddleware(credential);
1422
+ const authClient = createDerivedStore({
1423
+ source: config.store,
1424
+ dependsOn: (state) => state.baseUrl,
1425
+ build: (baseUrl) => baseUrl ? createAuthClient({
1426
+ baseUrl,
1427
+ middlewares: middlewareFor("auth", [retryContention, authMiddleware])
1428
+ }) : null
1429
+ });
1430
+ const management = createDerivedStore({
1431
+ source: config.store,
1432
+ dependsOn: (state) => state.status === "anonymous" ? null : state.baseUrl,
1433
+ build: (baseUrl) => baseUrl ? createManagementClient({
1434
+ baseUrl,
1435
+ auth: {
1436
+ type: "bearer",
1437
+ token: ""
1438
+ },
1439
+ middlewares: middlewareFor("management", [authMiddleware])
1440
+ }) : null
1441
+ });
1442
+ const projectClientsAsync = createDerivedAsyncStore({
1443
+ source: config.store,
1444
+ dependsOn: (state) => state.status === "scoped" ? {
1445
+ baseUrl: state.baseUrl,
1446
+ projectId: state.projectId
1447
+ } : null,
1448
+ build: ({ baseUrl, projectId }) => {
1449
+ return createProjectClients$1({
1450
+ baseUrl,
1451
+ authMiddleware,
1452
+ projectId,
1453
+ middlewareFor,
1454
+ clientServiceUrls: options.clientServiceUrls
1455
+ });
1456
+ }
1457
+ });
1458
+ if (options.baseUrl) config.setBaseUrl(options.baseUrl);
1459
+ config.store.subscribe((state) => {
1460
+ if (state.status === "anonymous") return;
1461
+ persistor.persist({
1462
+ baseUrl: state.baseUrl,
1463
+ projectId: state.status === "scoped" ? state.projectId : null,
1464
+ refreshToken: state.credential.refreshToken
1465
+ });
1466
+ });
1467
+ const debug = () => ({
1468
+ type: "Bearer",
1469
+ config: config.debug(),
1470
+ authReady: authClient.get() !== null,
1471
+ managementReady: management.get() !== null,
1472
+ storage: projectClientsAsync.store.get().state
1473
+ });
1474
+ const session = {
1475
+ hasPersistedValue: persistor.hasPersistedValue,
1476
+ setBaseUrl: config.setBaseUrl,
1477
+ isStorageReady: () => projectClientsAsync.store.get().state === "ready",
1478
+ authenticate: (tokens) => config.authenticate(tokens),
1479
+ setProject: config.setProjectId,
1480
+ setProjectAsync: async (projectId) => {
1481
+ config.setProjectId(projectId);
1482
+ await projectClientsAsync.settled();
1483
+ },
1484
+ /**
1485
+ * Leave the current project but stay signed in — the storage build returns to `idle`, so a
1486
+ * consumer gating on it falls back to its project picker. The persisted session is rewritten with
1487
+ * `projectId: null` by the subscription above, so a reload lands on the picker rather than
1488
+ * re-entering the project. Use `reset` to sign out instead.
1489
+ */
1490
+ clearProject: config.clearProjectId,
1491
+ reset: signOut,
1492
+ /**
1493
+ * Dev/test only: mark the current access token as expired so the bearer credential rotates it on
1494
+ * the next request. Pair with any authenticated call (e.g. `api.storage.tokens.verify()`) to force
1495
+ * the rotation immediately and observe the new credential.
1496
+ */
1497
+ debugForceRefresh: config.forceExpire,
1498
+ restore: async () => {
1499
+ const persisted = persistor.hydrate();
1500
+ if (!persisted.refreshToken || !persisted.baseUrl) return { status: "empty" };
1501
+ const configured = config.getBaseUrl();
1502
+ if (configured && configured !== persisted.baseUrl) {
1503
+ persistor.clear();
1504
+ return { status: "empty" };
1505
+ }
1506
+ if (!configured) config.setBaseUrl(persisted.baseUrl);
1507
+ const client = authClientBare.get();
1508
+ assert$1(client, KeboolaErrorType.NotReady);
1509
+ try {
1510
+ const refreshed = await client.token.refresh(persisted.refreshToken);
1511
+ config.authenticate(refreshed);
1512
+ if (persisted.projectId !== null) {
1513
+ config.setProjectId(persisted.projectId);
1514
+ await projectClientsAsync.settled();
1515
+ }
1516
+ return { status: "restored" };
1517
+ } catch (err) {
1518
+ if (isUnauthorized(err)) {
1519
+ persistor.clear();
1520
+ return { status: "expired" };
1521
+ }
1522
+ throw err;
1523
+ }
1524
+ },
1525
+ subscribe: (listener) => {
1526
+ const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
1527
+ const unsubscribeBuild = projectClientsAsync.store.subscribe(() => listener(debug()));
1528
+ return () => {
1529
+ unsubscribeConfig();
1530
+ unsubscribeBuild();
1531
+ };
1532
+ },
1533
+ debug
1534
+ };
1535
+ return {
1536
+ api: createApi({
1537
+ getAuthClient: () => authClient.get(),
1538
+ getManagementClient: () => management.get(),
1539
+ getProjectClients: () => {
1540
+ const state = projectClientsAsync.store.get();
1541
+ return state.state === "ready" ? state.value : null;
1542
+ }
1543
+ }),
1544
+ session
1545
+ };
1636
1546
  };
1637
-
1638
- // src/keboola/legacy/createConfig.ts
1639
- var createConfig2 = () => {
1640
- const store = createStore({ baseUrl: null, sapiToken: null, managementToken: null });
1641
- const setBaseUrl = (baseUrl) => {
1642
- store.set({ ...store.get(), baseUrl });
1643
- };
1644
- const authenticate = (tokens) => {
1645
- const current = store.get();
1646
- store.set({
1647
- ...current,
1648
- sapiToken: tokens.sapiToken ?? current.sapiToken,
1649
- managementToken: tokens.managementToken ?? current.managementToken
1650
- });
1651
- };
1652
- const getStorageToken = () => store.get().sapiToken ?? "";
1653
- const setStorageToken = (sapiToken) => store.set({ ...store.get(), sapiToken });
1654
- const debug = () => store.get();
1655
- return { store, setBaseUrl, authenticate, getStorageToken, setStorageToken, debug };
1547
+ //#endregion
1548
+ //#region src/keboola/legacy/createConfig.ts
1549
+ const createConfig = () => {
1550
+ const store = createStore({
1551
+ baseUrl: null,
1552
+ sapiToken: null,
1553
+ managementToken: null
1554
+ });
1555
+ const setBaseUrl = (baseUrl) => {
1556
+ store.set({
1557
+ ...store.get(),
1558
+ baseUrl
1559
+ });
1560
+ };
1561
+ const authenticate = (tokens) => {
1562
+ const current = store.get();
1563
+ store.set({
1564
+ ...current,
1565
+ sapiToken: tokens.sapiToken ?? current.sapiToken,
1566
+ managementToken: tokens.managementToken ?? current.managementToken
1567
+ });
1568
+ };
1569
+ const getStorageToken = () => store.get().sapiToken ?? "";
1570
+ const setStorageToken = (sapiToken) => store.set({
1571
+ ...store.get(),
1572
+ sapiToken
1573
+ });
1574
+ /** Current state, for diagnostics. */
1575
+ const debug = () => store.get();
1576
+ return {
1577
+ store,
1578
+ setBaseUrl,
1579
+ authenticate,
1580
+ getStorageToken,
1581
+ setStorageToken,
1582
+ debug
1583
+ };
1656
1584
  };
1657
-
1658
- // src/keboola/legacy/createProjectClients.ts
1659
- var createAttachStorageToken = (getToken) => (next) => (request) => {
1660
- request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());
1661
- return next(request);
1585
+ //#endregion
1586
+ //#region src/keboola/legacy/createProjectClients.ts
1587
+ const createAttachStorageToken = (getToken) => (next) => (request) => {
1588
+ request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());
1589
+ return next(request);
1662
1590
  };
1663
- var createProjectClients2 = async ({
1664
- baseUrl,
1665
- getStorageToken,
1666
- onStorageTokenRefreshed,
1667
- middlewareFor,
1668
- clientServiceUrls
1669
- }) => {
1670
- const auth = { type: "sapi-token", token: getStorageToken() };
1671
- const attach = createAttachStorageToken(getStorageToken);
1672
- const _storage = createStorageClient({ baseUrl, auth, middlewares: [attach] });
1673
- const [stackInfo, sapiToken, devBranches] = await Promise.all([
1674
- _storage.getStackInfo({ exclude: "componentDetails" }),
1675
- _storage.tokens.verify(),
1676
- _storage.branches.getDevBranches()
1677
- ]);
1678
- const stack = createStack({ stackInfo, clientServiceUrls });
1679
- const defaultBranch = createDefaultBranch({ devBranches });
1680
- const liveProject = createLiveProject({
1681
- initialToken: sapiToken,
1682
- verify: () => _storage.tokens.verify()
1683
- });
1684
- const storageTableStore = createDerivedStore({
1685
- source: liveProject.store,
1686
- build: createStorageTable,
1687
- dependsOn: (project) => ({
1688
- useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),
1689
- hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),
1690
- hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches)
1691
- })
1692
- });
1693
- const context = {
1694
- baseUrl: normalizeBaseUrl(baseUrl),
1695
- stack,
1696
- defaultBranch,
1697
- get project() {
1698
- return liveProject.getProject();
1699
- },
1700
- get st() {
1701
- return storageTableStore.get();
1702
- }
1703
- };
1704
- const storage = createStorageClient({
1705
- baseUrl,
1706
- auth,
1707
- middlewares: middlewareFor("storage", [liveProject.middleware]),
1708
- onRefreshToken: onStorageTokenRefreshed
1709
- });
1710
- const { client: services, meta: serviceMeta } = createServiceClients({
1711
- baseUrl,
1712
- auth,
1713
- getServiceBaseUrl: context.stack.getServiceUrl,
1714
- middlewareFor,
1715
- attachTokenMiddleware: attach
1716
- });
1717
- const sdk = {
1718
- configuration: createConfigurationSdk({
1719
- storageClient: storage,
1720
- encryptionClient: services.encryption,
1721
- context
1722
- }),
1723
- tag: createTagSdk({ metastoreClient: services.metastore }),
1724
- semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),
1725
- storage: createStorageSdk({ storageClient: storage }),
1726
- vault: createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),
1727
- variables: createVariablesSdk({ storageClient: storage })
1728
- };
1729
- return { context, serviceMeta, storage, ...services, sdk };
1591
+ const createProjectClients = async ({ baseUrl, getStorageToken, onStorageTokenRefreshed, middlewareFor, clientServiceUrls }) => {
1592
+ const auth = {
1593
+ type: "sapi-token",
1594
+ token: getStorageToken()
1595
+ };
1596
+ const attach = createAttachStorageToken(getStorageToken);
1597
+ const _storage = createStorageClient({
1598
+ baseUrl,
1599
+ auth,
1600
+ middlewares: [attach]
1601
+ });
1602
+ const [stackInfo, sapiToken, devBranches] = await Promise.all([
1603
+ _storage.getStackInfo({ exclude: "componentDetails" }),
1604
+ _storage.tokens.verify(),
1605
+ _storage.branches.getDevBranches()
1606
+ ]);
1607
+ const stack = createStack({
1608
+ stackInfo,
1609
+ clientServiceUrls
1610
+ });
1611
+ const defaultBranch = createDefaultBranch({ devBranches });
1612
+ const liveProject = createLiveProject({
1613
+ initialToken: sapiToken,
1614
+ verify: () => _storage.tokens.verify()
1615
+ });
1616
+ const storageTableStore = createDerivedStore({
1617
+ source: liveProject.store,
1618
+ build: createStorageTable,
1619
+ dependsOn: (project) => ({
1620
+ useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),
1621
+ hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),
1622
+ hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches)
1623
+ })
1624
+ });
1625
+ const context = {
1626
+ baseUrl: normalizeBaseUrl(baseUrl),
1627
+ stack,
1628
+ defaultBranch,
1629
+ get project() {
1630
+ return liveProject.getProject();
1631
+ },
1632
+ get st() {
1633
+ return storageTableStore.get();
1634
+ }
1635
+ };
1636
+ const storage = createStorageClient({
1637
+ baseUrl,
1638
+ auth,
1639
+ middlewares: middlewareFor("storage", [liveProject.middleware]),
1640
+ onRefreshToken: onStorageTokenRefreshed
1641
+ });
1642
+ const { client: services, meta: serviceMeta } = createServiceClients({
1643
+ baseUrl,
1644
+ auth,
1645
+ getServiceBaseUrl: context.stack.getServiceUrl,
1646
+ middlewareFor,
1647
+ attachTokenMiddleware: attach
1648
+ });
1649
+ const sdk = {
1650
+ configuration: createConfigurationSdk({
1651
+ storageClient: storage,
1652
+ encryptionClient: services.encryption,
1653
+ context
1654
+ }),
1655
+ tag: createTagSdk({ metastoreClient: services.metastore }),
1656
+ semanticLayer: createSemanticLayerSdk({ metastoreClient: services.metastore }),
1657
+ storage: createStorageSdk({ storageClient: storage }),
1658
+ vault: createVaultSdk({
1659
+ vaultClient: services.vault,
1660
+ encryptionClient: services.encryption
1661
+ }),
1662
+ variables: createVariablesSdk({ storageClient: storage })
1663
+ };
1664
+ return {
1665
+ context,
1666
+ serviceMeta,
1667
+ storage,
1668
+ ...services,
1669
+ sdk
1670
+ };
1730
1671
  };
1731
-
1732
- // src/keboola/legacy/keboola.ts
1733
- var createLegacyKeboola = (options = {}) => {
1734
- const config = createConfig2();
1735
- const middlewareFor = createMiddlewareFor(options.middlewares);
1736
- const authClient = createDerivedStore({
1737
- source: config.store,
1738
- dependsOn: (state) => state.baseUrl,
1739
- build: (baseUrl) => baseUrl ? createAuthClient({ baseUrl, middlewares: middlewareFor("auth", []) }) : null
1740
- });
1741
- const management = createDerivedStore({
1742
- source: config.store,
1743
- dependsOn: (state) => ({ baseUrl: state.baseUrl, token: state.managementToken }),
1744
- build: ({ baseUrl, token }) => baseUrl ? createManagementClient({
1745
- baseUrl,
1746
- auth: token ? { type: "management-token", token } : { type: "management-token" },
1747
- middlewares: middlewareFor("management", [])
1748
- }) : null
1749
- });
1750
- const build = createDerivedAsyncStore({
1751
- source: config.store,
1752
- dependsOn: (state) => state.sapiToken && state.baseUrl ? state.baseUrl : null,
1753
- build: (baseUrl) => createProjectClients2({
1754
- baseUrl,
1755
- getStorageToken: config.getStorageToken,
1756
- onStorageTokenRefreshed: config.setStorageToken,
1757
- middlewareFor,
1758
- clientServiceUrls: options.clientServiceUrls
1759
- })
1760
- });
1761
- if (options.baseUrl) config.setBaseUrl(options.baseUrl);
1762
- const debug = () => {
1763
- const info = config.debug();
1764
- return {
1765
- type: "Sapi",
1766
- config: info,
1767
- authReady: authClient.get() !== null,
1768
- managementReady: !!info.managementToken,
1769
- storage: build.store.get().state
1770
- };
1771
- };
1772
- const session = {
1773
- setBaseUrl: config.setBaseUrl,
1774
- isStorageReady: () => build.store.get().state === "ready",
1775
- authenticateStorage: (sapiToken) => config.authenticate({ sapiToken }),
1776
- authenticateStorageAsync: async (sapiToken) => {
1777
- config.authenticate({ sapiToken });
1778
- await build.settled();
1779
- },
1780
- authenticateManagement: (managementToken) => config.authenticate({ managementToken }),
1781
- subscribe: (listener) => {
1782
- const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
1783
- const unsubscribeBuild = build.store.subscribe(() => listener(debug()));
1784
- return () => {
1785
- unsubscribeConfig();
1786
- unsubscribeBuild();
1787
- };
1788
- },
1789
- debug
1790
- };
1791
- const api = createApi({
1792
- getAuthClient: () => authClient.get(),
1793
- getManagementClient: () => management.get(),
1794
- getProjectClients: () => {
1795
- const state = build.store.get();
1796
- return state.state === "ready" ? state.value : null;
1797
- }
1798
- });
1799
- return { api, session };
1672
+ //#endregion
1673
+ //#region src/keboola/legacy/keboola.ts
1674
+ const createLegacyKeboola = (options = {}) => {
1675
+ const config = createConfig();
1676
+ const middlewareFor = createMiddlewareFor(options.middlewares);
1677
+ const authClient = createDerivedStore({
1678
+ source: config.store,
1679
+ dependsOn: (state) => state.baseUrl,
1680
+ build: (baseUrl) => baseUrl ? createAuthClient({
1681
+ baseUrl,
1682
+ middlewares: middlewareFor("auth", [])
1683
+ }) : null
1684
+ });
1685
+ const management = createDerivedStore({
1686
+ source: config.store,
1687
+ dependsOn: (state) => ({
1688
+ baseUrl: state.baseUrl,
1689
+ token: state.managementToken
1690
+ }),
1691
+ build: ({ baseUrl, token }) => baseUrl ? createManagementClient({
1692
+ baseUrl,
1693
+ auth: token ? {
1694
+ type: "management-token",
1695
+ token
1696
+ } : { type: "management-token" },
1697
+ middlewares: middlewareFor("management", [])
1698
+ }) : null
1699
+ });
1700
+ const build = createDerivedAsyncStore({
1701
+ source: config.store,
1702
+ dependsOn: (state) => state.sapiToken && state.baseUrl ? state.baseUrl : null,
1703
+ build: (baseUrl) => createProjectClients({
1704
+ baseUrl,
1705
+ getStorageToken: config.getStorageToken,
1706
+ onStorageTokenRefreshed: config.setStorageToken,
1707
+ middlewareFor,
1708
+ clientServiceUrls: options.clientServiceUrls
1709
+ })
1710
+ });
1711
+ if (options.baseUrl) config.setBaseUrl(options.baseUrl);
1712
+ const debug = () => {
1713
+ const info = config.debug();
1714
+ return {
1715
+ type: "Sapi",
1716
+ config: info,
1717
+ authReady: authClient.get() !== null,
1718
+ managementReady: !!info.managementToken,
1719
+ storage: build.store.get().state
1720
+ };
1721
+ };
1722
+ const session = {
1723
+ setBaseUrl: config.setBaseUrl,
1724
+ isStorageReady: () => build.store.get().state === "ready",
1725
+ authenticateStorage: (sapiToken) => config.authenticate({ sapiToken }),
1726
+ authenticateStorageAsync: async (sapiToken) => {
1727
+ config.authenticate({ sapiToken });
1728
+ await build.settled();
1729
+ },
1730
+ authenticateManagement: (managementToken) => config.authenticate({ managementToken }),
1731
+ subscribe: (listener) => {
1732
+ const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
1733
+ const unsubscribeBuild = build.store.subscribe(() => listener(debug()));
1734
+ return () => {
1735
+ unsubscribeConfig();
1736
+ unsubscribeBuild();
1737
+ };
1738
+ },
1739
+ debug
1740
+ };
1741
+ return {
1742
+ api: createApi({
1743
+ getAuthClient: () => authClient.get(),
1744
+ getManagementClient: () => management.get(),
1745
+ getProjectClients: () => {
1746
+ const state = build.store.get();
1747
+ return state.state === "ready" ? state.value : null;
1748
+ }
1749
+ }),
1750
+ session
1751
+ };
1800
1752
  };
1753
+ //#endregion
1754
+ export { ApiError, HttpContentType, HttpHeader, KeboolaError, KeboolaErrorType, KeboolaHttpHeader, ManagementClientAuthError, QueryJobError, QueryJobTimeoutError, Result, ServiceUnavailableError, SyncActionError, UserError, ValidationError, asError, assert, coalesce, collect, concurrent, createDerivedAsyncStore, createDerivedStore, createEmitter, createGenericFetchClient, createKeboola, createLegacyKeboola, createLocalStorage, createLoggingMiddleware, createMemoryStorage, createNullStorage, createPersistor, createPollRegistry, createQueryServiceSdk, createRetryMiddleware, createSessionStorage, createStorageSdk, createStore, dedupe, deepMerge, delay, emitter, failureOf, generateUUID, isAbortError, isApiError, isEmptyDeep, isFetchClientError, isKeboolaError, isManagementClientAuthError, isPlainObject, isQueryJobError, isQueryJobTimeoutError, isStorageTokenMutatingRequest, isSyncActionError, isValidationError, jobStatus, keboolaUID, lazy, parseLogLines, parseOrThrow, poll, poller, schemaGuidedMerge, series, shallowEqual };
1801
1755
 
1802
- export { KeboolaError, KeboolaErrorType, assert, coalesce, createDerivedAsyncStore, createDerivedStore, createKeboola, createLegacyKeboola, createLocalStorage, createLoggingMiddleware, createMemoryStorage, createNullStorage, createPersistor, createRetryMiddleware, createSessionStorage, createStore, deepMerge, isKeboolaError, isStorageTokenMutatingRequest, lazy, shallowEqual };
1803
- //# sourceMappingURL=index.js.map
1804
1756
  //# sourceMappingURL=index.js.map