@keboola/api-client 51.0.0 → 53.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 (450) hide show
  1. package/AGENTS.md +74 -9
  2. package/API-SURFACE.md +4 -10
  3. package/CHANGELOG.md +43 -0
  4. package/README.md +3 -3
  5. package/dist/{ManagementSessionMintError-DNMbYauw.js → ManagementSessionMintError-BMHDcEqV.js} +2 -2
  6. package/dist/{ManagementSessionMintError-DNMbYauw.js.map → ManagementSessionMintError-BMHDcEqV.js.map} +1 -1
  7. package/dist/{ManagementSessionMintError-ByOulHQH.cjs → ManagementSessionMintError-Bc9bc7Ai.cjs} +2 -2
  8. package/dist/{ManagementSessionMintError-ByOulHQH.cjs.map → ManagementSessionMintError-Bc9bc7Ai.cjs.map} +1 -1
  9. package/dist/RowLevelSecurityError-CObFqj3E.js +33 -0
  10. package/dist/RowLevelSecurityError-CObFqj3E.js.map +1 -0
  11. package/dist/RowLevelSecurityError-RK_NhhAx.cjs +56 -0
  12. package/dist/RowLevelSecurityError-RK_NhhAx.cjs.map +1 -0
  13. package/dist/{adminRoles-FFyl7Dyx.d.cts → adminRoles-BTKVwEy8.d.cts} +2 -2
  14. package/dist/{adminRoles-DAwl657q.d.ts → adminRoles-Cm513r1G.d.ts} +2 -2
  15. package/dist/ai/index.cjs +2 -2
  16. package/dist/ai/index.d.cts +2 -2
  17. package/dist/ai/index.d.ts +2 -2
  18. package/dist/ai/index.js +2 -2
  19. package/dist/ai/types.d.cts +1 -1
  20. package/dist/ai/types.d.ts +1 -1
  21. package/dist/apps/index.cjs +3 -234
  22. package/dist/apps/index.d.cts +3 -221
  23. package/dist/apps/index.d.ts +3 -221
  24. package/dist/apps/index.js +1 -234
  25. package/dist/apps/types.d.cts +1 -2
  26. package/dist/apps/types.d.ts +1 -2
  27. package/dist/apps-BN7fWtSm.js +361 -0
  28. package/dist/apps-BN7fWtSm.js.map +1 -0
  29. package/dist/apps-C1x5IKNQ.cjs +376 -0
  30. package/dist/apps-C1x5IKNQ.cjs.map +1 -0
  31. package/dist/assets/index.cjs +1 -1
  32. package/dist/assets/index.d.cts +1 -1
  33. package/dist/assets/index.d.ts +1 -1
  34. package/dist/assets/index.js +1 -1
  35. package/dist/auth/index.cjs +1 -1
  36. package/dist/auth/index.d.cts +1 -1
  37. package/dist/auth/index.d.ts +1 -1
  38. package/dist/auth/index.js +1 -1
  39. package/dist/auth/types.d.cts +1 -1
  40. package/dist/auth/types.d.ts +1 -1
  41. package/dist/{auth-CvB4MukT.cjs → auth-AehUDNRK.cjs} +2 -2
  42. package/dist/{auth-CvB4MukT.cjs.map → auth-AehUDNRK.cjs.map} +1 -1
  43. package/dist/{auth-DYfQMQCs.js → auth-ZBQWCJPM.js} +2 -2
  44. package/dist/{auth-DYfQMQCs.js.map → auth-ZBQWCJPM.js.map} +1 -1
  45. package/dist/{authClient-oB5ydxWp.js → authClient-BM4L8XEN.js} +5 -5
  46. package/dist/{authClient-oB5ydxWp.js.map → authClient-BM4L8XEN.js.map} +1 -1
  47. package/dist/{authClient-DcKBpMcU.cjs → authClient-DspK50e7.cjs} +5 -5
  48. package/dist/{authClient-DcKBpMcU.cjs.map → authClient-DspK50e7.cjs.map} +1 -1
  49. package/dist/{authClient-Df3U4q_6.d.cts → authClient-NBi0pqD5.d.cts} +4 -4
  50. package/dist/{authClient-JtMVJWXY.d.ts → authClient-ij_Rm2Yn.d.ts} +4 -4
  51. package/dist/billing/index.cjs +2 -2
  52. package/dist/billing/index.d.cts +1 -1
  53. package/dist/billing/index.d.ts +1 -1
  54. package/dist/billing/index.js +2 -2
  55. package/dist/billing/types.d.cts +1 -1
  56. package/dist/billing/types.d.ts +1 -1
  57. package/dist/chat/index.cjs +3 -3
  58. package/dist/chat/index.d.cts +2 -2
  59. package/dist/chat/index.d.ts +2 -2
  60. package/dist/chat/index.js +3 -3
  61. package/dist/chat/types.d.cts +1 -1
  62. package/dist/chat/types.d.ts +1 -1
  63. package/dist/{componentId-b_qBbJEM.js → componentId-DZP1rBix.js} +54 -2
  64. package/dist/componentId-DZP1rBix.js.map +1 -0
  65. package/dist/{componentId-C8ZTXXDo.cjs → componentId-olp0tltf.cjs} +54 -2
  66. package/dist/componentId-olp0tltf.cjs.map +1 -0
  67. package/dist/componentsMcp/index.cjs +1 -1
  68. package/dist/componentsMcp/index.d.cts +1 -1
  69. package/dist/componentsMcp/index.d.ts +1 -1
  70. package/dist/componentsMcp/index.js +1 -1
  71. package/dist/componentsMcp/types.d.cts +1 -1
  72. package/dist/componentsMcp/types.d.ts +1 -1
  73. package/dist/{componentsMcp-BrB4js6b.js → componentsMcp-CAmrCpzV.js} +3 -3
  74. package/dist/{componentsMcp-BrB4js6b.js.map → componentsMcp-CAmrCpzV.js.map} +1 -1
  75. package/dist/{componentsMcp-BaHy5iLr.cjs → componentsMcp-DXu-0Qt-.cjs} +3 -3
  76. package/dist/{componentsMcp-BaHy5iLr.cjs.map → componentsMcp-DXu-0Qt-.cjs.map} +1 -1
  77. package/dist/constants/index.cjs +4 -3
  78. package/dist/constants/index.d.cts +3 -3
  79. package/dist/constants/index.d.ts +3 -3
  80. package/dist/constants/index.js +3 -2
  81. package/dist/{constants-BMSHGwOR.js → constants-DLPkpnGv.js} +5 -32
  82. package/dist/constants-DLPkpnGv.js.map +1 -0
  83. package/dist/{constants-DhFQWQgy.cjs → constants-Day8CU5i.cjs} +4 -37
  84. package/dist/constants-Day8CU5i.cjs.map +1 -0
  85. package/dist/{createFetchClient-DEkUH662.cjs → createFetchClient-CDKSkd7i.cjs} +19 -1
  86. package/dist/{createFetchClient-DlGCbltR.js.map → createFetchClient-CDKSkd7i.cjs.map} +1 -1
  87. package/dist/{createFetchClient-DlGCbltR.js → createFetchClient-Dc_ZMuq7.js} +8 -2
  88. package/dist/createFetchClient-Dc_ZMuq7.js.map +1 -0
  89. package/dist/{createGenericFetchClient-wGxemBwR.js → createGenericFetchClient-Ba4E4T-Y.js} +2 -2
  90. package/dist/{createGenericFetchClient-wGxemBwR.js.map → createGenericFetchClient-Ba4E4T-Y.js.map} +1 -1
  91. package/dist/{createGenericFetchClient-2oU-PXVo.cjs → createGenericFetchClient-BuYzzV_D.cjs} +2 -2
  92. package/dist/{createGenericFetchClient-2oU-PXVo.cjs.map → createGenericFetchClient-BuYzzV_D.cjs.map} +1 -1
  93. package/dist/{createOpenapiFetchClient-Bhz62MUE.js → createOpenapiFetchClient-DSk29o_s.js} +2 -2
  94. package/dist/{createOpenapiFetchClient-Bhz62MUE.js.map → createOpenapiFetchClient-DSk29o_s.js.map} +1 -1
  95. package/dist/{createOpenapiFetchClient-DL9w7vU-.cjs → createOpenapiFetchClient-dkssExkU.cjs} +2 -2
  96. package/dist/{createOpenapiFetchClient-DL9w7vU-.cjs.map → createOpenapiFetchClient-dkssExkU.cjs.map} +1 -1
  97. package/dist/dataScience/index.cjs +60 -4
  98. package/dist/dataScience/index.cjs.map +1 -0
  99. package/dist/dataScience/index.d.cts +105 -3
  100. package/dist/dataScience/index.d.ts +105 -3
  101. package/dist/dataScience/index.js +60 -3
  102. package/dist/dataScience/index.js.map +1 -0
  103. package/dist/dataScience/types.d.cts +2 -3
  104. package/dist/dataScience/types.d.ts +2 -3
  105. package/dist/developerPortal/index.cjs +1 -1
  106. package/dist/developerPortal/index.d.cts +2 -2
  107. package/dist/developerPortal/index.d.ts +2 -2
  108. package/dist/developerPortal/index.js +1 -1
  109. package/dist/developerPortal/types.d.cts +1 -1
  110. package/dist/developerPortal/types.d.ts +1 -1
  111. package/dist/{developerPortalClient-BfRxYrWj.cjs → developerPortalClient-BcK9F-Fs.cjs} +3 -3
  112. package/dist/{developerPortalClient-BfRxYrWj.cjs.map → developerPortalClient-BcK9F-Fs.cjs.map} +1 -1
  113. package/dist/{developerPortalClient-D9XOYwWF.js → developerPortalClient-CzCJ5sE3.js} +3 -3
  114. package/dist/{developerPortalClient-D9XOYwWF.js.map → developerPortalClient-CzCJ5sE3.js.map} +1 -1
  115. package/dist/domain/permissions/index.d.cts +1 -1
  116. package/dist/domain/permissions/index.d.ts +1 -1
  117. package/dist/editor/index.cjs +2 -2
  118. package/dist/editor/index.d.cts +2 -2
  119. package/dist/editor/index.d.ts +2 -2
  120. package/dist/editor/index.js +2 -2
  121. package/dist/editor/types.d.cts +1 -1
  122. package/dist/editor/types.d.ts +1 -1
  123. package/dist/encryption/index.cjs +1 -1
  124. package/dist/encryption/index.d.cts +1 -1
  125. package/dist/encryption/index.d.ts +1 -1
  126. package/dist/encryption/index.js +1 -1
  127. package/dist/encryption/types.d.cts +1 -1
  128. package/dist/encryption/types.d.ts +1 -1
  129. package/dist/import/index.cjs +1 -1
  130. package/dist/import/index.d.cts +3 -3
  131. package/dist/import/index.d.ts +3 -3
  132. package/dist/import/index.js +1 -1
  133. package/dist/{import-CABlFMQX.cjs → import-DHq6q3Fm.cjs} +3 -3
  134. package/dist/{import-CABlFMQX.cjs.map → import-DHq6q3Fm.cjs.map} +1 -1
  135. package/dist/{import-CT1Ce5Rp.js → import-DxN6CJzJ.js} +3 -3
  136. package/dist/{import-CT1Ce5Rp.js.map → import-DxN6CJzJ.js.map} +1 -1
  137. package/dist/{index-xX8-Stoq.d.cts → index-8QhOqFLY.d.cts} +4 -4
  138. package/dist/{index-DIPMzH--.d.ts → index-B0prazAi.d.cts} +13 -4
  139. package/dist/index-B8K-Bbdq.d.cts +220 -0
  140. package/dist/{index-DQagqTVa.d.cts → index-BGE3eZfd.d.cts} +3 -3
  141. package/dist/{index-C1ndNdrN.d.cts → index-BL7uXOiY.d.cts} +3 -3
  142. package/dist/{index-DjSthn8d.d.ts → index-BNwo-zaJ.d.cts} +56 -2
  143. package/dist/{index-qJ2IjXIM.d.cts → index-BUKMdbKh.d.cts} +76 -151
  144. package/dist/{index-DVBQgFg0.d.ts → index-BVe4S2CK.d.ts} +4 -4
  145. package/dist/{index-CbSh3KFw.d.cts → index-BXgjPlZN.d.cts} +4 -4
  146. package/dist/{index-BfAcp7O2.d.ts → index-BoKrc8wy.d.ts} +3 -3
  147. package/dist/{index-BsT_cBJd.d.ts → index-BxgHNJ3Q.d.ts} +76 -151
  148. package/dist/{index-lTrNMlj6.d.ts → index-CEDjFidH.d.ts} +3 -3
  149. package/dist/{index-DgGpQsAT.d.cts → index-CNJBmCHM.d.cts} +4 -4
  150. package/dist/index-CQNwp6wX.d.ts +220 -0
  151. package/dist/{index-CuI8OI9E.d.ts → index-CZvBjQvl.d.ts} +4 -4
  152. package/dist/{index-Day1Yr5s.d.ts → index-CdeWTy8t.d.ts} +4 -4
  153. package/dist/{index-AA3MRfRn.d.cts → index-CwUurckF.d.ts} +56 -2
  154. package/dist/{index-Db266tLz.d.cts → index-D0Gnp2QM.d.ts} +13 -4
  155. package/dist/{index-m9-mN8Gg.d.ts → index-DLWMm1-T.d.ts} +4 -4
  156. package/dist/{index-BDPxm9qu.d.ts → index-DTGOEke4.d.ts} +3 -3
  157. package/dist/{index-D1mduJne.d.cts → index-FrsEkDvX.d.cts} +7 -2
  158. package/dist/{index-D1mduJne.d.ts → index-FrsEkDvX.d.ts} +7 -2
  159. package/dist/{index-xhzuWloV.d.cts → index-d9zxFmNI.d.cts} +4 -4
  160. package/dist/{index-z-2okomN.d.cts → index-iFCann29.d.cts} +3 -3
  161. package/dist/index.cjs +47 -40
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +7 -7
  164. package/dist/index.d.ts +7 -7
  165. package/dist/index.js +39 -34
  166. package/dist/index.js.map +1 -1
  167. package/dist/{isLoginPageRedirect-CoUxJi2x.cjs → isLoginPageRedirect-DUmsOC2o.cjs} +2 -2
  168. package/dist/{isLoginPageRedirect-CoUxJi2x.cjs.map → isLoginPageRedirect-DUmsOC2o.cjs.map} +1 -1
  169. package/dist/{isLoginPageRedirect-D-lqF_kZ.js → isLoginPageRedirect-lbeVmeB2.js} +2 -2
  170. package/dist/{isLoginPageRedirect-D-lqF_kZ.js.map → isLoginPageRedirect-lbeVmeB2.js.map} +1 -1
  171. package/dist/kaiAgent/index.cjs +1 -1
  172. package/dist/kaiAgent/index.d.cts +2 -2
  173. package/dist/kaiAgent/index.d.ts +2 -2
  174. package/dist/kaiAgent/index.js +1 -1
  175. package/dist/kaiAgent/types.d.cts +1 -1
  176. package/dist/kaiAgent/types.d.ts +1 -1
  177. package/dist/{kaiAgent-CYU1Uda8.js → kaiAgent-D0MoKqXe.js} +5 -5
  178. package/dist/{kaiAgent-CYU1Uda8.js.map → kaiAgent-D0MoKqXe.js.map} +1 -1
  179. package/dist/{kaiAgent-CDhg0MAw.cjs → kaiAgent-De2T6G4G.cjs} +5 -5
  180. package/dist/{kaiAgent-CDhg0MAw.cjs.map → kaiAgent-De2T6G4G.cjs.map} +1 -1
  181. package/dist/{kaiMemory-oir_qCo_.js → kaiMemory-B1wIwH8Y.js} +2 -2
  182. package/dist/{kaiMemory-oir_qCo_.js.map → kaiMemory-B1wIwH8Y.js.map} +1 -1
  183. package/dist/{kaiMemory-CkLQfJXD.cjs → kaiMemory-DZ6hXni_.cjs} +2 -2
  184. package/dist/{kaiMemory-CkLQfJXD.cjs.map → kaiMemory-DZ6hXni_.cjs.map} +1 -1
  185. package/dist/management/index.cjs +1 -1
  186. package/dist/management/index.d.cts +1 -1
  187. package/dist/management/index.d.ts +1 -1
  188. package/dist/management/index.js +1 -1
  189. package/dist/management/types.d.cts +2 -2
  190. package/dist/management/types.d.ts +2 -2
  191. package/dist/{management-BcGHyxAP.js → management-CmgsWmf0.js} +20 -6
  192. package/dist/management-CmgsWmf0.js.map +1 -0
  193. package/dist/{management-BEGOEQxM.cjs → management-Drs5G-hf.cjs} +20 -6
  194. package/dist/management-Drs5G-hf.cjs.map +1 -0
  195. package/dist/metastore/index.cjs +1 -1
  196. package/dist/metastore/index.d.cts +1 -1
  197. package/dist/metastore/index.d.ts +1 -1
  198. package/dist/metastore/index.js +1 -1
  199. package/dist/metastore/types.d.cts +1 -1
  200. package/dist/metastore/types.d.ts +1 -1
  201. package/dist/{metastore-DeRQ2VIv.cjs → metastore-CV4DUDxP.cjs} +4 -4
  202. package/dist/{metastore-DeRQ2VIv.cjs.map → metastore-CV4DUDxP.cjs.map} +1 -1
  203. package/dist/{metastore-CGsgxjng.js → metastore-CkqFnEfu.js} +4 -4
  204. package/dist/{metastore-CGsgxjng.js.map → metastore-CkqFnEfu.js.map} +1 -1
  205. package/dist/microsoftGraph/index.cjs +2 -2
  206. package/dist/microsoftGraph/index.d.cts +2 -2
  207. package/dist/microsoftGraph/index.d.ts +2 -2
  208. package/dist/microsoftGraph/index.js +2 -2
  209. package/dist/microsoftGraph/types.d.cts +1 -1
  210. package/dist/microsoftGraph/types.d.ts +1 -1
  211. package/dist/{middleware-8zaJWcyU.js → middleware-DxGv7DG8.js} +2 -2
  212. package/dist/{middleware-8zaJWcyU.js.map → middleware-DxGv7DG8.js.map} +1 -1
  213. package/dist/{middleware-B9RNuLfD.cjs → middleware-vIaPDtQI.cjs} +2 -2
  214. package/dist/{middleware-B9RNuLfD.cjs.map → middleware-vIaPDtQI.cjs.map} +1 -1
  215. package/dist/notifications/index.cjs +3 -3
  216. package/dist/notifications/index.d.cts +2 -2
  217. package/dist/notifications/index.d.ts +2 -2
  218. package/dist/notifications/index.js +3 -3
  219. package/dist/notifications/types.d.cts +1 -1
  220. package/dist/notifications/types.d.ts +1 -1
  221. package/dist/oauth/index.cjs +1 -1
  222. package/dist/oauth/index.d.cts +2 -2
  223. package/dist/oauth/index.d.ts +2 -2
  224. package/dist/oauth/index.js +1 -1
  225. package/dist/oauth/types.d.cts +1 -1
  226. package/dist/oauth/types.d.ts +1 -1
  227. package/dist/{oauth-B5Biqz21.cjs → oauth-CSBChWuf.cjs} +5 -5
  228. package/dist/{oauth-B5Biqz21.cjs.map → oauth-CSBChWuf.cjs.map} +1 -1
  229. package/dist/{oauth-ByCdISsV.js → oauth-DOveZKUv.js} +5 -5
  230. package/dist/{oauth-ByCdISsV.js.map → oauth-DOveZKUv.js.map} +1 -1
  231. package/dist/omnisearch/index.cjs +2 -2
  232. package/dist/omnisearch/index.d.cts +2 -2
  233. package/dist/omnisearch/index.d.ts +2 -2
  234. package/dist/omnisearch/index.js +2 -2
  235. package/dist/omnisearch/types.d.cts +1 -1
  236. package/dist/omnisearch/types.d.ts +1 -1
  237. package/dist/{project-UHZGFmmG.d.cts → project-BGk9CtOq.d.cts} +3 -3
  238. package/dist/{project-iBm4cIIR.d.ts → project-DS0HOV3M.d.ts} +3 -3
  239. package/dist/queryService/index.cjs +1 -1
  240. package/dist/queryService/index.d.cts +2 -2
  241. package/dist/queryService/index.d.ts +2 -2
  242. package/dist/queryService/index.js +1 -1
  243. package/dist/queryService/types.d.cts +1 -1
  244. package/dist/queryService/types.d.ts +1 -1
  245. package/dist/queryService-C3BQ6GKW.cjs +214 -0
  246. package/dist/queryService-C3BQ6GKW.cjs.map +1 -0
  247. package/dist/queryService-DQHtHy2-.js +209 -0
  248. package/dist/queryService-DQHtHy2-.js.map +1 -0
  249. package/dist/queue/index.cjs +1 -1
  250. package/dist/queue/index.d.cts +3 -3
  251. package/dist/queue/index.d.ts +3 -3
  252. package/dist/queue/index.js +1 -1
  253. package/dist/queue/types.d.cts +1 -1
  254. package/dist/queue/types.d.ts +1 -1
  255. package/dist/{queue-BiIs9fX4.js → queue-6cywDnA-.js} +5 -5
  256. package/dist/{queue-BiIs9fX4.js.map → queue-6cywDnA-.js.map} +1 -1
  257. package/dist/{queue-CBi9Q8vp.cjs → queue-J2uXzXR9.cjs} +5 -5
  258. package/dist/{queue-CBi9Q8vp.cjs.map → queue-J2uXzXR9.cjs.map} +1 -1
  259. package/dist/readJwtClaims-CMZ3cNC_.js +28 -0
  260. package/dist/readJwtClaims-CMZ3cNC_.js.map +1 -0
  261. package/dist/readJwtClaims-SVJgo04x.cjs +33 -0
  262. package/dist/readJwtClaims-SVJgo04x.cjs.map +1 -0
  263. package/dist/scheduler/index.cjs +3 -3
  264. package/dist/scheduler/index.d.cts +2 -2
  265. package/dist/scheduler/index.d.ts +2 -2
  266. package/dist/scheduler/index.js +3 -3
  267. package/dist/scheduler/types.d.cts +1 -1
  268. package/dist/scheduler/types.d.ts +1 -1
  269. package/dist/sdk/configurations/index.cjs +3 -3
  270. package/dist/sdk/configurations/index.cjs.map +1 -1
  271. package/dist/sdk/configurations/index.d.cts +4 -4
  272. package/dist/sdk/configurations/index.d.ts +4 -4
  273. package/dist/sdk/configurations/index.js +3 -3
  274. package/dist/sdk/configurations/index.js.map +1 -1
  275. package/dist/sdk/dataAppServer/index.cjs +266 -0
  276. package/dist/sdk/dataAppServer/index.cjs.map +1 -0
  277. package/dist/sdk/dataAppServer/index.d.cts +55 -0
  278. package/dist/sdk/dataAppServer/index.d.ts +55 -0
  279. package/dist/sdk/dataAppServer/index.js +264 -0
  280. package/dist/sdk/dataAppServer/index.js.map +1 -0
  281. package/dist/sdk/developerPortal/index.cjs +6 -18
  282. package/dist/sdk/developerPortal/index.cjs.map +1 -1
  283. package/dist/sdk/developerPortal/index.d.cts +3 -3
  284. package/dist/sdk/developerPortal/index.d.ts +3 -3
  285. package/dist/sdk/developerPortal/index.js +6 -18
  286. package/dist/sdk/developerPortal/index.js.map +1 -1
  287. package/dist/sdk/kaiMemory/index.cjs +1 -1
  288. package/dist/sdk/kaiMemory/index.d.cts +1 -1
  289. package/dist/sdk/kaiMemory/index.d.ts +1 -1
  290. package/dist/sdk/kaiMemory/index.js +1 -1
  291. package/dist/sdk/kaiMemory/types.d.cts +1 -1
  292. package/dist/sdk/kaiMemory/types.d.ts +1 -1
  293. package/dist/sdk/queryService/index.d.cts +1 -1
  294. package/dist/sdk/queryService/index.d.ts +1 -1
  295. package/dist/sdk/semanticLayer/index.cjs +1 -1
  296. package/dist/sdk/semanticLayer/index.d.cts +6 -1
  297. package/dist/sdk/semanticLayer/index.d.ts +6 -1
  298. package/dist/sdk/semanticLayer/index.js +1 -1
  299. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  300. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  301. package/dist/sdk/tag/index.d.cts +2 -2
  302. package/dist/sdk/tag/index.d.ts +2 -2
  303. package/dist/sdk/tag/types.d.cts +1 -1
  304. package/dist/sdk/tag/types.d.ts +1 -1
  305. package/dist/sdk/vault/index.d.cts +1 -1
  306. package/dist/sdk/vault/index.d.ts +1 -1
  307. package/dist/{semanticLayer-BdPW_wLo.js → semanticLayer-CfjDnmsY.js} +16 -1
  308. package/dist/semanticLayer-CfjDnmsY.js.map +1 -0
  309. package/dist/{semanticLayer-djom-J78.cjs → semanticLayer-D8D_3hk-.cjs} +16 -1
  310. package/dist/semanticLayer-D8D_3hk-.cjs.map +1 -0
  311. package/dist/serviceIds-Bg1pWiPE.cjs +37 -0
  312. package/dist/serviceIds-Bg1pWiPE.cjs.map +1 -0
  313. package/dist/serviceIds-RAVtP4nK.js +32 -0
  314. package/dist/serviceIds-RAVtP4nK.js.map +1 -0
  315. package/dist/status/index.cjs +1 -1
  316. package/dist/status/index.d.cts +1 -1
  317. package/dist/status/index.d.ts +1 -1
  318. package/dist/status/index.js +1 -1
  319. package/dist/storage/index.cjs +9 -7
  320. package/dist/storage/index.d.cts +4 -4
  321. package/dist/storage/index.d.ts +4 -4
  322. package/dist/storage/index.js +6 -6
  323. package/dist/storage/types.d.cts +5 -5
  324. package/dist/storage/types.d.ts +5 -5
  325. package/dist/{storage-BpOLWT6h.js → storage--2FvvLAw.js} +7 -7
  326. package/dist/{storage-BpOLWT6h.js.map → storage--2FvvLAw.js.map} +1 -1
  327. package/dist/{storage-KJ5Ki_ma.cjs → storage-BMrYlyLB.cjs} +7 -7
  328. package/dist/{storage-KJ5Ki_ma.cjs.map → storage-BMrYlyLB.cjs.map} +1 -1
  329. package/dist/stream/index.cjs +3 -3
  330. package/dist/stream/index.d.cts +2 -2
  331. package/dist/stream/index.d.ts +2 -2
  332. package/dist/stream/index.js +3 -3
  333. package/dist/stream/types.d.cts +1 -1
  334. package/dist/stream/types.d.ts +1 -1
  335. package/dist/syncActions/index.cjs +1 -1
  336. package/dist/syncActions/index.d.cts +2 -2
  337. package/dist/syncActions/index.d.ts +2 -2
  338. package/dist/syncActions/index.js +1 -1
  339. package/dist/syncActions/types.d.cts +1 -1
  340. package/dist/syncActions/types.d.ts +1 -1
  341. package/dist/{syncActions-BcX3jm2E.cjs → syncActions-DToUhyP3.cjs} +6 -6
  342. package/dist/{syncActions-BcX3jm2E.cjs.map → syncActions-DToUhyP3.cjs.map} +1 -1
  343. package/dist/{syncActions-giPLTfje.js → syncActions-DV_aObTQ.js} +6 -6
  344. package/dist/{syncActions-giPLTfje.js.map → syncActions-DV_aObTQ.js.map} +1 -1
  345. package/dist/telemetry/index.cjs +3 -3
  346. package/dist/telemetry/index.d.cts +2 -2
  347. package/dist/telemetry/index.d.ts +2 -2
  348. package/dist/telemetry/index.js +3 -3
  349. package/dist/telemetry/types.d.cts +1 -1
  350. package/dist/telemetry/types.d.ts +1 -1
  351. package/dist/{transientRetries-BKqmb85B.js → transientRetries-BORv47mH.js} +2 -2
  352. package/dist/{transientRetries-BKqmb85B.js.map → transientRetries-BORv47mH.js.map} +1 -1
  353. package/dist/{transientRetries-CM7rAEXQ.cjs → transientRetries-CBorl4Ue.cjs} +2 -2
  354. package/dist/{transientRetries-CM7rAEXQ.cjs.map → transientRetries-CBorl4Ue.cjs.map} +1 -1
  355. package/dist/{types-BWMOK6eL.d.cts → types-B4Vwz45w.d.cts} +2 -2
  356. package/dist/{types-Dryq2GGE.d.cts → types-B4ezB18r.d.cts} +2 -2
  357. package/dist/{types-Bdl7EFMc.d.ts → types-B6JcEPEu.d.ts} +2 -2
  358. package/dist/{types-eFi8xJIM.d.cts → types-B6f6LpZ_.d.cts} +2 -2
  359. package/dist/{types-C9okze_R.d.ts → types-BD0B1KQ6.d.ts} +3 -26
  360. package/dist/{types-DeyXJzWz.d.cts → types-BEw98Dd2.d.cts} +2 -2
  361. package/dist/{types-1IBnjBVJ.d.cts → types-BVJmcoqA.d.cts} +2 -2
  362. package/dist/{types-B1qe1etN.d.cts → types-BljDxuWG.d.cts} +3 -3
  363. package/dist/{types-BiDdBXSm.d.ts → types-Bp8G9yta.d.ts} +2 -2
  364. package/dist/{types-PZzNANiS.d.cts → types-Bv2Ds1hL.d.cts} +2 -2
  365. package/dist/{types-D-tJt0hQ.d.cts → types-BynQKst1.d.cts} +2 -2
  366. package/dist/{types-BuclMPeY.d.cts → types-C5B3Pfob.d.cts} +2 -2
  367. package/dist/{types-DNgazFnF.d.cts → types-CIlBSV99.d.cts} +2 -2
  368. package/dist/{types-DschSZHf.d.cts → types-CKdNf_2k.d.cts} +3 -3
  369. package/dist/{types-Du5o-tud.d.ts → types-CQYyULrw.d.ts} +2 -2
  370. package/dist/{types-BrEVh0WE.d.cts → types-CRC4lbPw.d.cts} +8 -4
  371. package/dist/{types-CxEJ77m3.d.cts → types-CSE8bHiq.d.cts} +3 -3
  372. package/dist/{types-DRCttnIN.d.ts → types-CTYTMXXj.d.ts} +2 -2
  373. package/dist/{types-6T04_qUf.d.ts → types-CepTvkfm.d.ts} +2 -2
  374. package/dist/{types-DHMxPJZq.d.cts → types-Cf0WE6qK.d.cts} +2 -2
  375. package/dist/{types-DwbTiyhZ.d.cts → types-ChOJ-Az7.d.cts} +2 -2
  376. package/dist/{types-wYrC2boT.d.ts → types-Cr6WA6CN.d.ts} +2 -2
  377. package/dist/{types-B0e-no6u.d.ts → types-CsRfoHQw.d.cts} +192 -3
  378. package/dist/{types-D6lre27s.d.ts → types-CsVRsObb.d.ts} +2 -2
  379. package/dist/{types-CcGp6O3B.d.cts → types-D-ufoskb.d.cts} +2 -2
  380. package/dist/{types-LconaX98.d.cts → types-D2hhEGem.d.cts} +2 -2
  381. package/dist/{types-inG9y3dP.d.ts → types-D5bxXqEU.d.ts} +2 -2
  382. package/dist/{types-BE8abIig.d.cts → types-DKKHKj19.d.cts} +2 -2
  383. package/dist/{types-CPWjRdnj.d.cts → types-DNldEa7i.d.ts} +192 -3
  384. package/dist/{types-E8tzafsk.d.cts → types-DNwIMEuB.d.cts} +3 -26
  385. package/dist/{types-DtOfhDzz.d.ts → types-DSWIIMdv.d.ts} +3 -3
  386. package/dist/{types-Bat0SIZA.d.cts → types-DU8aPTFW.d.cts} +2 -2
  387. package/dist/{types-B8k1DqlU.d.ts → types-DX1Dz0xK.d.ts} +2 -2
  388. package/dist/{types-ZZwdKCBl.d.ts → types-DbthI3r-.d.ts} +2 -2
  389. package/dist/{types-B3ri-iiC.d.ts → types-DjSjUKUl.d.ts} +2 -2
  390. package/dist/{types-YpOm4yXE.d.cts → types-DjWubjvP.d.cts} +2 -2
  391. package/dist/{types-CRubbBcU.d.cts → types-Do3__S4Q.d.cts} +2 -2
  392. package/dist/{types-DKSUG2dZ.d.ts → types-DoSZQ1Bi.d.ts} +8 -4
  393. package/dist/{types-CWcdaq-K.d.ts → types-Dsf7CYmm.d.ts} +2 -2
  394. package/dist/{types--Rp5wvaz.d.ts → types-OHt0D_f2.d.ts} +2 -2
  395. package/dist/{types-Cr5lyI99.d.ts → types-Rrcx-8LM.d.ts} +2 -2
  396. package/dist/{types-DUpVIuk7.d.ts → types-Tg3euEN_.d.ts} +2 -2
  397. package/dist/{types-37vwxse4.d.cts → types-Y4e8GGa3.d.cts} +2 -2
  398. package/dist/{types-DJzTVMu1.d.ts → types-d5Bt8Mr3.d.ts} +2 -2
  399. package/dist/{types-jjOulnni.d.ts → types-dU3EA8gk.d.ts} +2 -2
  400. package/dist/{types-ir7T2a9a.d.ts → types-iU1Sc1IM.d.ts} +3 -3
  401. package/dist/{types-zPY-XGnM.d.ts → types-kGZQQcIK.d.ts} +2 -2
  402. package/dist/{types-xzt_2H63.d.ts → types-zlYUn0oi.d.ts} +3 -3
  403. package/dist/{validateConnectionStatus-DYwWeWVo.js → validateConnectionStatus-DV00sDmu.js} +3 -3
  404. package/dist/{validateConnectionStatus-DYwWeWVo.js.map → validateConnectionStatus-DV00sDmu.js.map} +1 -1
  405. package/dist/{validateConnectionStatus-BjemGI1e.cjs → validateConnectionStatus-ckaHcRx8.cjs} +3 -3
  406. package/dist/{validateConnectionStatus-BjemGI1e.cjs.map → validateConnectionStatus-ckaHcRx8.cjs.map} +1 -1
  407. package/dist/vault/index.cjs +4 -4
  408. package/dist/vault/index.d.cts +1 -1
  409. package/dist/vault/index.d.ts +1 -1
  410. package/dist/vault/index.js +4 -4
  411. package/dist/vault/types.d.cts +1 -1
  412. package/dist/vault/types.d.ts +1 -1
  413. package/package.json +15 -2
  414. package/surface/apps.md +3 -3
  415. package/surface/dataScience.md +2 -11
  416. package/surface/editor.md +5 -5
  417. package/surface/management.md +1 -0
  418. package/surface/queue.md +1 -1
  419. package/surface/sdk.md +2 -0
  420. package/dist/QueryJobError-Iq9O90Uh.js +0 -21
  421. package/dist/QueryJobError-Iq9O90Uh.js.map +0 -1
  422. package/dist/QueryJobError-Oy0fl4aw.cjs +0 -32
  423. package/dist/QueryJobError-Oy0fl4aw.cjs.map +0 -1
  424. package/dist/appLogs-CTvZAihm.d.ts +0 -8
  425. package/dist/appLogs-CnLNMH7M.d.cts +0 -8
  426. package/dist/appLogs-CoAWQGxs.cjs +0 -152
  427. package/dist/appLogs-CoAWQGxs.cjs.map +0 -1
  428. package/dist/appLogs-DFcPwVk8.js +0 -131
  429. package/dist/appLogs-DFcPwVk8.js.map +0 -1
  430. package/dist/apps/index.cjs.map +0 -1
  431. package/dist/apps/index.js.map +0 -1
  432. package/dist/componentId-C8ZTXXDo.cjs.map +0 -1
  433. package/dist/componentId-b_qBbJEM.js.map +0 -1
  434. package/dist/constants-BMSHGwOR.js.map +0 -1
  435. package/dist/constants-DhFQWQgy.cjs.map +0 -1
  436. package/dist/createFetchClient-DEkUH662.cjs.map +0 -1
  437. package/dist/dataScience-CXmkEOAi.js +0 -118
  438. package/dist/dataScience-CXmkEOAi.js.map +0 -1
  439. package/dist/dataScience-CufjHPSd.cjs +0 -123
  440. package/dist/dataScience-CufjHPSd.cjs.map +0 -1
  441. package/dist/index-BZDxWvZW.d.ts +0 -214
  442. package/dist/index-ClIV2Lch.d.cts +0 -214
  443. package/dist/management-BEGOEQxM.cjs.map +0 -1
  444. package/dist/management-BcGHyxAP.js.map +0 -1
  445. package/dist/queryService-Cg-eMysa.cjs +0 -126
  446. package/dist/queryService-Cg-eMysa.cjs.map +0 -1
  447. package/dist/queryService-x8kq8Z2-.js +0 -121
  448. package/dist/queryService-x8kq8Z2-.js.map +0 -1
  449. package/dist/semanticLayer-BdPW_wLo.js.map +0 -1
  450. package/dist/semanticLayer-djom-J78.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/sdks/developerPortal/tokenExpiry.ts","../../../src/sdks/developerPortal/credential.ts","../../../src/sdks/developerPortal/middleware.ts","../../../src/sdks/developerPortal/developerPortalSdk.ts"],"sourcesContent":["/**\n * Reads a JWT's `exp` claim as milliseconds, or `null` when unparseable (\"expiry unknown\", which the\n * caller leaves to the 401 path). A read, not a verification.\n *\n * Needed because apps-api reports `expiresIn` on login but never on refresh, so it cannot keep a\n * proactive-refresh clock honest past the first rotation. The token always carries its own expiry.\n */\nexport const readTokenExpiry = (token: string): number | null => {\n const segments = token.split('.');\n if (segments.length !== 3) return null;\n\n const payload = segments[1];\n if (payload === undefined || payload === '') return null;\n\n try {\n // base64url -> base64, and re-pad: `atob` requires padding, base64url omits it.\n const base64 = payload.replaceAll('-', '+').replaceAll('_', '/');\n const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), '=');\n const claims: unknown = JSON.parse(atob(padded));\n if (typeof claims !== 'object' || claims === null || !('exp' in claims)) return null;\n const { exp } = claims as { exp: unknown };\n if (typeof exp !== 'number' || !Number.isFinite(exp)) return null;\n return exp * 1000;\n } catch {\n return null;\n }\n};\n","import type { DeveloperPortalTokens } from '../../clients/developerPortal/tokens';\nimport { isUnauthorized } from '../../keboola/bearer/credentials';\nimport { dedupe } from '../../utils';\n\nimport { readTokenExpiry } from './tokenExpiry';\n\ntype Options = {\n refresh: () => Promise<DeveloperPortalTokens>;\n /** Live read from the session, so this holds no token of its own. `null` when signed out. */\n getTokens: () => DeveloperPortalTokens | null;\n /** May fire more than once; the caller owns any fire-once latch. */\n onSessionExpired?: () => void;\n /**\n * An absolute lead time rather than `createBearerCredential`'s fractional threshold: that needs the\n * token's full lifetime, and apps-api reports `expiresIn` on login only, never on refresh.\n */\n refreshLeadTimeMs?: number;\n};\n\nconst DEFAULT_REFRESH_LEAD_TIME_MS = 5 * 60 * 1000;\n\nexport type DeveloperPortalCredential = {\n getIdToken: (options?: { forceRefresh?: boolean }) => Promise<string | null>;\n getTokens: () => DeveloperPortalTokens | null;\n notifyExpired: () => void;\n};\n\n/** Mirrors `createBearerCredential`, over the id token of the trio. */\nexport const createDeveloperPortalCredential = ({\n refresh,\n getTokens,\n onSessionExpired,\n refreshLeadTimeMs = DEFAULT_REFRESH_LEAD_TIME_MS,\n}: Options): DeveloperPortalCredential => {\n const doRefresh = async (): Promise<DeveloperPortalTokens> => {\n try {\n return await refresh();\n } catch (error) {\n // Only a 401 means the refresh token is dead. Signing out over a 5xx would be a self-inflicted\n // logout, so anything else propagates without expiring the session.\n if (isUnauthorized(error)) onSessionExpired?.();\n throw error;\n }\n };\n\n // N concurrent 401s must cause one rotation: each extra one invalidates the tokens the others got.\n const refreshShared = dedupe(doRefresh);\n\n const getIdToken = async ({ forceRefresh = false } = {}): Promise<string | null> => {\n const tokens = getTokens();\n if (tokens === null) return null;\n if (forceRefresh) return (await refreshShared()).token;\n\n const expiresAt = readTokenExpiry(tokens.token);\n // Unknown expiry is left to the 401 path; a `0` here would rotate on every request.\n if (expiresAt === null) return tokens.token;\n if (Date.now() < expiresAt - refreshLeadTimeMs) return tokens.token;\n\n // Proactive rotation is best-effort — a real 401 drives the mandatory one.\n return refreshShared()\n .then((fresh) => fresh.token)\n .catch(() => tokens.token);\n };\n\n return { getIdToken, getTokens, notifyExpired: () => onSessionExpired?.() };\n};\n","import { HttpHeader, type MiddlewareFn } from '../../fetchClient';\nimport { isUnauthorized } from '../../keboola/bearer/credentials';\n\nimport type { DeveloperPortalCredential } from './credential';\n\n/**\n * Stamps the id token, and on a 401 force-refreshes and replays once. Mirrors\n * `createBearerAuthMiddleware`, minus the `Bearer ` prefix apps-api does not use.\n *\n * An anonymous session passes through unstamped, so a failed login is never read as session expiry.\n */\nexport const createDeveloperPortalAuthMiddleware = (\n credential: DeveloperPortalCredential,\n): MiddlewareFn => {\n return (next) => async (request) => {\n const token = await credential.getIdToken();\n if (token === null) return next(request);\n\n // Cloned before the first attempt consumes the body. Cloning the `Request` carries a binary or\n // FormData payload through byte-for-byte.\n const retryRequest = request.request.clone();\n request.request.headers.set(HttpHeader.AUTHORIZATION, token);\n\n try {\n return await next(request);\n } catch (error) {\n if (!isUnauthorized(error)) throw error;\n\n const refreshed = await credential.getIdToken({ forceRefresh: true }).catch(() => null);\n // Nothing to replay with, because a concurrent sign-out landed or the rotation failed. The\n // caller's request failed with a 401, so that is what they see.\n if (refreshed === null) throw error;\n retryRequest.headers.set(HttpHeader.AUTHORIZATION, refreshed);\n\n try {\n return await next({ ...request, request: retryRequest });\n } catch (retryError) {\n if (isUnauthorized(retryError)) credential.notifyExpired();\n throw retryError;\n }\n }\n };\n};\n","import { createDeveloperPortalClient } from '../../clients/developerPortal/developerPortalClient';\nimport type { DeveloperPortalTokens } from '../../clients/developerPortal/tokens';\nimport type { LoginSuccess } from '../../clients/developerPortal/types';\nimport type { MiddlewareFn } from '../../fetchClient';\nimport { createStore } from '../../utils';\n\nimport { createDeveloperPortalCredential } from './credential';\nimport { createDeveloperPortalAuthMiddleware } from './middleware';\n\nexport type DeveloperPortalSdkOptions = {\n baseUrl: string;\n /** Session to restore on construction. */\n tokens?: DeveloperPortalTokens | null;\n /** Persistence hook, fired on sign-in, every rotation, and with `null` on sign-out or expiry. */\n onTokensChange?: (tokens: DeveloperPortalTokens | null) => void;\n /** The session is dead; tokens are already cleared. The consumer redirects to sign-in. */\n onSessionExpired?: () => void;\n refreshLeadTimeMs?: number;\n middlewares?: MiddlewareFn[];\n};\n\n/**\n * `createDeveloperPortalClient` plus the session that keeps it authenticated.\n *\n * - Builds its own client: middleware, credential and session depend on each other in a cycle.\n */\nexport const createDeveloperPortalSdk = ({\n baseUrl,\n tokens: initialTokens = null,\n onTokensChange,\n onSessionExpired,\n refreshLeadTimeMs,\n middlewares = [],\n}: DeveloperPortalSdkOptions) => {\n const store = createStore<DeveloperPortalTokens | null>(initialTokens);\n store.subscribe((value) => onTokensChange?.(value));\n\n const getTokens = () => store.get();\n\n const requireTokens = (action: string): DeveloperPortalTokens => {\n const tokens = store.get();\n if (tokens === null) {\n throw new Error(`Developer Portal: ${action} requires a signed-in session.`);\n }\n return tokens;\n };\n\n // No auth middleware, so a rotation cannot recurse into the middleware that triggered it.\n const refreshClient = createDeveloperPortalClient({ baseUrl, middlewares });\n\n const refresh = async (): Promise<DeveloperPortalTokens> => {\n const before = store.get();\n if (before === null) {\n throw new Error('Cannot refresh the Developer Portal session: signed out.');\n }\n\n const { token, accessToken } = await refreshClient.auth.refreshTokens(before.refreshToken);\n const next: DeveloperPortalTokens = { token, accessToken, refreshToken: before.refreshToken };\n\n // Sign-out wins over an in-flight rotation; otherwise the response signs the user back in.\n const after = store.get();\n if (after === null || after.refreshToken !== before.refreshToken) {\n throw new Error('Developer Portal session changed while refreshing; discarding the result.');\n }\n\n store.set(next);\n return next;\n };\n\n const clear = () => store.set(null);\n\n const credential = createDeveloperPortalCredential({\n refresh,\n getTokens,\n refreshLeadTimeMs,\n onSessionExpired: () => {\n clear();\n onSessionExpired?.();\n },\n });\n\n const client = createDeveloperPortalClient({\n baseUrl,\n middlewares,\n authMiddleware: createDeveloperPortalAuthMiddleware(credential),\n });\n\n // `refreshTokens` is not re-exposed: rotating outside the store leaves stale tokens.\n const { refreshTokens: _storeBypassingRotation, ...auth } = client.auth;\n\n const api = {\n ...client,\n auth: {\n ...auth,\n logout: async (signal?: AbortSignal) =>\n client.auth.logout(requireTokens('sign-out').accessToken, signal),\n // Both MFA calls bypass the reactive 401 path, so rotate proactively first.\n setupMfa: async (signal?: AbortSignal) => {\n await credential.getIdToken();\n const { token, accessToken } = requireTokens('MFA enrolment');\n return client.auth.setupMfa({ idToken: token, accessToken }, signal);\n },\n confirmMfa: async (code: string, signal?: AbortSignal) => {\n await credential.getIdToken();\n const { token, accessToken } = requireTokens('MFA confirmation');\n return client.auth.confirmMfa({ idToken: token, accessToken, code }, signal);\n },\n },\n };\n\n const session = {\n set: (result: LoginSuccess) => {\n store.set({\n token: result.token,\n accessToken: result.accessToken,\n refreshToken: result.refreshToken,\n });\n },\n get: getTokens,\n subscribe: store.subscribe,\n clear,\n /** Rotates if the id token is inside the lead time. Best-effort; the 401 path is the guarantee. */\n ensureFresh: async (): Promise<void> => {\n await credential.getIdToken();\n },\n /** Rotates now, for a change of claims (e.g. leaving a vendor). Propagates failure. */\n refresh: async (): Promise<void> => {\n await credential.getIdToken({ forceRefresh: true });\n },\n isAuthenticated: () => store.get() !== null,\n };\n\n return { api, session };\n};\n\nexport type DeveloperPortalSdk = ReturnType<typeof createDeveloperPortalSdk>;\nexport type DeveloperPortalSession = DeveloperPortalSdk['session'];\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/sdks/developerPortal/tokenExpiry.ts","../../../src/sdks/developerPortal/credential.ts","../../../src/sdks/developerPortal/middleware.ts","../../../src/sdks/developerPortal/developerPortalSdk.ts"],"sourcesContent":["import { readJwtClaims } from '../../utils/readJwtClaims';\n\n/**\n * Reads a JWT's `exp` claim as milliseconds, or `null` when unparseable (\"expiry unknown\", which the\n * caller leaves to the 401 path). A read, not a verification.\n *\n * Needed because apps-api reports `expiresIn` on login but never on refresh, so it cannot keep a\n * proactive-refresh clock honest past the first rotation. The token always carries its own expiry.\n */\nexport const readTokenExpiry = (token: string): number | null => {\n const exp = readJwtClaims(token)?.exp;\n return typeof exp === 'number' && Number.isFinite(exp) ? exp * 1000 : null;\n};\n","import type { DeveloperPortalTokens } from '../../clients/developerPortal/tokens';\nimport { isUnauthorized } from '../../keboola/bearer/credentials';\nimport { dedupe } from '../../utils';\n\nimport { readTokenExpiry } from './tokenExpiry';\n\ntype Options = {\n refresh: () => Promise<DeveloperPortalTokens>;\n /** Live read from the session, so this holds no token of its own. `null` when signed out. */\n getTokens: () => DeveloperPortalTokens | null;\n /** May fire more than once; the caller owns any fire-once latch. */\n onSessionExpired?: () => void;\n /**\n * An absolute lead time rather than `createBearerCredential`'s fractional threshold: that needs the\n * token's full lifetime, and apps-api reports `expiresIn` on login only, never on refresh.\n */\n refreshLeadTimeMs?: number;\n};\n\nconst DEFAULT_REFRESH_LEAD_TIME_MS = 5 * 60 * 1000;\n\nexport type DeveloperPortalCredential = {\n getIdToken: (options?: { forceRefresh?: boolean }) => Promise<string | null>;\n getTokens: () => DeveloperPortalTokens | null;\n notifyExpired: () => void;\n};\n\n/** Mirrors `createBearerCredential`, over the id token of the trio. */\nexport const createDeveloperPortalCredential = ({\n refresh,\n getTokens,\n onSessionExpired,\n refreshLeadTimeMs = DEFAULT_REFRESH_LEAD_TIME_MS,\n}: Options): DeveloperPortalCredential => {\n const doRefresh = async (): Promise<DeveloperPortalTokens> => {\n try {\n return await refresh();\n } catch (error) {\n // Only a 401 means the refresh token is dead. Signing out over a 5xx would be a self-inflicted\n // logout, so anything else propagates without expiring the session.\n if (isUnauthorized(error)) onSessionExpired?.();\n throw error;\n }\n };\n\n // N concurrent 401s must cause one rotation: each extra one invalidates the tokens the others got.\n const refreshShared = dedupe(doRefresh);\n\n const getIdToken = async ({ forceRefresh = false } = {}): Promise<string | null> => {\n const tokens = getTokens();\n if (tokens === null) return null;\n if (forceRefresh) return (await refreshShared()).token;\n\n const expiresAt = readTokenExpiry(tokens.token);\n // Unknown expiry is left to the 401 path; a `0` here would rotate on every request.\n if (expiresAt === null) return tokens.token;\n if (Date.now() < expiresAt - refreshLeadTimeMs) return tokens.token;\n\n // Proactive rotation is best-effort — a real 401 drives the mandatory one.\n return refreshShared()\n .then((fresh) => fresh.token)\n .catch(() => tokens.token);\n };\n\n return { getIdToken, getTokens, notifyExpired: () => onSessionExpired?.() };\n};\n","import { HttpHeader, type MiddlewareFn } from '../../fetchClient';\nimport { isUnauthorized } from '../../keboola/bearer/credentials';\n\nimport type { DeveloperPortalCredential } from './credential';\n\n/**\n * Stamps the id token, and on a 401 force-refreshes and replays once. Mirrors\n * `createBearerAuthMiddleware`, minus the `Bearer ` prefix apps-api does not use.\n *\n * An anonymous session passes through unstamped, so a failed login is never read as session expiry.\n */\nexport const createDeveloperPortalAuthMiddleware = (\n credential: DeveloperPortalCredential,\n): MiddlewareFn => {\n return (next) => async (request) => {\n const token = await credential.getIdToken();\n if (token === null) return next(request);\n\n // Cloned before the first attempt consumes the body. Cloning the `Request` carries a binary or\n // FormData payload through byte-for-byte.\n const retryRequest = request.request.clone();\n request.request.headers.set(HttpHeader.AUTHORIZATION, token);\n\n try {\n return await next(request);\n } catch (error) {\n if (!isUnauthorized(error)) throw error;\n\n const refreshed = await credential.getIdToken({ forceRefresh: true }).catch(() => null);\n // Nothing to replay with, because a concurrent sign-out landed or the rotation failed. The\n // caller's request failed with a 401, so that is what they see.\n if (refreshed === null) throw error;\n retryRequest.headers.set(HttpHeader.AUTHORIZATION, refreshed);\n\n try {\n return await next({ ...request, request: retryRequest });\n } catch (retryError) {\n if (isUnauthorized(retryError)) credential.notifyExpired();\n throw retryError;\n }\n }\n };\n};\n","import { createDeveloperPortalClient } from '../../clients/developerPortal/developerPortalClient';\nimport type { DeveloperPortalTokens } from '../../clients/developerPortal/tokens';\nimport type { LoginSuccess } from '../../clients/developerPortal/types';\nimport type { MiddlewareFn } from '../../fetchClient';\nimport { createStore } from '../../utils';\n\nimport { createDeveloperPortalCredential } from './credential';\nimport { createDeveloperPortalAuthMiddleware } from './middleware';\n\nexport type DeveloperPortalSdkOptions = {\n baseUrl: string;\n /** Session to restore on construction. */\n tokens?: DeveloperPortalTokens | null;\n /** Persistence hook, fired on sign-in, every rotation, and with `null` on sign-out or expiry. */\n onTokensChange?: (tokens: DeveloperPortalTokens | null) => void;\n /** The session is dead; tokens are already cleared. The consumer redirects to sign-in. */\n onSessionExpired?: () => void;\n refreshLeadTimeMs?: number;\n middlewares?: MiddlewareFn[];\n};\n\n/**\n * `createDeveloperPortalClient` plus the session that keeps it authenticated.\n *\n * - Builds its own client: middleware, credential and session depend on each other in a cycle.\n */\nexport const createDeveloperPortalSdk = ({\n baseUrl,\n tokens: initialTokens = null,\n onTokensChange,\n onSessionExpired,\n refreshLeadTimeMs,\n middlewares = [],\n}: DeveloperPortalSdkOptions) => {\n const store = createStore<DeveloperPortalTokens | null>(initialTokens);\n store.subscribe((value) => onTokensChange?.(value));\n\n const getTokens = () => store.get();\n\n const requireTokens = (action: string): DeveloperPortalTokens => {\n const tokens = store.get();\n if (tokens === null) {\n throw new Error(`Developer Portal: ${action} requires a signed-in session.`);\n }\n return tokens;\n };\n\n // No auth middleware, so a rotation cannot recurse into the middleware that triggered it.\n const refreshClient = createDeveloperPortalClient({ baseUrl, middlewares });\n\n const refresh = async (): Promise<DeveloperPortalTokens> => {\n const before = store.get();\n if (before === null) {\n throw new Error('Cannot refresh the Developer Portal session: signed out.');\n }\n\n const { token, accessToken } = await refreshClient.auth.refreshTokens(before.refreshToken);\n const next: DeveloperPortalTokens = { token, accessToken, refreshToken: before.refreshToken };\n\n // Sign-out wins over an in-flight rotation; otherwise the response signs the user back in.\n const after = store.get();\n if (after === null || after.refreshToken !== before.refreshToken) {\n throw new Error('Developer Portal session changed while refreshing; discarding the result.');\n }\n\n store.set(next);\n return next;\n };\n\n const clear = () => store.set(null);\n\n const credential = createDeveloperPortalCredential({\n refresh,\n getTokens,\n refreshLeadTimeMs,\n onSessionExpired: () => {\n clear();\n onSessionExpired?.();\n },\n });\n\n const client = createDeveloperPortalClient({\n baseUrl,\n middlewares,\n authMiddleware: createDeveloperPortalAuthMiddleware(credential),\n });\n\n // `refreshTokens` is not re-exposed: rotating outside the store leaves stale tokens.\n const { refreshTokens: _storeBypassingRotation, ...auth } = client.auth;\n\n const api = {\n ...client,\n auth: {\n ...auth,\n logout: async (signal?: AbortSignal) =>\n client.auth.logout(requireTokens('sign-out').accessToken, signal),\n // Both MFA calls bypass the reactive 401 path, so rotate proactively first.\n setupMfa: async (signal?: AbortSignal) => {\n await credential.getIdToken();\n const { token, accessToken } = requireTokens('MFA enrolment');\n return client.auth.setupMfa({ idToken: token, accessToken }, signal);\n },\n confirmMfa: async (code: string, signal?: AbortSignal) => {\n await credential.getIdToken();\n const { token, accessToken } = requireTokens('MFA confirmation');\n return client.auth.confirmMfa({ idToken: token, accessToken, code }, signal);\n },\n },\n };\n\n const session = {\n set: (result: LoginSuccess) => {\n store.set({\n token: result.token,\n accessToken: result.accessToken,\n refreshToken: result.refreshToken,\n });\n },\n get: getTokens,\n subscribe: store.subscribe,\n clear,\n /** Rotates if the id token is inside the lead time. Best-effort; the 401 path is the guarantee. */\n ensureFresh: async (): Promise<void> => {\n await credential.getIdToken();\n },\n /** Rotates now, for a change of claims (e.g. leaving a vendor). Propagates failure. */\n refresh: async (): Promise<void> => {\n await credential.getIdToken({ forceRefresh: true });\n },\n isAuthenticated: () => store.get() !== null,\n };\n\n return { api, session };\n};\n\nexport type DeveloperPortalSdk = ReturnType<typeof createDeveloperPortalSdk>;\nexport type DeveloperPortalSession = DeveloperPortalSdk['session'];\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_kaiMemory = require("../../kaiMemory-CkLQfJXD.cjs");
2
+ const require_kaiMemory = require("../../kaiMemory-DZ6hXni_.cjs");
3
3
  exports.KAI_MEMORY_OBJECT_TYPE = require_kaiMemory.KAI_MEMORY_OBJECT_TYPE;
4
4
  exports.KAI_MEMORY_STATUSES = require_kaiMemory.KAI_MEMORY_STATUSES;
5
5
  exports.KaiMemoryReviewConflictError = require_kaiMemory.KaiMemoryReviewConflictError;
@@ -1,4 +1,4 @@
1
- import { a as KaiMemoryStatus, c as KAI_MEMORY_STATUSES, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-CxEJ77m3.cjs";
1
+ import { a as KaiMemoryStatus, c as KAI_MEMORY_STATUSES, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-CSE8bHiq.cjs";
2
2
  /** The metastore object type this SDK addresses — see `SEMANTIC_OBJECT_TYPE` for the convention. */
3
3
  declare const KAI_MEMORY_OBJECT_TYPE = "kai-memory";
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as KaiMemoryStatus, c as KAI_MEMORY_STATUSES, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-xzt_2H63.js";
1
+ import { a as KaiMemoryStatus, c as KAI_MEMORY_STATUSES, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-zlYUn0oi.js";
2
2
  /** The metastore object type this SDK addresses — see `SEMANTIC_OBJECT_TYPE` for the convention. */
3
3
  declare const KAI_MEMORY_OBJECT_TYPE = "kai-memory";
4
4
  /**
@@ -1 +1 @@
1
- export { t as KAI_MEMORY_OBJECT_TYPE, a as KAI_MEMORY_STATUSES, n as KaiMemoryReviewConflictError, r as KaiMemoryUnreadableItemsError, i as createKaiMemorySdk } from "../../kaiMemory-oir_qCo_.js";
1
+ export { t as KAI_MEMORY_OBJECT_TYPE, a as KAI_MEMORY_STATUSES, n as KaiMemoryReviewConflictError, r as KaiMemoryUnreadableItemsError, i as createKaiMemorySdk } from "../../kaiMemory-B1wIwH8Y.js";
@@ -1,2 +1,2 @@
1
- import { a as KaiMemoryStatus, i as KaiMemoryMeta, n as KaiMemoryData, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-CxEJ77m3.cjs";
1
+ import { a as KaiMemoryStatus, i as KaiMemoryMeta, n as KaiMemoryData, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-CSE8bHiq.cjs";
2
2
  export { CreateKaiMemoryMeta, KaiMemoryData, KaiMemoryItem, KaiMemoryMeta, KaiMemoryStatus, MetastoreClient, UpdateKaiMemoryMeta };
@@ -1,2 +1,2 @@
1
- import { a as KaiMemoryStatus, i as KaiMemoryMeta, n as KaiMemoryData, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-xzt_2H63.js";
1
+ import { a as KaiMemoryStatus, i as KaiMemoryMeta, n as KaiMemoryData, o as MetastoreClient, r as KaiMemoryItem, s as UpdateKaiMemoryMeta, t as CreateKaiMemoryMeta } from "../../types-zlYUn0oi.js";
2
2
  export { CreateKaiMemoryMeta, KaiMemoryData, KaiMemoryItem, KaiMemoryMeta, KaiMemoryStatus, MetastoreClient, UpdateKaiMemoryMeta };
@@ -1,2 +1,2 @@
1
- import { b as ExecuteQueryOptions, x as createQueryServiceSdk } from "../../index-qJ2IjXIM.cjs";
1
+ import { b as ExecuteQueryOptions, x as createQueryServiceSdk } from "../../index-BUKMdbKh.cjs";
2
2
  export { ExecuteQueryOptions, createQueryServiceSdk };
@@ -1,2 +1,2 @@
1
- import { b as ExecuteQueryOptions, x as createQueryServiceSdk } from "../../index-BsT_cBJd.js";
1
+ import { b as ExecuteQueryOptions, x as createQueryServiceSdk } from "../../index-BxgHNJ3Q.js";
2
2
  export { ExecuteQueryOptions, createQueryServiceSdk };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_semanticLayer = require("../../semanticLayer-djom-J78.cjs");
2
+ const require_semanticLayer = require("../../semanticLayer-D8D_3hk-.cjs");
3
3
  exports.CONSTRAINT_SCOPES = require_semanticLayer.CONSTRAINT_SCOPES;
4
4
  exports.CONSTRAINT_SEVERITIES = require_semanticLayer.CONSTRAINT_SEVERITIES;
5
5
  exports.CONSTRAINT_TYPES = require_semanticLayer.CONSTRAINT_TYPES;
@@ -1,4 +1,4 @@
1
- import { A as CONSTRAINT_TYPES, D as UpdateSemanticObjectMeta, F as SQL_DIALECTS, M as RELATIONSHIP_JOIN_TYPES, N as RULE_OPERATORS, O as CONSTRAINT_SCOPES, P as SEMANTIC_OBJECT_SCOPES, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, j as FIELD_ROLES, k as CONSTRAINT_SEVERITIES, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, t as CreateSemanticObjectMeta, u as SemanticDatasetData, x as SemanticRelationshipData } from "../../types-B1qe1etN.cjs";
1
+ import { A as CONSTRAINT_TYPES, D as UpdateSemanticObjectMeta, F as SQL_DIALECTS, M as RELATIONSHIP_JOIN_TYPES, N as RULE_OPERATORS, O as CONSTRAINT_SCOPES, P as SEMANTIC_OBJECT_SCOPES, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, j as FIELD_ROLES, k as CONSTRAINT_SEVERITIES, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, t as CreateSemanticObjectMeta, u as SemanticDatasetData, x as SemanticRelationshipData } from "../../types-BljDxuWG.cjs";
2
2
  import { z } from "zod";
3
3
  /**
4
4
  * The message out of a metastore error body.
@@ -122,6 +122,11 @@ declare const createSemanticLayerSdk: ({ metastoreClient }: Options) => {
122
122
  deleteModel: (modelUUID: string) => Promise<void>;
123
123
  listModelChildren: (modelUUID: string, signal?: AbortSignal) => Promise<SemanticModelChildRef[]>;
124
124
  listObjects: <T extends SemanticChildObjectType>(objectType: T, modelUUID: string, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
125
+ listAllObjects: <T extends SemanticChildObjectType>(objectType: T, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
126
+ listAllObjectsWithUnreadable: <T extends SemanticChildObjectType>(objectType: T, signal?: AbortSignal) => Promise<{
127
+ objects: SemanticObject<SemanticChildObjectDataMap[T]>[];
128
+ unreadable: SemanticUnreadableObjectRef[];
129
+ }>;
125
130
  findObjectsByName: <T extends SemanticChildObjectType>(objectType: T, name: string, modelUUID: string, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
126
131
  createObject: <T extends SemanticChildObjectType>(objectType: T, data: SemanticChildObjectDataMap[T], meta?: CreateSemanticObjectMeta) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>>;
127
132
  createObjects: <T extends SemanticChildObjectType>(objectType: T, items: SemanticChildObjectDataMap[T][], meta?: CreateSemanticObjectMeta) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
@@ -1,4 +1,4 @@
1
- import { A as CONSTRAINT_TYPES, D as UpdateSemanticObjectMeta, F as SQL_DIALECTS, M as RELATIONSHIP_JOIN_TYPES, N as RULE_OPERATORS, O as CONSTRAINT_SCOPES, P as SEMANTIC_OBJECT_SCOPES, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, j as FIELD_ROLES, k as CONSTRAINT_SEVERITIES, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, t as CreateSemanticObjectMeta, u as SemanticDatasetData, x as SemanticRelationshipData } from "../../types-ir7T2a9a.js";
1
+ import { A as CONSTRAINT_TYPES, D as UpdateSemanticObjectMeta, F as SQL_DIALECTS, M as RELATIONSHIP_JOIN_TYPES, N as RULE_OPERATORS, O as CONSTRAINT_SCOPES, P as SEMANTIC_OBJECT_SCOPES, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, j as FIELD_ROLES, k as CONSTRAINT_SEVERITIES, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, t as CreateSemanticObjectMeta, u as SemanticDatasetData, x as SemanticRelationshipData } from "../../types-iU1Sc1IM.js";
2
2
  import { z } from "zod";
3
3
  /**
4
4
  * The message out of a metastore error body.
@@ -122,6 +122,11 @@ declare const createSemanticLayerSdk: ({ metastoreClient }: Options) => {
122
122
  deleteModel: (modelUUID: string) => Promise<void>;
123
123
  listModelChildren: (modelUUID: string, signal?: AbortSignal) => Promise<SemanticModelChildRef[]>;
124
124
  listObjects: <T extends SemanticChildObjectType>(objectType: T, modelUUID: string, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
125
+ listAllObjects: <T extends SemanticChildObjectType>(objectType: T, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
126
+ listAllObjectsWithUnreadable: <T extends SemanticChildObjectType>(objectType: T, signal?: AbortSignal) => Promise<{
127
+ objects: SemanticObject<SemanticChildObjectDataMap[T]>[];
128
+ unreadable: SemanticUnreadableObjectRef[];
129
+ }>;
125
130
  findObjectsByName: <T extends SemanticChildObjectType>(objectType: T, name: string, modelUUID: string, signal?: AbortSignal) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
126
131
  createObject: <T extends SemanticChildObjectType>(objectType: T, data: SemanticChildObjectDataMap[T], meta?: CreateSemanticObjectMeta) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>>;
127
132
  createObjects: <T extends SemanticChildObjectType>(objectType: T, items: SemanticChildObjectDataMap[T][], meta?: CreateSemanticObjectMeta) => Promise<SemanticObject<SemanticChildObjectDataMap[T]>[]>;
@@ -1 +1 @@
1
- export { f as CONSTRAINT_SCOPES, p as CONSTRAINT_SEVERITIES, m as CONSTRAINT_TYPES, h as FIELD_ROLES, t as MODEL_CHILD_OBJECT_TYPES, g as RELATIONSHIP_JOIN_TYPES, _ as RULE_OPERATORS, a as SEMANTIC_CHILD_OBJECT_SCHEMAS, v as SEMANTIC_OBJECT_SCOPES, n as SEMANTIC_OBJECT_TYPE, y as SQL_DIALECTS, r as SemanticLayerUnreadableChildrenError, i as createSemanticLayerSdk, b as metastoreErrorMessage, o as semanticConstraintSchema, s as semanticDatasetSchema, c as semanticGlossarySchema, l as semanticMetricSchema, u as semanticModelSchema, d as semanticRelationshipSchema } from "../../semanticLayer-BdPW_wLo.js";
1
+ export { f as CONSTRAINT_SCOPES, p as CONSTRAINT_SEVERITIES, m as CONSTRAINT_TYPES, h as FIELD_ROLES, t as MODEL_CHILD_OBJECT_TYPES, g as RELATIONSHIP_JOIN_TYPES, _ as RULE_OPERATORS, a as SEMANTIC_CHILD_OBJECT_SCHEMAS, v as SEMANTIC_OBJECT_SCOPES, n as SEMANTIC_OBJECT_TYPE, y as SQL_DIALECTS, r as SemanticLayerUnreadableChildrenError, i as createSemanticLayerSdk, b as metastoreErrorMessage, o as semanticConstraintSchema, s as semanticDatasetSchema, c as semanticGlossarySchema, l as semanticMetricSchema, u as semanticModelSchema, d as semanticRelationshipSchema } from "../../semanticLayer-CfjDnmsY.js";
@@ -1,2 +1,2 @@
1
- import { C as SemanticRuleExpression, D as UpdateSemanticObjectMeta, E as SemanticValidationQuery, S as SemanticRelationshipJoinType, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, c as SemanticConstraintSeverity, d as SemanticFieldData, f as SemanticFieldRole, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, l as SemanticConstraintType, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, r as SemanticAiMetadata, s as SemanticConstraintScope, t as CreateSemanticObjectMeta, u as SemanticDatasetData, v as SemanticObjectMeta, w as SemanticRuleOperator, x as SemanticRelationshipData, y as SemanticObjectScope } from "../../types-B1qe1etN.cjs";
1
+ import { C as SemanticRuleExpression, D as UpdateSemanticObjectMeta, E as SemanticValidationQuery, S as SemanticRelationshipJoinType, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, c as SemanticConstraintSeverity, d as SemanticFieldData, f as SemanticFieldRole, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, l as SemanticConstraintType, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, r as SemanticAiMetadata, s as SemanticConstraintScope, t as CreateSemanticObjectMeta, u as SemanticDatasetData, v as SemanticObjectMeta, w as SemanticRuleOperator, x as SemanticRelationshipData, y as SemanticObjectScope } from "../../types-BljDxuWG.cjs";
2
2
  export { CreateSemanticObjectMeta, MetastoreClient, SemanticAiMetadata, SemanticChildObjectDataMap, SemanticChildObjectType, SemanticConstraintData, SemanticConstraintScope, SemanticConstraintSeverity, SemanticConstraintType, SemanticDatasetData, SemanticFieldData, SemanticFieldRole, SemanticGlossaryData, SemanticMetricData, SemanticModelChildRef, SemanticModelData, SemanticObject, SemanticObjectMeta, SemanticObjectScope, SemanticObjectType, SemanticRelationshipData, SemanticRelationshipJoinType, SemanticRuleExpression, SemanticRuleOperator, SemanticUnreadableObjectRef, SemanticValidationQuery, UpdateSemanticObjectMeta };
@@ -1,2 +1,2 @@
1
- import { C as SemanticRuleExpression, D as UpdateSemanticObjectMeta, E as SemanticValidationQuery, S as SemanticRelationshipJoinType, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, c as SemanticConstraintSeverity, d as SemanticFieldData, f as SemanticFieldRole, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, l as SemanticConstraintType, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, r as SemanticAiMetadata, s as SemanticConstraintScope, t as CreateSemanticObjectMeta, u as SemanticDatasetData, v as SemanticObjectMeta, w as SemanticRuleOperator, x as SemanticRelationshipData, y as SemanticObjectScope } from "../../types-ir7T2a9a.js";
1
+ import { C as SemanticRuleExpression, D as UpdateSemanticObjectMeta, E as SemanticValidationQuery, S as SemanticRelationshipJoinType, T as SemanticUnreadableObjectRef, _ as SemanticObject, a as SemanticChildObjectType, b as SemanticObjectType, c as SemanticConstraintSeverity, d as SemanticFieldData, f as SemanticFieldRole, g as SemanticModelData, h as SemanticModelChildRef, i as SemanticChildObjectDataMap, l as SemanticConstraintType, m as SemanticMetricData, n as MetastoreClient, o as SemanticConstraintData, p as SemanticGlossaryData, r as SemanticAiMetadata, s as SemanticConstraintScope, t as CreateSemanticObjectMeta, u as SemanticDatasetData, v as SemanticObjectMeta, w as SemanticRuleOperator, x as SemanticRelationshipData, y as SemanticObjectScope } from "../../types-iU1Sc1IM.js";
2
2
  export { CreateSemanticObjectMeta, MetastoreClient, SemanticAiMetadata, SemanticChildObjectDataMap, SemanticChildObjectType, SemanticConstraintData, SemanticConstraintScope, SemanticConstraintSeverity, SemanticConstraintType, SemanticDatasetData, SemanticFieldData, SemanticFieldRole, SemanticGlossaryData, SemanticMetricData, SemanticModelChildRef, SemanticModelData, SemanticObject, SemanticObjectMeta, SemanticObjectScope, SemanticObjectType, SemanticRelationshipData, SemanticRelationshipJoinType, SemanticRuleExpression, SemanticRuleOperator, SemanticUnreadableObjectRef, SemanticValidationQuery, UpdateSemanticObjectMeta };
@@ -1,6 +1,6 @@
1
1
  import { v as KeboolaObjectId } from "../../index-24GpnYhn.cjs";
2
- import { S as MetaObject } from "../../types-DNgazFnF.cjs";
3
- import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, t as CreateMetaObjectMetaDataInput } from "../../types-DschSZHf.cjs";
2
+ import { S as MetaObject } from "../../types-CIlBSV99.cjs";
3
+ import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, t as CreateMetaObjectMetaDataInput } from "../../types-CKdNf_2k.cjs";
4
4
  type Options = {
5
5
  metastoreClient: MetastoreClient;
6
6
  };
@@ -1,6 +1,6 @@
1
1
  import { v as KeboolaObjectId } from "../../index-BUZ-vTRt.js";
2
- import { S as MetaObject } from "../../types-BiDdBXSm.js";
3
- import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, t as CreateMetaObjectMetaDataInput } from "../../types-DtOfhDzz.js";
2
+ import { S as MetaObject } from "../../types-Bp8G9yta.js";
3
+ import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, t as CreateMetaObjectMetaDataInput } from "../../types-DSWIIMdv.js";
4
4
  type Options = {
5
5
  metastoreClient: MetastoreClient;
6
6
  };
@@ -1,2 +1,2 @@
1
- import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, r as TagBindingData, t as CreateMetaObjectMetaDataInput } from "../../types-DschSZHf.cjs";
1
+ import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, r as TagBindingData, t as CreateMetaObjectMetaDataInput } from "../../types-CKdNf_2k.cjs";
2
2
  export { CreateMetaObjectMetaDataInput, MetastoreClient, TagBindingData, TagData, TagWithBindings, UpdateMetaObjectMetaDataInput };
@@ -1,2 +1,2 @@
1
- import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, r as TagBindingData, t as CreateMetaObjectMetaDataInput } from "../../types-DtOfhDzz.js";
1
+ import { a as TagWithBindings, i as TagData, n as MetastoreClient, o as UpdateMetaObjectMetaDataInput, r as TagBindingData, t as CreateMetaObjectMetaDataInput } from "../../types-DSWIIMdv.js";
2
2
  export { CreateMetaObjectMetaDataInput, MetastoreClient, TagBindingData, TagData, TagWithBindings, UpdateMetaObjectMetaDataInput };
@@ -1,2 +1,2 @@
1
- import { ct as isVariableEncryptionRequired, dt as vaultRef, ft as createVaultSdk, lt as isVariableOauth, pt as EncryptionCtx, st as isSameVariable, ut as partitionByOauth } from "../../index-qJ2IjXIM.cjs";
1
+ import { _t as createVaultSdk, ft as isSameVariable, gt as vaultRef, ht as partitionByOauth, mt as isVariableOauth, pt as isVariableEncryptionRequired, vt as EncryptionCtx } from "../../index-BUKMdbKh.cjs";
2
2
  export { type EncryptionCtx, createVaultSdk, isSameVariable, isVariableEncryptionRequired, isVariableOauth, partitionByOauth, vaultRef };
@@ -1,2 +1,2 @@
1
- import { ct as isVariableEncryptionRequired, dt as vaultRef, ft as createVaultSdk, lt as isVariableOauth, pt as EncryptionCtx, st as isSameVariable, ut as partitionByOauth } from "../../index-BsT_cBJd.js";
1
+ import { _t as createVaultSdk, ft as isSameVariable, gt as vaultRef, ht as partitionByOauth, mt as isVariableOauth, pt as isVariableEncryptionRequired, vt as EncryptionCtx } from "../../index-BxgHNJ3Q.js";
2
2
  export { type EncryptionCtx, createVaultSdk, isSameVariable, isVariableEncryptionRequired, isVariableOauth, partitionByOauth, vaultRef };
@@ -416,6 +416,19 @@ const createSemanticLayerSdk = ({ metastoreClient }) => {
416
416
  };
417
417
  const listObjects = async (objectType, modelUUID, signal) => (await _listChildObjects(objectType, modelUUID, signal)).objects;
418
418
  /**
419
+ * `listAllObjects`, plus a ref for every object that did not parse.
420
+ *
421
+ * - An unreadable ref names its model when the envelope still does; `modelUUID: null` otherwise.
422
+ */
423
+ const listAllObjectsWithUnreadable = (objectType, signal) => _listObjects(objectType, SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType], signal);
424
+ /**
425
+ * Every object of one child type the project can read, across all its models.
426
+ *
427
+ * - One request instead of one per model — for views that summarise every model at once.
428
+ * - Same visibility as `listModels`: own objects, organization scope and targeted grants.
429
+ */
430
+ const listAllObjects = async (objectType, signal) => (await listAllObjectsWithUnreadable(objectType, signal)).objects;
431
+ /**
419
432
  * A model's child objects by name (`term` for glossary).
420
433
  *
421
434
  * - Returns every match: names are not unique, the caller decides.
@@ -601,6 +614,8 @@ const createSemanticLayerSdk = ({ metastoreClient }) => {
601
614
  deleteModel,
602
615
  listModelChildren,
603
616
  listObjects,
617
+ listAllObjects,
618
+ listAllObjectsWithUnreadable,
604
619
  findObjectsByName,
605
620
  createObject,
606
621
  createObjects,
@@ -617,4 +632,4 @@ const createSemanticLayerSdk = ({ metastoreClient }) => {
617
632
  };
618
633
  export { RULE_OPERATORS as _, SEMANTIC_CHILD_OBJECT_SCHEMAS as a, metastoreErrorMessage as b, semanticGlossarySchema as c, semanticRelationshipSchema as d, CONSTRAINT_SCOPES as f, RELATIONSHIP_JOIN_TYPES as g, FIELD_ROLES as h, createSemanticLayerSdk as i, semanticMetricSchema as l, CONSTRAINT_TYPES as m, SEMANTIC_OBJECT_TYPE as n, semanticConstraintSchema as o, CONSTRAINT_SEVERITIES as p, SemanticLayerUnreadableChildrenError as r, semanticDatasetSchema as s, MODEL_CHILD_OBJECT_TYPES as t, semanticModelSchema as u, SEMANTIC_OBJECT_SCOPES as v, SQL_DIALECTS as y };
619
634
 
620
- //# sourceMappingURL=semanticLayer-BdPW_wLo.js.map
635
+ //# sourceMappingURL=semanticLayer-CfjDnmsY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticLayer-CfjDnmsY.js","names":[],"sources":["../src/sdks/semanticLayer/errorMessage.ts","../src/sdks/semanticLayer/vocabulary.ts","../src/sdks/semanticLayer/schemas.ts","../src/sdks/semanticLayer/readSchemas.ts","../src/sdks/semanticLayer/semanticLayerSdk.ts"],"sourcesContent":["/**\n * The message out of a metastore error body.\n *\n * - Only `errors[].message` says what is wrong; the top-level message is just \"Validation failed\".\n * - Any other shape returns `undefined`, so the caller keeps its own fallback.\n * - Only the first error: the metastore reports fields one at a time.\n */\nexport const metastoreErrorMessage = (data: unknown): string | undefined => {\n if (typeof data !== 'object' || data === null) return undefined;\n const errors = (data as { errors?: unknown }).errors;\n if (!Array.isArray(errors)) return undefined;\n const first = errors[0];\n if (typeof first !== 'object' || first === null) return undefined;\n const message = (first as { message?: unknown }).message;\n return typeof message === 'string' && message ? message : undefined;\n};\n","/**\n * The closed value sets the metastore accepts on a semantic object.\n *\n * - The single runtime source for the unions `./types` derives from these arrays.\n * - Imports nothing: `./types` reads it, never the reverse.\n */\n\n/**\n * The dialects the metastore accepts, case-sensitive.\n *\n * - `SemanticModelData.sql_dialect` stays `string` (narrowing is a major bump); validate against this.\n */\nexport const SQL_DIALECTS = ['Snowflake', 'BigQuery'] as const;\n\nexport const CONSTRAINT_TYPES = [\n 'inequality',\n 'equality',\n 'range',\n 'composition',\n 'exclusion',\n 'temporal',\n 'conditional',\n] as const;\n\n/** Dataset field roles; enumerated, unlike a field's free-form `type`. */\nexport const FIELD_ROLES = ['key', 'dimension', 'measure', 'timestamp'] as const;\n\n/** Constraint severities; unset is stored as `warning`. */\nexport const CONSTRAINT_SEVERITIES = ['error', 'warning', 'info'] as const;\n\n/** Constraint scopes; unset is stored as `global`. */\nexport const CONSTRAINT_SCOPES = ['global', 'per_location', 'per_date', 'per_category'] as const;\n\nexport const RULE_OPERATORS = [\n '<',\n '<=',\n '=',\n '>=',\n '>',\n '!=',\n 'between',\n 'in',\n 'sum_equals',\n 'ratio_between',\n] as const;\n\nexport const RELATIONSHIP_JOIN_TYPES = ['left', 'inner'] as const;\n\n/** Who can read an object, narrowest first; an envelope `meta` field, not part of `data`. */\nexport const SEMANTIC_OBJECT_SCOPES = ['project', 'targeted', 'organization'] as const;\n","import { z } from 'zod';\n\nimport { CONSTRAINT_TYPES, SQL_DIALECTS } from './vocabulary';\n\n/**\n * Write validators for untrusted input; the metastore's own validation errors are opaque.\n *\n * - Only required fields are declared; `looseObject` passes the rest through (the metastore owns the full schema).\n * - The SDK does not parse its own writes.\n * - `modelUUID` is omitted: the SDK injects it.\n */\n\nexport const semanticModelSchema = z.looseObject({\n name: z.string().min(1),\n sql_dialect: z.enum(SQL_DIALECTS),\n});\n\nexport const semanticDatasetSchema = z.looseObject({\n name: z.string().min(1),\n tableId: z.string().min(1),\n fqn: z.string().min(1),\n});\n\nexport const semanticMetricSchema = z.looseObject({\n name: z.string().min(1),\n sql: z.string().min(1),\n});\n\nexport const semanticRelationshipSchema = z.looseObject({\n from: z.string().min(1),\n to: z.string().min(1),\n on: z.string().min(1),\n});\n\nexport const semanticGlossarySchema = z.looseObject({\n term: z.string().min(1),\n definition: z.string().min(1),\n});\n\nexport const semanticConstraintSchema = z.looseObject({\n name: z.string().min(1),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n rule: z.string().min(1),\n});\n\nexport const SEMANTIC_CHILD_OBJECT_SCHEMAS = {\n 'semantic-dataset': semanticDatasetSchema,\n 'semantic-metric': semanticMetricSchema,\n 'semantic-relationship': semanticRelationshipSchema,\n 'semantic-glossary': semanticGlossarySchema,\n 'semantic-constraint': semanticConstraintSchema,\n} as const;\n","import { z } from 'zod';\n\nimport { formatValidationIssues } from '../../errors';\n\nimport type {\n SemanticAiMetadata,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticConstraintData,\n SemanticDatasetData,\n SemanticFieldData,\n SemanticGlossaryData,\n SemanticMetricData,\n SemanticModelData,\n SemanticObjectMeta,\n SemanticRelationshipData,\n SemanticRuleExpression,\n SemanticValidationQuery,\n} from './types';\nimport {\n CONSTRAINT_SCOPES,\n CONSTRAINT_SEVERITIES,\n CONSTRAINT_TYPES,\n FIELD_ROLES,\n RELATIONSHIP_JOIN_TYPES,\n RULE_OPERATORS,\n SEMANTIC_OBJECT_SCOPES,\n} from './vocabulary';\n\n/**\n * What a read of the metastore is allowed to hand back, per object type.\n *\n * - Each schema is annotated with its `./types` type, so the two cannot drift apart.\n * - `looseObject`: fields the metastore adds still reach callers.\n * - An unknown value in an optional enum reads as absent; in a required enum it drops the object.\n */\n\nconst aiMetadataSchema: z.ZodType<SemanticAiMetadata, unknown> = z.looseObject({\n synonyms: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n antiKeywords: z.array(z.string()).optional(),\n hints: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n});\n\nconst fieldSchema: z.ZodType<SemanticFieldData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n type: z.string().optional(),\n role: z.enum(FIELD_ROLES).optional().catch(undefined),\n values: z.array(z.string()).optional(),\n ai: aiMetadataSchema.optional(),\n});\n\n/**\n * A dataset's `fields`, where a malformed column is dropped rather than the whole dataset.\n *\n * - `schemas.ts` does not validate `fields` on write, so a nameless column can be stored.\n */\nconst datasetFieldsSchema = z.array(z.unknown()).transform((items) =>\n items.flatMap((element, index) => {\n const result = fieldSchema.safeParse(element);\n if (result.success) return [result.data];\n\n console.warn(\n `semanticLayerSdk: dropped field #${index} from a semantic-dataset, it does not match ` +\n `its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n return [];\n }),\n);\n\nconst ruleExpressionSchema: z.ZodType<SemanticRuleExpression, unknown> = z.looseObject({\n operator: z.enum(RULE_OPERATORS).optional().catch(undefined),\n left: z.string().optional(),\n right: z.string().optional(),\n bounds: z\n .looseObject({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n});\n\nconst validationQuerySchema: z.ZodType<SemanticValidationQuery, unknown> = z.looseObject({\n default: z.string().optional(),\n snowflake: z.string().optional(),\n bigquery: z.string().optional(),\n});\n\nexport const semanticModelReadSchema: z.ZodType<SemanticModelData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n sql_dialect: z.string(),\n});\n\nconst semanticDatasetReadSchema: z.ZodType<SemanticDatasetData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n tableId: z.string(),\n fqn: z.string(),\n description: z.string().optional(),\n grain: z.string().optional(),\n primaryKey: z.array(z.string()).optional(),\n fields: datasetFieldsSchema.optional(),\n ai: aiMetadataSchema.optional(),\n});\n\nconst semanticMetricReadSchema: z.ZodType<SemanticMetricData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n sql: z.string(),\n dataset: z.string().optional(),\n description: z.string().optional(),\n});\n\nconst semanticRelationshipReadSchema: z.ZodType<SemanticRelationshipData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string().optional(),\n from: z.string(),\n to: z.string(),\n on: z.string(),\n type: z.enum(RELATIONSHIP_JOIN_TYPES).optional().catch(undefined),\n});\n\nconst semanticGlossaryReadSchema: z.ZodType<SemanticGlossaryData, unknown> = z.looseObject({\n modelUUID: z.string(),\n term: z.string(),\n definition: z.string(),\n seeAlso: z.array(z.string()).optional(),\n});\n\nconst semanticConstraintReadSchema: z.ZodType<SemanticConstraintData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n description: z.string().optional(),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n datasets: z.array(z.string()).optional(),\n rule: z.string(),\n ruleExpression: ruleExpressionSchema.optional(),\n validationQuery: validationQuerySchema.optional(),\n severity: z.enum(CONSTRAINT_SEVERITIES).optional().catch(undefined),\n errorMessage: z.string().optional(),\n remediation: z.string().optional(),\n isActive: z.boolean().optional(),\n scope: z.enum(CONSTRAINT_SCOPES).optional().catch(undefined),\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n/** Keyed by object type so a read can pick the schema from a `SemanticChildObjectType`. */\nexport const SEMANTIC_CHILD_OBJECT_READ_SCHEMAS: {\n [T in SemanticChildObjectType]: z.ZodType<SemanticChildObjectDataMap[T], unknown>;\n} = {\n 'semantic-dataset': semanticDatasetReadSchema,\n 'semantic-metric': semanticMetricReadSchema,\n 'semantic-relationship': semanticRelationshipReadSchema,\n 'semantic-glossary': semanticGlossaryReadSchema,\n 'semantic-constraint': semanticConstraintReadSchema,\n};\n\nconst semanticObjectMetaSchema: z.ZodType<SemanticObjectMeta, unknown> = z.looseObject({\n name: z.string().optional(),\n branch: z.string().optional(),\n projectId: z.number().nullable().optional(),\n organizationId: z.string().optional(),\n revision: z.number().optional(),\n schemaVersion: z.string().optional(),\n createdAt: z.string().optional(),\n lastUpdated: z.string().optional(),\n revisionCreatedAt: z.string().optional(),\n scope: z.enum(SEMANTIC_OBJECT_SCOPES).optional().catch(undefined),\n // `.catch`: a malformed value, `null` included, reads as unset rather than dropping the object.\n sourceProjectId: z.number().optional().catch(undefined),\n targetProjectIds: z.array(z.number()).optional().catch(undefined),\n});\n\n/**\n * The envelope every read comes wrapped in, mapped to the `SemanticObject` the SDK returns.\n *\n * - A missing or `null` `meta` normalizes rather than drops the object; no caller needs its fields.\n */\nexport const semanticObjectReadSchema = <TData>(dataSchema: z.ZodType<TData, unknown>) =>\n z\n .object({\n id: z.string(),\n attributes: dataSchema,\n meta: semanticObjectMetaSchema.nullish(),\n })\n .transform(({ id, attributes, meta }) => ({ uuid: id, data: attributes, meta: meta ?? {} }));\n","import { z } from 'zod';\n\nimport { formatValidationIssues, parseOrThrow } from '../../errors';\nimport { concurrent, generateUUID } from '../../utils';\n\nimport {\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS,\n semanticModelReadSchema,\n semanticObjectReadSchema,\n} from './readSchemas';\nimport type {\n CreateSemanticObjectMeta,\n MetastoreClient,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticModelChildRef,\n SemanticModelData,\n SemanticObject,\n SemanticObjectMeta,\n SemanticObjectType,\n SemanticUnreadableObjectRef,\n UpdateSemanticObjectMeta,\n} from './types';\n\n/**\n * Thrown by `listModelChildren` when some child could not be parsed; fails closed.\n *\n * - An `unreadable` entry with `modelUUID: null` counts against every model.\n */\nexport class SemanticLayerUnreadableChildrenError extends Error {\n readonly modelUUID: string;\n readonly unreadable: SemanticUnreadableObjectRef[];\n\n constructor({\n modelUUID,\n unreadable,\n }: {\n modelUUID: string;\n unreadable: SemanticUnreadableObjectRef[];\n }) {\n super(\n `${unreadable.length} child object(s) of the model could not be read, so what it holds ` +\n `is unknown and nothing was deleted.`,\n );\n this.name = 'SemanticLayerUnreadableChildrenError';\n this.modelUUID = modelUUID;\n this.unreadable = unreadable;\n }\n}\n\nexport const SEMANTIC_OBJECT_TYPE = {\n MODEL: 'semantic-model',\n DATASET: 'semantic-dataset',\n METRIC: 'semantic-metric',\n RELATIONSHIP: 'semantic-relationship',\n GLOSSARY: 'semantic-glossary',\n CONSTRAINT: 'semantic-constraint',\n} as const satisfies Record<string, SemanticObjectType>;\n\n/** `readonly`: it drives what a model delete confirmation lists. */\nexport const MODEL_CHILD_OBJECT_TYPES: readonly SemanticChildObjectType[] = [\n SEMANTIC_OBJECT_TYPE.DATASET,\n SEMANTIC_OBJECT_TYPE.METRIC,\n SEMANTIC_OBJECT_TYPE.RELATIONSHIP,\n SEMANTIC_OBJECT_TYPE.GLOSSARY,\n SEMANTIC_OBJECT_TYPE.CONSTRAINT,\n] as const;\n\nconst DEFAULT_BRANCH = 'main';\n\n// The metastore has no bulk endpoint; writes are concurrent single POSTs.\nconst WRITE_CONCURRENCY = 5;\n\n/**\n * The live metastore envelope; the types in clients/metastore/repository/types.ts do not match it.\n *\n * - Reads parse it (`./readSchemas`); writes assert it, as the metastore echoes a validated object.\n */\ntype RawSemanticObject<TData> = {\n type: string;\n id: string;\n attributes: TData;\n meta: SemanticObjectMeta;\n};\n\nconst mapObject = <TData>(item: RawSemanticObject<TData>): SemanticObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\n/** The raw `id` of an envelope that failed to parse; `null` means unaddressable. */\nconst envelopeId = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { id } = value as { id?: unknown };\n return typeof id === 'string' && id !== '' ? id : null;\n};\n\n/** The raw `modelUUID` of a dropped envelope; `null` is treated as \"could be any model's\". */\nconst envelopeModelUUID = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { attributes } = value as { attributes?: unknown };\n if (typeof attributes !== 'object' || attributes === null) return null;\n const { modelUUID } = attributes as { modelUUID?: unknown };\n return typeof modelUUID === 'string' && modelUUID !== '' ? modelUUID : null;\n};\n\nconst deriveOptionalObjectName = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.name === 'string') return data.name;\n if (typeof data.term === 'string') return data.term;\n return undefined;\n};\n\nconst deriveObjectName = (data: Record<string, unknown>) =>\n deriveOptionalObjectName(data) ?? generateUUID();\n\n/**\n * The UI label: `displayName ?? name`, matching kbc-ui's constraint tables.\n *\n * - Not used for lookup: `displayName` is not unique.\n */\nconst deriveObjectLabel = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.displayName === 'string' && data.displayName !== '') return data.displayName;\n return deriveOptionalObjectName(data);\n};\n\n/**\n * The value sibling objects reference a child by.\n *\n * - A metric's `dataset` and a relationship's `from`/`to` hold a dataset's `tableId`.\n * - A constraint's `metrics[]` holds metric `name`s, never their `displayName`.\n */\nconst deriveReferenceKey = (\n objectType: SemanticChildObjectType,\n data: Record<string, unknown>,\n): string | undefined => {\n const key =\n objectType === SEMANTIC_OBJECT_TYPE.DATASET\n ? data.tableId\n : objectType === SEMANTIC_OBJECT_TYPE.METRIC\n ? data.name\n : undefined;\n return typeof key === 'string' && key !== '' ? key : undefined;\n};\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createSemanticLayerSdk = ({ metastoreClient }: Options) => {\n /**\n * Every object of one type, parsed rather than asserted.\n *\n * - A malformed element is dropped, logged and reported in `unreadable`; the rest still list.\n * - A response that is not a collection throws rather than reading as empty.\n */\n const _listObjects = async <TData>(\n objectType: SemanticObjectType,\n dataSchema: z.ZodType<TData, unknown>,\n signal?: AbortSignal,\n options: { modelUUID?: string; pendingElevationOnly?: boolean } = {},\n ): Promise<{ objects: SemanticObject<TData>[]; unreadable: SemanticUnreadableObjectRef[] }> => {\n const response = await metastoreClient.repository.getMetaObjects(\n { objectType, ...options },\n signal,\n );\n const items = parseOrThrow(z.array(z.unknown()), response.data);\n const schema = semanticObjectReadSchema(dataSchema);\n\n const objects: SemanticObject<TData>[] = [];\n const unreadable: SemanticUnreadableObjectRef[] = [];\n\n for (const item of items) {\n const result = schema.safeParse(item);\n if (result.success) {\n objects.push(result.data);\n continue;\n }\n\n unreadable.push({\n objectType,\n objectUUID: envelopeId(item),\n modelUUID: envelopeModelUUID(item),\n });\n\n // Never log the payload: it is customer data.\n console.warn(\n `semanticLayerSdk: dropped ${objectType} \"${envelopeId(item) ?? '<no id>'}\" from the ` +\n `metastore response, it does not match its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n }\n\n return { objects, unreadable };\n };\n\n const listModels = async (signal?: AbortSignal) =>\n (await _listObjects(SEMANTIC_OBJECT_TYPE.MODEL, semanticModelReadSchema, signal)).objects;\n\n /**\n * One model by UUID, with the envelope `meta` that carries its `scope`.\n *\n * - A model that does not parse throws a `ValidationError` rather than reading as missing.\n */\n const getModel = async (\n modelUUID: string,\n signal?: AbortSignal,\n ): Promise<SemanticObject<SemanticModelData>> => {\n const response = await metastoreClient.repository.getMetaObject(\n { objectType: SEMANTIC_OBJECT_TYPE.MODEL, UUID: modelUUID },\n signal,\n );\n return parseOrThrow(semanticObjectReadSchema(semanticModelReadSchema), response.data);\n };\n\n const createModel = async (data: SemanticModelData, meta: CreateSemanticObjectMeta = {}) => {\n const response = await metastoreClient.repository.createMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta.\n name: data.name,\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n const updateModel = async (\n modelUUID: string,\n data: Partial<SemanticModelData>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n data,\n ...meta,\n // Derived name wins over meta.\n ...(data.name ? { name: data.name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n /**\n * One child collection scoped to a model.\n *\n * - `unreadable` includes objects whose envelope names this model or no model.\n */\n const _listChildObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n // Server-side filter (every child object schema declares modelUUID x-filterable: true)\n // instead of fetching the type's whole list and filtering client-side.\n const { objects, unreadable } = await _listObjects(\n objectType,\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType],\n signal,\n { modelUUID },\n );\n\n // An unreadable item still needs this client-side check: the server filters by modelUUID on\n // the parsed field it trusts, but a malformed item that failed to parse is exactly the case\n // that field can't be trusted for — so an item naming another model still gets excluded here.\n return {\n objects,\n unreadable: unreadable.filter((ref) => ref.modelUUID === null || ref.modelUUID === modelUUID),\n };\n };\n\n const listObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => (await _listChildObjects(objectType, modelUUID, signal)).objects;\n\n /**\n * `listAllObjects`, plus a ref for every object that did not parse.\n *\n * - An unreadable ref names its model when the envelope still does; `modelUUID: null` otherwise.\n */\n const listAllObjectsWithUnreadable = <T extends SemanticChildObjectType>(\n objectType: T,\n signal?: AbortSignal,\n ) => _listObjects(objectType, SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType], signal);\n\n /**\n * Every object of one child type the project can read, across all its models.\n *\n * - One request instead of one per model — for views that summarise every model at once.\n * - Same visibility as `listModels`: own objects, organization scope and targeted grants.\n */\n const listAllObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n signal?: AbortSignal,\n ) => (await listAllObjectsWithUnreadable(objectType, signal)).objects;\n\n /**\n * A model's child objects by name (`term` for glossary).\n *\n * - Returns every match: names are not unique, the caller decides.\n */\n const findObjectsByName = async <T extends SemanticChildObjectType>(\n objectType: T,\n name: string,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n const objects = await listObjects(objectType, modelUUID, signal);\n return objects.filter((object) => deriveOptionalObjectName(object.data) === name);\n };\n\n const createObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n data: SemanticChildObjectDataMap[T],\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.createMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta.\n name: deriveObjectName(data),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const createObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n items: SemanticChildObjectDataMap[T][],\n meta: CreateSemanticObjectMeta = {},\n ) =>\n concurrent({\n items,\n process: async (data) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n /**\n * Creates a model, then every child concurrently, one request each.\n *\n * - Rejects on the first failed child and leaves the objects already written in place.\n * @deprecated Use `createModel`, then `createObject` or `createObjects`. Removed in the next major.\n */\n const createModelTree = async (\n model: SemanticModelData,\n children: Partial<{\n [T in SemanticChildObjectType]: Omit<SemanticChildObjectDataMap[T], 'modelUUID'>[];\n }>,\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const createdModel = await createModel(model, meta);\n\n const items = MODEL_CHILD_OBJECT_TYPES.flatMap((objectType) =>\n (children[objectType] ?? []).map((data) => ({\n objectType,\n data: {\n ...data,\n modelUUID: createdModel.uuid,\n } satisfies SemanticChildObjectDataMap[typeof objectType],\n })),\n );\n\n const createdChildren = await concurrent({\n items,\n process: async ({ objectType, data }) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n return { model: createdModel, children: createdChildren };\n };\n\n const updateObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n objectUUID: string,\n data: Partial<SemanticChildObjectDataMap[T]>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const name = deriveOptionalObjectName(data);\n const response = await metastoreClient.repository.updateMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n UUID: objectUUID,\n data,\n ...meta,\n // Derived name wins over meta.\n ...(name ? { name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const deleteObject = async (objectType: SemanticChildObjectType, objectUUID: string) => {\n await metastoreClient.repository.deleteMetaObject({\n objectType,\n UUID: objectUUID,\n });\n };\n\n /**\n * Every child object of a model, flattened; `name` is the display label.\n *\n * - Delete confirmations use this to say what a model delete would destroy.\n * - Costs five list requests, one per child type, each server-side filtered to this model.\n * - Throws `SemanticLayerUnreadableChildrenError` rather than degrading — a short list would\n * under-report what a delete destroys.\n */\n const listModelChildren = async (\n modelUUID: string,\n signal?: AbortSignal,\n ): Promise<SemanticModelChildRef[]> => {\n const perType = await Promise.all(\n MODEL_CHILD_OBJECT_TYPES.map(async (objectType) => {\n const { objects, unreadable } = await _listChildObjects(objectType, modelUUID, signal);\n return {\n children: objects.map((object) => {\n const referenceKey = deriveReferenceKey(objectType, object.data);\n return {\n objectType,\n objectUUID: object.uuid,\n name: deriveObjectLabel(object.data),\n ...(referenceKey === undefined ? {} : { referenceKey }),\n };\n }),\n unreadable,\n };\n }),\n );\n\n const unreadable = perType.flatMap((result) => result.unreadable);\n if (unreadable.length > 0) {\n throw new SemanticLayerUnreadableChildrenError({ modelUUID, unreadable });\n }\n\n return perType.flatMap((result) => result.children);\n };\n\n /**\n * Deletes a model; the metastore deletes all its child objects in the same transaction.\n *\n * - `409`: another object holds a `restrict` reference to the model; nothing was deleted.\n * - `404`: no such model, or it was already deleted.\n */\n const deleteModel = async (modelUUID: string) => {\n await metastoreClient.repository.deleteMetaObject({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n });\n };\n\n /**\n * Replace the projects granted read access to a `targeted`-scope object.\n *\n * - An empty array clears every grant.\n * - Read-only is enforced metastore-side.\n */\n const replaceTargetProjects = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n targetProjectIds: number[],\n ) => {\n await metastoreClient.repository.replaceTargetProjects({\n objectType,\n UUID: objectUUID,\n targetProjectIds,\n });\n };\n\n /**\n * Step a project-scoped object up to the organization scope, keeping its UUID and history.\n *\n * - Requires the organization-admin role for the target org; callers should surface the\n * metastore's 403 rather than pre-empt it.\n * - `dropSourceProject` opts out of recording the pre-promotion `projectId` as\n * `sourceProjectId`; omitted (the default), the source project is preserved.\n */\n const promoteToOrganizationScope = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n options: { dropSourceProject?: boolean } = {},\n ) => {\n // Scope ONLY (plus the optional drop flag). No `data`, not even `{}`: the metastore's\n // step-up guard rejects a PATCH that also carries name or data, and `Data *JSONData` treats\n // `{}` as present — which 400s with \"A scope change cannot be combined with name or data\n // changes\".\n const response = await metastoreClient.repository.updateMetaObject({\n objectType,\n UUID: objectUUID,\n scope: 'organization',\n ...(options.dropSourceProject !== undefined\n ? { dropSourceProject: options.dropSourceProject }\n : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<Record<string, unknown>>);\n };\n\n /**\n * Flag a `project`-scope object as awaiting an organization admin's decision to promote it.\n * Only the owning project may call this; idempotent — requesting again just refreshes the\n * timestamp rather than erroring.\n */\n const requestScopeElevation = async (objectType: SemanticObjectType, objectUUID: string) => {\n await metastoreClient.repository.requestScopeElevation({ objectType, UUID: objectUUID });\n };\n\n /**\n * Clear a pending scope-elevation request, whether withdrawn by the owner or declined by an\n * organization admin. Idempotent — clearing an object with no pending request is a no-op.\n */\n const withdrawScopeElevationRequest = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n ) => {\n await metastoreClient.repository.withdrawScopeElevationRequest({\n objectType,\n UUID: objectUUID,\n });\n };\n\n /**\n * Every object of `objectType`, across every project in the organization, currently awaiting an\n * org-admin's elevation decision. Backs the org-admin pending-elevation banner.\n */\n const listPendingScopeElevationRequests = async (\n objectType: SemanticObjectType,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getPendingScopeElevationRequests<\n Record<string, unknown>\n >({ objectType }, signal);\n return (response.data as unknown as RawSemanticObject<Record<string, unknown>>[]).map(\n mapObject,\n );\n };\n\n /**\n * The current project's own objects with a pending scope-elevation request — for the\n * requester, as opposed to `listPendingScopeElevationRequests`, which is the org-admin's\n * org-wide approval queue. Uses the regular (per-project) list endpoint, not `/organization`:\n * only project-scope objects can have a pending request, and only their owner can set one, so\n * filtering the objects this project can already see is sufficient — no org-wide access needed.\n */\n const listMyPendingScopeElevationRequests = async (\n objectType: SemanticObjectType,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<Record<string, unknown>>(\n { objectType, pendingElevationOnly: true },\n signal,\n );\n return (response.data as unknown as RawSemanticObject<Record<string, unknown>>[]).map(\n mapObject,\n );\n };\n\n return {\n // models\n listModels,\n getModel,\n createModel,\n updateModel,\n deleteModel,\n listModelChildren,\n\n // child objects (datasets, metrics, relationships, glossary, constraints)\n listObjects,\n listAllObjects,\n listAllObjectsWithUnreadable,\n findObjectsByName,\n createObject,\n createObjects,\n createModelTree,\n updateObject,\n deleteObject,\n\n // scoping / sharing\n replaceTargetProjects,\n promoteToOrganizationScope,\n requestScopeElevation,\n withdrawScopeElevationRequest,\n listPendingScopeElevationRequests,\n listMyPendingScopeElevationRequests,\n };\n};\n"],"mappings":"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"}
@@ -416,6 +416,19 @@ const createSemanticLayerSdk = ({ metastoreClient }) => {
416
416
  };
417
417
  const listObjects = async (objectType, modelUUID, signal) => (await _listChildObjects(objectType, modelUUID, signal)).objects;
418
418
  /**
419
+ * `listAllObjects`, plus a ref for every object that did not parse.
420
+ *
421
+ * - An unreadable ref names its model when the envelope still does; `modelUUID: null` otherwise.
422
+ */
423
+ const listAllObjectsWithUnreadable = (objectType, signal) => _listObjects(objectType, SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType], signal);
424
+ /**
425
+ * Every object of one child type the project can read, across all its models.
426
+ *
427
+ * - One request instead of one per model — for views that summarise every model at once.
428
+ * - Same visibility as `listModels`: own objects, organization scope and targeted grants.
429
+ */
430
+ const listAllObjects = async (objectType, signal) => (await listAllObjectsWithUnreadable(objectType, signal)).objects;
431
+ /**
419
432
  * A model's child objects by name (`term` for glossary).
420
433
  *
421
434
  * - Returns every match: names are not unique, the caller decides.
@@ -601,6 +614,8 @@ const createSemanticLayerSdk = ({ metastoreClient }) => {
601
614
  deleteModel,
602
615
  listModelChildren,
603
616
  listObjects,
617
+ listAllObjects,
618
+ listAllObjectsWithUnreadable,
604
619
  findObjectsByName,
605
620
  createObject,
606
621
  createObjects,
@@ -736,4 +751,4 @@ Object.defineProperty(exports, "semanticRelationshipSchema", {
736
751
  }
737
752
  });
738
753
 
739
- //# sourceMappingURL=semanticLayer-djom-J78.cjs.map
754
+ //# sourceMappingURL=semanticLayer-D8D_3hk-.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticLayer-D8D_3hk-.cjs","names":["z","z","formatValidationIssues","generateUUID","parseOrThrow","z","formatValidationIssues","concurrent"],"sources":["../src/sdks/semanticLayer/errorMessage.ts","../src/sdks/semanticLayer/vocabulary.ts","../src/sdks/semanticLayer/schemas.ts","../src/sdks/semanticLayer/readSchemas.ts","../src/sdks/semanticLayer/semanticLayerSdk.ts"],"sourcesContent":["/**\n * The message out of a metastore error body.\n *\n * - Only `errors[].message` says what is wrong; the top-level message is just \"Validation failed\".\n * - Any other shape returns `undefined`, so the caller keeps its own fallback.\n * - Only the first error: the metastore reports fields one at a time.\n */\nexport const metastoreErrorMessage = (data: unknown): string | undefined => {\n if (typeof data !== 'object' || data === null) return undefined;\n const errors = (data as { errors?: unknown }).errors;\n if (!Array.isArray(errors)) return undefined;\n const first = errors[0];\n if (typeof first !== 'object' || first === null) return undefined;\n const message = (first as { message?: unknown }).message;\n return typeof message === 'string' && message ? message : undefined;\n};\n","/**\n * The closed value sets the metastore accepts on a semantic object.\n *\n * - The single runtime source for the unions `./types` derives from these arrays.\n * - Imports nothing: `./types` reads it, never the reverse.\n */\n\n/**\n * The dialects the metastore accepts, case-sensitive.\n *\n * - `SemanticModelData.sql_dialect` stays `string` (narrowing is a major bump); validate against this.\n */\nexport const SQL_DIALECTS = ['Snowflake', 'BigQuery'] as const;\n\nexport const CONSTRAINT_TYPES = [\n 'inequality',\n 'equality',\n 'range',\n 'composition',\n 'exclusion',\n 'temporal',\n 'conditional',\n] as const;\n\n/** Dataset field roles; enumerated, unlike a field's free-form `type`. */\nexport const FIELD_ROLES = ['key', 'dimension', 'measure', 'timestamp'] as const;\n\n/** Constraint severities; unset is stored as `warning`. */\nexport const CONSTRAINT_SEVERITIES = ['error', 'warning', 'info'] as const;\n\n/** Constraint scopes; unset is stored as `global`. */\nexport const CONSTRAINT_SCOPES = ['global', 'per_location', 'per_date', 'per_category'] as const;\n\nexport const RULE_OPERATORS = [\n '<',\n '<=',\n '=',\n '>=',\n '>',\n '!=',\n 'between',\n 'in',\n 'sum_equals',\n 'ratio_between',\n] as const;\n\nexport const RELATIONSHIP_JOIN_TYPES = ['left', 'inner'] as const;\n\n/** Who can read an object, narrowest first; an envelope `meta` field, not part of `data`. */\nexport const SEMANTIC_OBJECT_SCOPES = ['project', 'targeted', 'organization'] as const;\n","import { z } from 'zod';\n\nimport { CONSTRAINT_TYPES, SQL_DIALECTS } from './vocabulary';\n\n/**\n * Write validators for untrusted input; the metastore's own validation errors are opaque.\n *\n * - Only required fields are declared; `looseObject` passes the rest through (the metastore owns the full schema).\n * - The SDK does not parse its own writes.\n * - `modelUUID` is omitted: the SDK injects it.\n */\n\nexport const semanticModelSchema = z.looseObject({\n name: z.string().min(1),\n sql_dialect: z.enum(SQL_DIALECTS),\n});\n\nexport const semanticDatasetSchema = z.looseObject({\n name: z.string().min(1),\n tableId: z.string().min(1),\n fqn: z.string().min(1),\n});\n\nexport const semanticMetricSchema = z.looseObject({\n name: z.string().min(1),\n sql: z.string().min(1),\n});\n\nexport const semanticRelationshipSchema = z.looseObject({\n from: z.string().min(1),\n to: z.string().min(1),\n on: z.string().min(1),\n});\n\nexport const semanticGlossarySchema = z.looseObject({\n term: z.string().min(1),\n definition: z.string().min(1),\n});\n\nexport const semanticConstraintSchema = z.looseObject({\n name: z.string().min(1),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n rule: z.string().min(1),\n});\n\nexport const SEMANTIC_CHILD_OBJECT_SCHEMAS = {\n 'semantic-dataset': semanticDatasetSchema,\n 'semantic-metric': semanticMetricSchema,\n 'semantic-relationship': semanticRelationshipSchema,\n 'semantic-glossary': semanticGlossarySchema,\n 'semantic-constraint': semanticConstraintSchema,\n} as const;\n","import { z } from 'zod';\n\nimport { formatValidationIssues } from '../../errors';\n\nimport type {\n SemanticAiMetadata,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticConstraintData,\n SemanticDatasetData,\n SemanticFieldData,\n SemanticGlossaryData,\n SemanticMetricData,\n SemanticModelData,\n SemanticObjectMeta,\n SemanticRelationshipData,\n SemanticRuleExpression,\n SemanticValidationQuery,\n} from './types';\nimport {\n CONSTRAINT_SCOPES,\n CONSTRAINT_SEVERITIES,\n CONSTRAINT_TYPES,\n FIELD_ROLES,\n RELATIONSHIP_JOIN_TYPES,\n RULE_OPERATORS,\n SEMANTIC_OBJECT_SCOPES,\n} from './vocabulary';\n\n/**\n * What a read of the metastore is allowed to hand back, per object type.\n *\n * - Each schema is annotated with its `./types` type, so the two cannot drift apart.\n * - `looseObject`: fields the metastore adds still reach callers.\n * - An unknown value in an optional enum reads as absent; in a required enum it drops the object.\n */\n\nconst aiMetadataSchema: z.ZodType<SemanticAiMetadata, unknown> = z.looseObject({\n synonyms: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n antiKeywords: z.array(z.string()).optional(),\n hints: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n});\n\nconst fieldSchema: z.ZodType<SemanticFieldData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n type: z.string().optional(),\n role: z.enum(FIELD_ROLES).optional().catch(undefined),\n values: z.array(z.string()).optional(),\n ai: aiMetadataSchema.optional(),\n});\n\n/**\n * A dataset's `fields`, where a malformed column is dropped rather than the whole dataset.\n *\n * - `schemas.ts` does not validate `fields` on write, so a nameless column can be stored.\n */\nconst datasetFieldsSchema = z.array(z.unknown()).transform((items) =>\n items.flatMap((element, index) => {\n const result = fieldSchema.safeParse(element);\n if (result.success) return [result.data];\n\n console.warn(\n `semanticLayerSdk: dropped field #${index} from a semantic-dataset, it does not match ` +\n `its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n return [];\n }),\n);\n\nconst ruleExpressionSchema: z.ZodType<SemanticRuleExpression, unknown> = z.looseObject({\n operator: z.enum(RULE_OPERATORS).optional().catch(undefined),\n left: z.string().optional(),\n right: z.string().optional(),\n bounds: z\n .looseObject({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n});\n\nconst validationQuerySchema: z.ZodType<SemanticValidationQuery, unknown> = z.looseObject({\n default: z.string().optional(),\n snowflake: z.string().optional(),\n bigquery: z.string().optional(),\n});\n\nexport const semanticModelReadSchema: z.ZodType<SemanticModelData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n sql_dialect: z.string(),\n});\n\nconst semanticDatasetReadSchema: z.ZodType<SemanticDatasetData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n tableId: z.string(),\n fqn: z.string(),\n description: z.string().optional(),\n grain: z.string().optional(),\n primaryKey: z.array(z.string()).optional(),\n fields: datasetFieldsSchema.optional(),\n ai: aiMetadataSchema.optional(),\n});\n\nconst semanticMetricReadSchema: z.ZodType<SemanticMetricData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n sql: z.string(),\n dataset: z.string().optional(),\n description: z.string().optional(),\n});\n\nconst semanticRelationshipReadSchema: z.ZodType<SemanticRelationshipData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string().optional(),\n from: z.string(),\n to: z.string(),\n on: z.string(),\n type: z.enum(RELATIONSHIP_JOIN_TYPES).optional().catch(undefined),\n});\n\nconst semanticGlossaryReadSchema: z.ZodType<SemanticGlossaryData, unknown> = z.looseObject({\n modelUUID: z.string(),\n term: z.string(),\n definition: z.string(),\n seeAlso: z.array(z.string()).optional(),\n});\n\nconst semanticConstraintReadSchema: z.ZodType<SemanticConstraintData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n description: z.string().optional(),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n datasets: z.array(z.string()).optional(),\n rule: z.string(),\n ruleExpression: ruleExpressionSchema.optional(),\n validationQuery: validationQuerySchema.optional(),\n severity: z.enum(CONSTRAINT_SEVERITIES).optional().catch(undefined),\n errorMessage: z.string().optional(),\n remediation: z.string().optional(),\n isActive: z.boolean().optional(),\n scope: z.enum(CONSTRAINT_SCOPES).optional().catch(undefined),\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n/** Keyed by object type so a read can pick the schema from a `SemanticChildObjectType`. */\nexport const SEMANTIC_CHILD_OBJECT_READ_SCHEMAS: {\n [T in SemanticChildObjectType]: z.ZodType<SemanticChildObjectDataMap[T], unknown>;\n} = {\n 'semantic-dataset': semanticDatasetReadSchema,\n 'semantic-metric': semanticMetricReadSchema,\n 'semantic-relationship': semanticRelationshipReadSchema,\n 'semantic-glossary': semanticGlossaryReadSchema,\n 'semantic-constraint': semanticConstraintReadSchema,\n};\n\nconst semanticObjectMetaSchema: z.ZodType<SemanticObjectMeta, unknown> = z.looseObject({\n name: z.string().optional(),\n branch: z.string().optional(),\n projectId: z.number().nullable().optional(),\n organizationId: z.string().optional(),\n revision: z.number().optional(),\n schemaVersion: z.string().optional(),\n createdAt: z.string().optional(),\n lastUpdated: z.string().optional(),\n revisionCreatedAt: z.string().optional(),\n scope: z.enum(SEMANTIC_OBJECT_SCOPES).optional().catch(undefined),\n // `.catch`: a malformed value, `null` included, reads as unset rather than dropping the object.\n sourceProjectId: z.number().optional().catch(undefined),\n targetProjectIds: z.array(z.number()).optional().catch(undefined),\n});\n\n/**\n * The envelope every read comes wrapped in, mapped to the `SemanticObject` the SDK returns.\n *\n * - A missing or `null` `meta` normalizes rather than drops the object; no caller needs its fields.\n */\nexport const semanticObjectReadSchema = <TData>(dataSchema: z.ZodType<TData, unknown>) =>\n z\n .object({\n id: z.string(),\n attributes: dataSchema,\n meta: semanticObjectMetaSchema.nullish(),\n })\n .transform(({ id, attributes, meta }) => ({ uuid: id, data: attributes, meta: meta ?? {} }));\n","import { z } from 'zod';\n\nimport { formatValidationIssues, parseOrThrow } from '../../errors';\nimport { concurrent, generateUUID } from '../../utils';\n\nimport {\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS,\n semanticModelReadSchema,\n semanticObjectReadSchema,\n} from './readSchemas';\nimport type {\n CreateSemanticObjectMeta,\n MetastoreClient,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticModelChildRef,\n SemanticModelData,\n SemanticObject,\n SemanticObjectMeta,\n SemanticObjectType,\n SemanticUnreadableObjectRef,\n UpdateSemanticObjectMeta,\n} from './types';\n\n/**\n * Thrown by `listModelChildren` when some child could not be parsed; fails closed.\n *\n * - An `unreadable` entry with `modelUUID: null` counts against every model.\n */\nexport class SemanticLayerUnreadableChildrenError extends Error {\n readonly modelUUID: string;\n readonly unreadable: SemanticUnreadableObjectRef[];\n\n constructor({\n modelUUID,\n unreadable,\n }: {\n modelUUID: string;\n unreadable: SemanticUnreadableObjectRef[];\n }) {\n super(\n `${unreadable.length} child object(s) of the model could not be read, so what it holds ` +\n `is unknown and nothing was deleted.`,\n );\n this.name = 'SemanticLayerUnreadableChildrenError';\n this.modelUUID = modelUUID;\n this.unreadable = unreadable;\n }\n}\n\nexport const SEMANTIC_OBJECT_TYPE = {\n MODEL: 'semantic-model',\n DATASET: 'semantic-dataset',\n METRIC: 'semantic-metric',\n RELATIONSHIP: 'semantic-relationship',\n GLOSSARY: 'semantic-glossary',\n CONSTRAINT: 'semantic-constraint',\n} as const satisfies Record<string, SemanticObjectType>;\n\n/** `readonly`: it drives what a model delete confirmation lists. */\nexport const MODEL_CHILD_OBJECT_TYPES: readonly SemanticChildObjectType[] = [\n SEMANTIC_OBJECT_TYPE.DATASET,\n SEMANTIC_OBJECT_TYPE.METRIC,\n SEMANTIC_OBJECT_TYPE.RELATIONSHIP,\n SEMANTIC_OBJECT_TYPE.GLOSSARY,\n SEMANTIC_OBJECT_TYPE.CONSTRAINT,\n] as const;\n\nconst DEFAULT_BRANCH = 'main';\n\n// The metastore has no bulk endpoint; writes are concurrent single POSTs.\nconst WRITE_CONCURRENCY = 5;\n\n/**\n * The live metastore envelope; the types in clients/metastore/repository/types.ts do not match it.\n *\n * - Reads parse it (`./readSchemas`); writes assert it, as the metastore echoes a validated object.\n */\ntype RawSemanticObject<TData> = {\n type: string;\n id: string;\n attributes: TData;\n meta: SemanticObjectMeta;\n};\n\nconst mapObject = <TData>(item: RawSemanticObject<TData>): SemanticObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\n/** The raw `id` of an envelope that failed to parse; `null` means unaddressable. */\nconst envelopeId = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { id } = value as { id?: unknown };\n return typeof id === 'string' && id !== '' ? id : null;\n};\n\n/** The raw `modelUUID` of a dropped envelope; `null` is treated as \"could be any model's\". */\nconst envelopeModelUUID = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { attributes } = value as { attributes?: unknown };\n if (typeof attributes !== 'object' || attributes === null) return null;\n const { modelUUID } = attributes as { modelUUID?: unknown };\n return typeof modelUUID === 'string' && modelUUID !== '' ? modelUUID : null;\n};\n\nconst deriveOptionalObjectName = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.name === 'string') return data.name;\n if (typeof data.term === 'string') return data.term;\n return undefined;\n};\n\nconst deriveObjectName = (data: Record<string, unknown>) =>\n deriveOptionalObjectName(data) ?? generateUUID();\n\n/**\n * The UI label: `displayName ?? name`, matching kbc-ui's constraint tables.\n *\n * - Not used for lookup: `displayName` is not unique.\n */\nconst deriveObjectLabel = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.displayName === 'string' && data.displayName !== '') return data.displayName;\n return deriveOptionalObjectName(data);\n};\n\n/**\n * The value sibling objects reference a child by.\n *\n * - A metric's `dataset` and a relationship's `from`/`to` hold a dataset's `tableId`.\n * - A constraint's `metrics[]` holds metric `name`s, never their `displayName`.\n */\nconst deriveReferenceKey = (\n objectType: SemanticChildObjectType,\n data: Record<string, unknown>,\n): string | undefined => {\n const key =\n objectType === SEMANTIC_OBJECT_TYPE.DATASET\n ? data.tableId\n : objectType === SEMANTIC_OBJECT_TYPE.METRIC\n ? data.name\n : undefined;\n return typeof key === 'string' && key !== '' ? key : undefined;\n};\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createSemanticLayerSdk = ({ metastoreClient }: Options) => {\n /**\n * Every object of one type, parsed rather than asserted.\n *\n * - A malformed element is dropped, logged and reported in `unreadable`; the rest still list.\n * - A response that is not a collection throws rather than reading as empty.\n */\n const _listObjects = async <TData>(\n objectType: SemanticObjectType,\n dataSchema: z.ZodType<TData, unknown>,\n signal?: AbortSignal,\n options: { modelUUID?: string; pendingElevationOnly?: boolean } = {},\n ): Promise<{ objects: SemanticObject<TData>[]; unreadable: SemanticUnreadableObjectRef[] }> => {\n const response = await metastoreClient.repository.getMetaObjects(\n { objectType, ...options },\n signal,\n );\n const items = parseOrThrow(z.array(z.unknown()), response.data);\n const schema = semanticObjectReadSchema(dataSchema);\n\n const objects: SemanticObject<TData>[] = [];\n const unreadable: SemanticUnreadableObjectRef[] = [];\n\n for (const item of items) {\n const result = schema.safeParse(item);\n if (result.success) {\n objects.push(result.data);\n continue;\n }\n\n unreadable.push({\n objectType,\n objectUUID: envelopeId(item),\n modelUUID: envelopeModelUUID(item),\n });\n\n // Never log the payload: it is customer data.\n console.warn(\n `semanticLayerSdk: dropped ${objectType} \"${envelopeId(item) ?? '<no id>'}\" from the ` +\n `metastore response, it does not match its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n }\n\n return { objects, unreadable };\n };\n\n const listModels = async (signal?: AbortSignal) =>\n (await _listObjects(SEMANTIC_OBJECT_TYPE.MODEL, semanticModelReadSchema, signal)).objects;\n\n /**\n * One model by UUID, with the envelope `meta` that carries its `scope`.\n *\n * - A model that does not parse throws a `ValidationError` rather than reading as missing.\n */\n const getModel = async (\n modelUUID: string,\n signal?: AbortSignal,\n ): Promise<SemanticObject<SemanticModelData>> => {\n const response = await metastoreClient.repository.getMetaObject(\n { objectType: SEMANTIC_OBJECT_TYPE.MODEL, UUID: modelUUID },\n signal,\n );\n return parseOrThrow(semanticObjectReadSchema(semanticModelReadSchema), response.data);\n };\n\n const createModel = async (data: SemanticModelData, meta: CreateSemanticObjectMeta = {}) => {\n const response = await metastoreClient.repository.createMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta.\n name: data.name,\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n const updateModel = async (\n modelUUID: string,\n data: Partial<SemanticModelData>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n data,\n ...meta,\n // Derived name wins over meta.\n ...(data.name ? { name: data.name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n /**\n * One child collection scoped to a model.\n *\n * - `unreadable` includes objects whose envelope names this model or no model.\n */\n const _listChildObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n // Server-side filter (every child object schema declares modelUUID x-filterable: true)\n // instead of fetching the type's whole list and filtering client-side.\n const { objects, unreadable } = await _listObjects(\n objectType,\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType],\n signal,\n { modelUUID },\n );\n\n // An unreadable item still needs this client-side check: the server filters by modelUUID on\n // the parsed field it trusts, but a malformed item that failed to parse is exactly the case\n // that field can't be trusted for — so an item naming another model still gets excluded here.\n return {\n objects,\n unreadable: unreadable.filter((ref) => ref.modelUUID === null || ref.modelUUID === modelUUID),\n };\n };\n\n const listObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => (await _listChildObjects(objectType, modelUUID, signal)).objects;\n\n /**\n * `listAllObjects`, plus a ref for every object that did not parse.\n *\n * - An unreadable ref names its model when the envelope still does; `modelUUID: null` otherwise.\n */\n const listAllObjectsWithUnreadable = <T extends SemanticChildObjectType>(\n objectType: T,\n signal?: AbortSignal,\n ) => _listObjects(objectType, SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType], signal);\n\n /**\n * Every object of one child type the project can read, across all its models.\n *\n * - One request instead of one per model — for views that summarise every model at once.\n * - Same visibility as `listModels`: own objects, organization scope and targeted grants.\n */\n const listAllObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n signal?: AbortSignal,\n ) => (await listAllObjectsWithUnreadable(objectType, signal)).objects;\n\n /**\n * A model's child objects by name (`term` for glossary).\n *\n * - Returns every match: names are not unique, the caller decides.\n */\n const findObjectsByName = async <T extends SemanticChildObjectType>(\n objectType: T,\n name: string,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n const objects = await listObjects(objectType, modelUUID, signal);\n return objects.filter((object) => deriveOptionalObjectName(object.data) === name);\n };\n\n const createObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n data: SemanticChildObjectDataMap[T],\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.createMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta.\n name: deriveObjectName(data),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const createObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n items: SemanticChildObjectDataMap[T][],\n meta: CreateSemanticObjectMeta = {},\n ) =>\n concurrent({\n items,\n process: async (data) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n /**\n * Creates a model, then every child concurrently, one request each.\n *\n * - Rejects on the first failed child and leaves the objects already written in place.\n * @deprecated Use `createModel`, then `createObject` or `createObjects`. Removed in the next major.\n */\n const createModelTree = async (\n model: SemanticModelData,\n children: Partial<{\n [T in SemanticChildObjectType]: Omit<SemanticChildObjectDataMap[T], 'modelUUID'>[];\n }>,\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const createdModel = await createModel(model, meta);\n\n const items = MODEL_CHILD_OBJECT_TYPES.flatMap((objectType) =>\n (children[objectType] ?? []).map((data) => ({\n objectType,\n data: {\n ...data,\n modelUUID: createdModel.uuid,\n } satisfies SemanticChildObjectDataMap[typeof objectType],\n })),\n );\n\n const createdChildren = await concurrent({\n items,\n process: async ({ objectType, data }) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n return { model: createdModel, children: createdChildren };\n };\n\n const updateObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n objectUUID: string,\n data: Partial<SemanticChildObjectDataMap[T]>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const name = deriveOptionalObjectName(data);\n const response = await metastoreClient.repository.updateMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n UUID: objectUUID,\n data,\n ...meta,\n // Derived name wins over meta.\n ...(name ? { name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const deleteObject = async (objectType: SemanticChildObjectType, objectUUID: string) => {\n await metastoreClient.repository.deleteMetaObject({\n objectType,\n UUID: objectUUID,\n });\n };\n\n /**\n * Every child object of a model, flattened; `name` is the display label.\n *\n * - Delete confirmations use this to say what a model delete would destroy.\n * - Costs five list requests, one per child type, each server-side filtered to this model.\n * - Throws `SemanticLayerUnreadableChildrenError` rather than degrading — a short list would\n * under-report what a delete destroys.\n */\n const listModelChildren = async (\n modelUUID: string,\n signal?: AbortSignal,\n ): Promise<SemanticModelChildRef[]> => {\n const perType = await Promise.all(\n MODEL_CHILD_OBJECT_TYPES.map(async (objectType) => {\n const { objects, unreadable } = await _listChildObjects(objectType, modelUUID, signal);\n return {\n children: objects.map((object) => {\n const referenceKey = deriveReferenceKey(objectType, object.data);\n return {\n objectType,\n objectUUID: object.uuid,\n name: deriveObjectLabel(object.data),\n ...(referenceKey === undefined ? {} : { referenceKey }),\n };\n }),\n unreadable,\n };\n }),\n );\n\n const unreadable = perType.flatMap((result) => result.unreadable);\n if (unreadable.length > 0) {\n throw new SemanticLayerUnreadableChildrenError({ modelUUID, unreadable });\n }\n\n return perType.flatMap((result) => result.children);\n };\n\n /**\n * Deletes a model; the metastore deletes all its child objects in the same transaction.\n *\n * - `409`: another object holds a `restrict` reference to the model; nothing was deleted.\n * - `404`: no such model, or it was already deleted.\n */\n const deleteModel = async (modelUUID: string) => {\n await metastoreClient.repository.deleteMetaObject({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n });\n };\n\n /**\n * Replace the projects granted read access to a `targeted`-scope object.\n *\n * - An empty array clears every grant.\n * - Read-only is enforced metastore-side.\n */\n const replaceTargetProjects = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n targetProjectIds: number[],\n ) => {\n await metastoreClient.repository.replaceTargetProjects({\n objectType,\n UUID: objectUUID,\n targetProjectIds,\n });\n };\n\n /**\n * Step a project-scoped object up to the organization scope, keeping its UUID and history.\n *\n * - Requires the organization-admin role for the target org; callers should surface the\n * metastore's 403 rather than pre-empt it.\n * - `dropSourceProject` opts out of recording the pre-promotion `projectId` as\n * `sourceProjectId`; omitted (the default), the source project is preserved.\n */\n const promoteToOrganizationScope = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n options: { dropSourceProject?: boolean } = {},\n ) => {\n // Scope ONLY (plus the optional drop flag). No `data`, not even `{}`: the metastore's\n // step-up guard rejects a PATCH that also carries name or data, and `Data *JSONData` treats\n // `{}` as present — which 400s with \"A scope change cannot be combined with name or data\n // changes\".\n const response = await metastoreClient.repository.updateMetaObject({\n objectType,\n UUID: objectUUID,\n scope: 'organization',\n ...(options.dropSourceProject !== undefined\n ? { dropSourceProject: options.dropSourceProject }\n : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<Record<string, unknown>>);\n };\n\n /**\n * Flag a `project`-scope object as awaiting an organization admin's decision to promote it.\n * Only the owning project may call this; idempotent — requesting again just refreshes the\n * timestamp rather than erroring.\n */\n const requestScopeElevation = async (objectType: SemanticObjectType, objectUUID: string) => {\n await metastoreClient.repository.requestScopeElevation({ objectType, UUID: objectUUID });\n };\n\n /**\n * Clear a pending scope-elevation request, whether withdrawn by the owner or declined by an\n * organization admin. Idempotent — clearing an object with no pending request is a no-op.\n */\n const withdrawScopeElevationRequest = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n ) => {\n await metastoreClient.repository.withdrawScopeElevationRequest({\n objectType,\n UUID: objectUUID,\n });\n };\n\n /**\n * Every object of `objectType`, across every project in the organization, currently awaiting an\n * org-admin's elevation decision. Backs the org-admin pending-elevation banner.\n */\n const listPendingScopeElevationRequests = async (\n objectType: SemanticObjectType,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getPendingScopeElevationRequests<\n Record<string, unknown>\n >({ objectType }, signal);\n return (response.data as unknown as RawSemanticObject<Record<string, unknown>>[]).map(\n mapObject,\n );\n };\n\n /**\n * The current project's own objects with a pending scope-elevation request — for the\n * requester, as opposed to `listPendingScopeElevationRequests`, which is the org-admin's\n * org-wide approval queue. Uses the regular (per-project) list endpoint, not `/organization`:\n * only project-scope objects can have a pending request, and only their owner can set one, so\n * filtering the objects this project can already see is sufficient — no org-wide access needed.\n */\n const listMyPendingScopeElevationRequests = async (\n objectType: SemanticObjectType,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<Record<string, unknown>>(\n { objectType, pendingElevationOnly: true },\n signal,\n );\n return (response.data as unknown as RawSemanticObject<Record<string, unknown>>[]).map(\n mapObject,\n );\n };\n\n return {\n // models\n listModels,\n getModel,\n createModel,\n updateModel,\n deleteModel,\n listModelChildren,\n\n // child objects (datasets, metrics, relationships, glossary, constraints)\n listObjects,\n listAllObjects,\n listAllObjectsWithUnreadable,\n findObjectsByName,\n createObject,\n createObjects,\n createModelTree,\n updateObject,\n deleteObject,\n\n // scoping / sharing\n replaceTargetProjects,\n promoteToOrganizationScope,\n requestScopeElevation,\n withdrawScopeElevationRequest,\n listPendingScopeElevationRequests,\n listMyPendingScopeElevationRequests,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ // src/constants/serviceIds.ts
2
+ /**
3
+ * Every service a Keboola stack can announce in its `GET /v2/storage` index.
4
+ *
5
+ * - The values are the `id`s the stack reports; the service-client registry and `createStack`'s
6
+ * lookups narrow on them. The index itself stays `string` — a stack may announce more.
7
+ * - Callers enumerate them at runtime — a test double announcing every service, for one.
8
+ */
9
+ const ServiceId = {
10
+ Vault: "vault",
11
+ DataScience: "data-science",
12
+ Encryption: "encryption",
13
+ Telemetry: "telemetry",
14
+ Ai: "ai",
15
+ Editor: "editor",
16
+ Import: "import",
17
+ Oauth: "oauth",
18
+ Query: "query",
19
+ Queue: "queue",
20
+ KaiAssistant: "kai-assistant",
21
+ KaiAgent: "kai-agent",
22
+ ComponentsMcp: "components-mcp",
23
+ SyncActions: "sync-actions",
24
+ Stream: "stream",
25
+ Notification: "notification",
26
+ Scheduler: "scheduler",
27
+ Metastore: "metastore",
28
+ Billing: "billing"
29
+ };
30
+ Object.defineProperty(exports, "ServiceId", {
31
+ enumerable: true,
32
+ get: function() {
33
+ return ServiceId;
34
+ }
35
+ });
36
+
37
+ //# sourceMappingURL=serviceIds-Bg1pWiPE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceIds-Bg1pWiPE.cjs","names":[],"sources":["../src/constants/serviceIds.ts"],"sourcesContent":["/**\n * Every service a Keboola stack can announce in its `GET /v2/storage` index.\n *\n * - The values are the `id`s the stack reports; the service-client registry and `createStack`'s\n * lookups narrow on them. The index itself stays `string` — a stack may announce more.\n * - Callers enumerate them at runtime — a test double announcing every service, for one.\n */\nexport const ServiceId = {\n Vault: 'vault',\n DataScience: 'data-science',\n Encryption: 'encryption',\n Telemetry: 'telemetry',\n Ai: 'ai',\n Editor: 'editor',\n Import: 'import',\n Oauth: 'oauth',\n Query: 'query',\n Queue: 'queue',\n KaiAssistant: 'kai-assistant',\n KaiAgent: 'kai-agent',\n ComponentsMcp: 'components-mcp',\n SyncActions: 'sync-actions',\n Stream: 'stream',\n Notification: 'notification',\n Scheduler: 'scheduler',\n Metastore: 'metastore',\n Billing: 'billing',\n} as const;\n\nexport type ServiceId = (typeof ServiceId)[keyof typeof ServiceId];\n"],"mappings":";;;;;;;;AAOA,MAAa,YAAY;CACvB,OAAO;CACP,aAAa;CACb,YAAY;CACZ,WAAW;CACX,IAAI;CACJ,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,OAAO;CACP,cAAc;CACd,UAAU;CACV,eAAe;CACf,aAAa;CACb,QAAQ;CACR,cAAc;CACd,WAAW;CACX,WAAW;CACX,SAAS;AACX"}