@keboola/api-client 36.0.0 → 40.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 (529) hide show
  1. package/AGENTS.md +133 -103
  2. package/API-SURFACE.md +36 -2
  3. package/CHANGELOG.md +194 -0
  4. package/README.md +22 -20
  5. package/dist/{ManagementClientAuthError-DD4u0EU7.cjs → ManagementClientAuthError-DE7lNGZQ.cjs} +3 -2
  6. package/dist/{ManagementClientAuthError-DD4u0EU7.cjs.map → ManagementClientAuthError-DE7lNGZQ.cjs.map} +1 -1
  7. package/dist/{ManagementClientAuthError-ey-f03vy.js → ManagementClientAuthError-H30lti_Q.js} +3 -2
  8. package/dist/{ManagementClientAuthError-ey-f03vy.js.map → ManagementClientAuthError-H30lti_Q.js.map} +1 -1
  9. package/dist/{ValidationError-CLVJCCwH.cjs → ValidationError-D65QU0uq.cjs} +10 -16
  10. package/dist/ValidationError-D65QU0uq.cjs.map +1 -0
  11. package/dist/ValidationError-DjhtNMfZ.js +42 -0
  12. package/dist/ValidationError-DjhtNMfZ.js.map +1 -0
  13. package/dist/ai/index.cjs +2 -2
  14. package/dist/ai/index.d.cts +2 -2
  15. package/dist/ai/index.d.ts +2 -2
  16. package/dist/ai/index.js +2 -2
  17. package/dist/ai/types.d.cts +1 -1
  18. package/dist/ai/types.d.ts +1 -1
  19. package/dist/{appLogs-BjfUoWzs.cjs → appLogs-B9zFJIuy.cjs} +2 -2
  20. package/dist/{appLogs-BjfUoWzs.cjs.map → appLogs-B9zFJIuy.cjs.map} +1 -1
  21. package/dist/{appLogs-xsVkTriU.js → appLogs-BBkkUOW1.js} +2 -2
  22. package/dist/{appLogs-xsVkTriU.js.map → appLogs-BBkkUOW1.js.map} +1 -1
  23. package/dist/{appLogs-Ch7DYpzx.d.ts → appLogs-BS6ViVGR.d.ts} +2 -2
  24. package/dist/{appLogs-D5A13Y0y.d.cts → appLogs-C9YlJ2g8.d.cts} +2 -2
  25. package/dist/apps/index.cjs +30 -56
  26. package/dist/apps/index.cjs.map +1 -1
  27. package/dist/apps/index.d.cts +8 -13
  28. package/dist/apps/index.d.ts +8 -13
  29. package/dist/apps/index.js +30 -56
  30. package/dist/apps/index.js.map +1 -1
  31. package/dist/apps/types.d.cts +2 -2
  32. package/dist/apps/types.d.ts +2 -2
  33. package/dist/assets/index.cjs +1 -1
  34. package/dist/assets/index.d.cts +1 -1
  35. package/dist/assets/index.d.ts +1 -1
  36. package/dist/assets/index.js +1 -1
  37. package/dist/auth/index.cjs +8 -4
  38. package/dist/auth/index.d.cts +2 -2
  39. package/dist/auth/index.d.ts +2 -2
  40. package/dist/auth/index.js +2 -2
  41. package/dist/auth/types.d.cts +2 -2
  42. package/dist/auth/types.d.ts +2 -2
  43. package/dist/{auth-JQ33o3nU.cjs → auth-Dm0F2rOh.cjs} +2 -2
  44. package/dist/{auth-JQ33o3nU.cjs.map → auth-Dm0F2rOh.cjs.map} +1 -1
  45. package/dist/{auth-aItmDu45.js → auth-DworfoPy.js} +2 -2
  46. package/dist/{auth-aItmDu45.js.map → auth-DworfoPy.js.map} +1 -1
  47. package/dist/{authClient-_PpvGgZJ.cjs → authClient-BmuUo0J4.cjs} +141 -48
  48. package/dist/authClient-BmuUo0J4.cjs.map +1 -0
  49. package/dist/{authClient-D8i3JTM-.d.ts → authClient-CHXWJ9x3.d.ts} +109 -76
  50. package/dist/{authClient-D7W9vWPR.js → authClient-CgcDGd30.js} +108 -39
  51. package/dist/authClient-CgcDGd30.js.map +1 -0
  52. package/dist/{authClient-CTHNs6Tq.d.cts → authClient-vEt_7_uk.d.cts} +109 -76
  53. package/dist/billing/index.cjs +2 -2
  54. package/dist/billing/index.d.cts +1 -1
  55. package/dist/billing/index.d.ts +1 -1
  56. package/dist/billing/index.js +2 -2
  57. package/dist/billing/types.d.cts +1 -1
  58. package/dist/billing/types.d.ts +1 -1
  59. package/dist/businessWorkspaceApi/index.cjs +3 -0
  60. package/dist/businessWorkspaceApi/index.d.cts +2 -0
  61. package/dist/businessWorkspaceApi/index.d.ts +2 -0
  62. package/dist/businessWorkspaceApi/index.js +2 -0
  63. package/dist/businessWorkspaceApi/types.cjs +0 -0
  64. package/dist/businessWorkspaceApi/types.d.cts +2 -0
  65. package/dist/businessWorkspaceApi/types.d.ts +2 -0
  66. package/dist/businessWorkspaceApi/types.js +1 -0
  67. package/dist/businessWorkspaceApi-6tCDdpnY.cjs +66 -0
  68. package/dist/businessWorkspaceApi-6tCDdpnY.cjs.map +1 -0
  69. package/dist/businessWorkspaceApi-BLUdefRF.js +61 -0
  70. package/dist/businessWorkspaceApi-BLUdefRF.js.map +1 -0
  71. package/dist/businessWorkspaceApiClient-BHDJlHFo.d.cts +529 -0
  72. package/dist/businessWorkspaceApiClient-DI-z1VIH.d.ts +529 -0
  73. package/dist/chat/index.cjs +9 -5
  74. package/dist/chat/index.cjs.map +1 -1
  75. package/dist/chat/index.d.cts +3 -3
  76. package/dist/chat/index.d.ts +3 -3
  77. package/dist/chat/index.js +9 -5
  78. package/dist/chat/index.js.map +1 -1
  79. package/dist/chat/types.cjs +1 -3
  80. package/dist/chat/types.cjs.map +1 -1
  81. package/dist/chat/types.d.cts +2 -2
  82. package/dist/chat/types.d.ts +2 -2
  83. package/dist/chat/types.js +1 -3
  84. package/dist/chat/types.js.map +1 -1
  85. package/dist/{componentId-DkyQ8PM0.cjs → componentId-57vjsa2i.cjs} +4 -2
  86. package/dist/{componentId-DkyQ8PM0.cjs.map → componentId-57vjsa2i.cjs.map} +1 -1
  87. package/dist/{componentId-vJz-kWs6.js → componentId-C6WZa_R1.js} +4 -2
  88. package/dist/{componentId-vJz-kWs6.js.map → componentId-C6WZa_R1.js.map} +1 -1
  89. package/dist/{concurrent-CH9fbNr3.js → concurrent-BacWxPwi.js} +5 -7
  90. package/dist/concurrent-BacWxPwi.js.map +1 -0
  91. package/dist/{concurrent-tbiIa0UL.cjs → concurrent-CdVfR1N5.cjs} +5 -7
  92. package/dist/concurrent-CdVfR1N5.cjs.map +1 -0
  93. package/dist/{configurations-VtNE0nrT.js → configurations-BPKGGy-M.js} +14 -22
  94. package/dist/configurations-BPKGGy-M.js.map +1 -0
  95. package/dist/{configurations-CyFF9Dtu.cjs → configurations-BTRHVSRq.cjs} +20 -53
  96. package/dist/configurations-BTRHVSRq.cjs.map +1 -0
  97. package/dist/{configurations-BVvcimzo.js → configurations-Chg_JwJ1.js} +20 -53
  98. package/dist/configurations-Chg_JwJ1.js.map +1 -0
  99. package/dist/{configurations-zkNjr73Q.cjs → configurations-IYyOvhI3.cjs} +14 -22
  100. package/dist/configurations-IYyOvhI3.cjs.map +1 -0
  101. package/dist/constants/index.cjs +2 -2
  102. package/dist/constants/index.d.cts +2 -2
  103. package/dist/constants/index.d.ts +2 -2
  104. package/dist/constants/index.js +2 -2
  105. package/dist/{constants-wfbFsqqN.js → constants-C2tYAJSj.js} +10 -1
  106. package/dist/constants-C2tYAJSj.js.map +1 -0
  107. package/dist/{constants-C4DlsF_M.cjs → constants-C6xku_Vx.cjs} +10 -1
  108. package/dist/constants-C6xku_Vx.cjs.map +1 -0
  109. package/dist/{createFetchClient-DgMiqTJ8.cjs → createFetchClient-Cwp8max9.cjs} +24 -5
  110. package/dist/createFetchClient-Cwp8max9.cjs.map +1 -0
  111. package/dist/{createFetchClient-U-ZrwPl2.js → createFetchClient-DXHQK63w.js} +24 -5
  112. package/dist/createFetchClient-DXHQK63w.js.map +1 -0
  113. package/dist/{createGenericFetchClient-rxvUUbap.js → createGenericFetchClient-Dg1rgzmG.js} +2 -2
  114. package/dist/{createGenericFetchClient-rxvUUbap.js.map → createGenericFetchClient-Dg1rgzmG.js.map} +1 -1
  115. package/dist/{createGenericFetchClient-o3cPJeRn.cjs → createGenericFetchClient-Dl9cqTvR.cjs} +2 -2
  116. package/dist/{createGenericFetchClient-o3cPJeRn.cjs.map → createGenericFetchClient-Dl9cqTvR.cjs.map} +1 -1
  117. package/dist/{createOpenapiFetchClient-DhUU3M1W.cjs → createOpenapiFetchClient-BYqW-9tm.cjs} +2 -2
  118. package/dist/{createOpenapiFetchClient-DhUU3M1W.cjs.map → createOpenapiFetchClient-BYqW-9tm.cjs.map} +1 -1
  119. package/dist/{createOpenapiFetchClient-BVSc9ibR.js → createOpenapiFetchClient-DZUOVupy.js} +2 -2
  120. package/dist/{createOpenapiFetchClient-BVSc9ibR.js.map → createOpenapiFetchClient-DZUOVupy.js.map} +1 -1
  121. package/dist/dataScience/index.cjs +2 -2
  122. package/dist/dataScience/index.d.cts +2 -2
  123. package/dist/dataScience/index.d.ts +2 -2
  124. package/dist/dataScience/index.js +2 -2
  125. package/dist/dataScience/types.d.cts +2 -2
  126. package/dist/dataScience/types.d.ts +2 -2
  127. package/dist/{dataScience-0Rl_EuV_.cjs → dataScience-B5QxZnvW.cjs} +5 -5
  128. package/dist/{dataScience-0Rl_EuV_.cjs.map → dataScience-B5QxZnvW.cjs.map} +1 -1
  129. package/dist/{dataScience-C1gO5zUn.js → dataScience-OXcwdk1p.js} +5 -5
  130. package/dist/{dataScience-C1gO5zUn.js.map → dataScience-OXcwdk1p.js.map} +1 -1
  131. package/dist/dedupe-Cky1gSUu.js +21 -0
  132. package/dist/dedupe-Cky1gSUu.js.map +1 -0
  133. package/dist/dedupe-OSnnst2u.cjs +26 -0
  134. package/dist/dedupe-OSnnst2u.cjs.map +1 -0
  135. package/dist/developerPortal/index.cjs +1 -1
  136. package/dist/developerPortal/index.d.cts +2 -2
  137. package/dist/developerPortal/index.d.ts +2 -2
  138. package/dist/developerPortal/index.js +1 -1
  139. package/dist/developerPortal/types.d.cts +1 -1
  140. package/dist/developerPortal/types.d.ts +1 -1
  141. package/dist/{developerPortalClient-C_48z8BN.js → developerPortalClient-B1QZ1rYi.js} +6 -8
  142. package/dist/{developerPortalClient-C_48z8BN.js.map → developerPortalClient-B1QZ1rYi.js.map} +1 -1
  143. package/dist/{developerPortalClient-ki0XS_OD.cjs → developerPortalClient-CLPpBksD.cjs} +6 -8
  144. package/dist/{developerPortalClient-ki0XS_OD.cjs.map → developerPortalClient-CLPpBksD.cjs.map} +1 -1
  145. package/dist/domain/permissions/index.cjs +9 -30
  146. package/dist/domain/permissions/index.cjs.map +1 -1
  147. package/dist/domain/permissions/index.d.cts +29 -102
  148. package/dist/domain/permissions/index.d.ts +29 -102
  149. package/dist/domain/permissions/index.js +9 -30
  150. package/dist/domain/permissions/index.js.map +1 -1
  151. package/dist/domain/storageTable/index.d.cts +1 -1
  152. package/dist/domain/storageTable/index.d.ts +1 -1
  153. package/dist/editor/index.cjs +2 -2
  154. package/dist/editor/index.cjs.map +1 -1
  155. package/dist/editor/index.d.cts +2 -2
  156. package/dist/editor/index.d.ts +2 -2
  157. package/dist/editor/index.js +2 -2
  158. package/dist/editor/index.js.map +1 -1
  159. package/dist/editor/types.d.cts +1 -1
  160. package/dist/editor/types.d.ts +1 -1
  161. package/dist/encryption/index.cjs +2 -22
  162. package/dist/encryption/index.cjs.map +1 -1
  163. package/dist/encryption/index.d.cts +1 -1
  164. package/dist/encryption/index.d.ts +1 -1
  165. package/dist/encryption/index.js +2 -22
  166. package/dist/encryption/index.js.map +1 -1
  167. package/dist/encryption/types.d.cts +1 -1
  168. package/dist/encryption/types.d.ts +1 -1
  169. package/dist/import/index.cjs +1 -1
  170. package/dist/import/index.d.cts +3 -3
  171. package/dist/import/index.d.ts +3 -3
  172. package/dist/import/index.js +1 -1
  173. package/dist/{import-C83w7BKz.cjs → import-CNk89mqy.cjs} +3 -3
  174. package/dist/{import-C83w7BKz.cjs.map → import-CNk89mqy.cjs.map} +1 -1
  175. package/dist/{import-CROEK82b.js → import-DiMQCzLa.js} +3 -3
  176. package/dist/{import-CROEK82b.js.map → import-DiMQCzLa.js.map} +1 -1
  177. package/dist/{index-DR4QqItd.d.cts → index--ZpnE3YT.d.cts} +3 -3
  178. package/dist/{index-C77vTm2K.d.ts → index-BDZvaRud.d.ts} +6 -6
  179. package/dist/{index-KuQ79Mnz.d.ts → index-BVhHt5lx.d.cts} +18 -26
  180. package/dist/{index-NC1dXRTD.d.ts → index-BfqkgPGI.d.cts} +7 -13
  181. package/dist/{index-NC1dXRTD.d.cts → index-BfqkgPGI.d.ts} +7 -13
  182. package/dist/{index-V7XKUQm9.d.cts → index-BgR5zcjJ.d.ts} +18 -26
  183. package/dist/{index-2JM0gyAf.d.ts → index-BkqackZf.d.ts} +439 -289
  184. package/dist/{index-BDG-LKXj.d.cts → index-ByRpNVcs.d.cts} +88 -18
  185. package/dist/{index-pXN4LWUX.d.ts → index-C11JSxBY.d.ts} +8 -11
  186. package/dist/{index-GjcJTCbz.d.cts → index-C4TNAA8-.d.cts} +8 -11
  187. package/dist/{index-NaYLwG_h.d.cts → index-C8gRRWHL.d.cts} +11 -1
  188. package/dist/{index-NaYLwG_h.d.ts → index-C8gRRWHL.d.ts} +11 -1
  189. package/dist/{index-3LUk2rpD.d.ts → index-CPu4Nezo.d.cts} +34 -9
  190. package/dist/{index-BMqLPS6S.d.ts → index-CXcWpZQ2.d.cts} +4 -12
  191. package/dist/{index-BMqLPS6S.d.cts → index-CXcWpZQ2.d.ts} +4 -12
  192. package/dist/{index-Dx52hNLP.d.cts → index-CcMHJcuP.d.cts} +3 -3
  193. package/dist/{index-BgLnWTZU.d.cts → index-Cvbjp3jx.d.cts} +6 -6
  194. package/dist/{index-DppA4k3b.d.cts → index-Cz0MXhzs.d.cts} +5 -5
  195. package/dist/{index-6Xe81qN3.d.ts → index-D-VMgpGc.d.ts} +5 -5
  196. package/dist/{index-D8rcUbnk.d.ts → index-D7-o-oGa.d.ts} +3 -3
  197. package/dist/{index-BXF-bs2d.d.ts → index-DCRKjihs.d.ts} +88 -18
  198. package/dist/{kaiAgentClient-DhTaM3GC.d.cts → index-DNThyEej.d.cts} +19 -5
  199. package/dist/{index-DXSmFkol.d.cts → index-DOAZmWvh.d.cts} +6 -6
  200. package/dist/{index-DIAyi-EZ.d.cts → index-DXYASsPP.d.cts} +439 -289
  201. package/dist/{index-BuegqrS1.d.ts → index-D_-4uQF8.d.ts} +3 -3
  202. package/dist/{index-CW3Pj7DY.d.cts → index-Dazy-meb.d.ts} +34 -9
  203. package/dist/{index-CqgtL2NU.d.ts → index-DnQTuc6t.d.ts} +6 -6
  204. package/dist/{kaiAgentClient-BJj_2aqt.d.ts → index-Qb7X6-ph.d.ts} +19 -5
  205. package/dist/index.cjs +1503 -895
  206. package/dist/index.cjs.map +1 -1
  207. package/dist/index.d.cts +7 -7
  208. package/dist/index.d.ts +7 -7
  209. package/dist/index.js +1501 -896
  210. package/dist/index.js.map +1 -1
  211. package/dist/isLoginPageRedirect-XPwAOKK3.js +14 -0
  212. package/dist/isLoginPageRedirect-XPwAOKK3.js.map +1 -0
  213. package/dist/isLoginPageRedirect-jQHiLrG7.cjs +19 -0
  214. package/dist/isLoginPageRedirect-jQHiLrG7.cjs.map +1 -0
  215. package/dist/{jobStatus-0_Y3Sr4i.cjs → jobStatus-BMlsyXWI.cjs} +19 -45
  216. package/dist/jobStatus-BMlsyXWI.cjs.map +1 -0
  217. package/dist/{jobStatus-PSZJMTiA.js → jobStatus-CfRtsIpv.js} +19 -45
  218. package/dist/jobStatus-CfRtsIpv.js.map +1 -0
  219. package/dist/kaiAgent/index.cjs +1 -1
  220. package/dist/kaiAgent/index.d.cts +3 -2
  221. package/dist/kaiAgent/index.d.ts +3 -2
  222. package/dist/kaiAgent/index.js +1 -1
  223. package/dist/kaiAgent/types.d.cts +2 -2
  224. package/dist/kaiAgent/types.d.ts +2 -2
  225. package/dist/{kaiAgent-8LNzGhZc.js → kaiAgent-Dp20HLTh.js} +63 -7
  226. package/dist/kaiAgent-Dp20HLTh.js.map +1 -0
  227. package/dist/{kaiAgent-B_TaUPRt.cjs → kaiAgent-QNoeVKPs.cjs} +63 -7
  228. package/dist/kaiAgent-QNoeVKPs.cjs.map +1 -0
  229. package/dist/kaiMemory-CClSPInt.cjs +289 -0
  230. package/dist/kaiMemory-CClSPInt.cjs.map +1 -0
  231. package/dist/kaiMemory-D0Y_16U4.js +260 -0
  232. package/dist/kaiMemory-D0Y_16U4.js.map +1 -0
  233. package/dist/management/index.cjs +1 -1
  234. package/dist/management/index.d.cts +2 -2
  235. package/dist/management/index.d.ts +2 -2
  236. package/dist/management/index.js +1 -1
  237. package/dist/management/types.d.cts +2 -2
  238. package/dist/management/types.d.ts +2 -2
  239. package/dist/{management-BoxlRNg2.cjs → management-CCY0IYnq.cjs} +93 -25
  240. package/dist/management-CCY0IYnq.cjs.map +1 -0
  241. package/dist/{management-Bp440RsV.js → management-DvmPiG64.js} +93 -25
  242. package/dist/management-DvmPiG64.js.map +1 -0
  243. package/dist/metastore/index.cjs +1 -1
  244. package/dist/metastore/index.d.cts +1 -1
  245. package/dist/metastore/index.d.ts +1 -1
  246. package/dist/metastore/index.js +1 -1
  247. package/dist/metastore/types.d.cts +2 -2
  248. package/dist/metastore/types.d.ts +2 -2
  249. package/dist/{metastore-VCDRVhUT.js → metastore-BycJxe7A.js} +14 -8
  250. package/dist/metastore-BycJxe7A.js.map +1 -0
  251. package/dist/{metastore-BYYWTb3m.cjs → metastore-XtWciCZT.cjs} +14 -8
  252. package/dist/metastore-XtWciCZT.cjs.map +1 -0
  253. package/dist/microsoftGraph/index.cjs +2 -2
  254. package/dist/microsoftGraph/index.d.cts +2 -2
  255. package/dist/microsoftGraph/index.d.ts +2 -2
  256. package/dist/microsoftGraph/index.js +2 -2
  257. package/dist/microsoftGraph/types.d.cts +1 -1
  258. package/dist/microsoftGraph/types.d.ts +1 -1
  259. package/dist/middleware-CBwrtgQd.js +34 -0
  260. package/dist/middleware-CBwrtgQd.js.map +1 -0
  261. package/dist/middleware-IjYx3d5u.cjs +45 -0
  262. package/dist/middleware-IjYx3d5u.cjs.map +1 -0
  263. package/dist/notifications/index.cjs +4 -4
  264. package/dist/notifications/index.d.cts +2 -2
  265. package/dist/notifications/index.d.ts +2 -2
  266. package/dist/notifications/index.js +4 -4
  267. package/dist/notifications/types.d.cts +1 -1
  268. package/dist/notifications/types.d.ts +1 -1
  269. package/dist/oauth/index.cjs +1 -1
  270. package/dist/oauth/index.d.cts +2 -2
  271. package/dist/oauth/index.d.ts +2 -2
  272. package/dist/oauth/index.js +1 -1
  273. package/dist/oauth/types.d.cts +1 -1
  274. package/dist/oauth/types.d.ts +1 -1
  275. package/dist/{oauth-B8yqG6Sy.cjs → oauth--2p8jkJf.cjs} +5 -5
  276. package/dist/{oauth-B8yqG6Sy.cjs.map → oauth--2p8jkJf.cjs.map} +1 -1
  277. package/dist/{oauth--asfePw-.js → oauth-l5zE39cD.js} +5 -5
  278. package/dist/{oauth--asfePw-.js.map → oauth-l5zE39cD.js.map} +1 -1
  279. package/dist/omnisearch/index.cjs +6 -14
  280. package/dist/omnisearch/index.cjs.map +1 -1
  281. package/dist/omnisearch/index.d.cts +6 -14
  282. package/dist/omnisearch/index.d.ts +6 -14
  283. package/dist/omnisearch/index.js +6 -14
  284. package/dist/omnisearch/index.js.map +1 -1
  285. package/dist/omnisearch/types.d.cts +1 -1
  286. package/dist/omnisearch/types.d.ts +1 -1
  287. package/dist/{project-C2wvX0xZ.d.ts → project-B15gStbM.d.ts} +2 -2
  288. package/dist/{project-hePfzUY0.d.cts → project-cHKuGvqJ.d.cts} +2 -2
  289. package/dist/queryService/index.cjs +1 -1
  290. package/dist/queryService/index.d.cts +1 -1
  291. package/dist/queryService/index.d.ts +1 -1
  292. package/dist/queryService/index.js +1 -1
  293. package/dist/queryService/types.d.cts +1 -1
  294. package/dist/queryService/types.d.ts +1 -1
  295. package/dist/{queryService-Ca65E5KH.js → queryService-CCOYbRbw.js} +6 -6
  296. package/dist/{queryService-Ca65E5KH.js.map → queryService-CCOYbRbw.js.map} +1 -1
  297. package/dist/{queryService-BVtjkXy1.cjs → queryService-CQzclHdL.cjs} +6 -6
  298. package/dist/{queryService-BVtjkXy1.cjs.map → queryService-CQzclHdL.cjs.map} +1 -1
  299. package/dist/queue/index.cjs +1 -1
  300. package/dist/queue/index.d.cts +3 -3
  301. package/dist/queue/index.d.ts +3 -3
  302. package/dist/queue/index.js +1 -1
  303. package/dist/queue/types.d.cts +1 -1
  304. package/dist/queue/types.d.ts +1 -1
  305. package/dist/{queue-DyotLFJi.js → queue-Cowbg6bR.js} +8 -11
  306. package/dist/queue-Cowbg6bR.js.map +1 -0
  307. package/dist/{queue-OJJUUqc2.cjs → queue-UG_BWKIC.cjs} +8 -11
  308. package/dist/queue-UG_BWKIC.cjs.map +1 -0
  309. package/dist/scheduler/index.cjs +4 -4
  310. package/dist/scheduler/index.d.cts +2 -2
  311. package/dist/scheduler/index.d.ts +2 -2
  312. package/dist/scheduler/index.js +4 -4
  313. package/dist/scheduler/types.d.cts +1 -1
  314. package/dist/scheduler/types.d.ts +1 -1
  315. package/dist/sdk/configurations/index.cjs +1 -1
  316. package/dist/sdk/configurations/index.d.cts +11 -11
  317. package/dist/sdk/configurations/index.d.ts +11 -11
  318. package/dist/sdk/configurations/index.js +1 -1
  319. package/dist/sdk/developerPortal/index.cjs +10 -18
  320. package/dist/sdk/developerPortal/index.cjs.map +1 -1
  321. package/dist/sdk/developerPortal/index.d.cts +7 -15
  322. package/dist/sdk/developerPortal/index.d.ts +7 -15
  323. package/dist/sdk/developerPortal/index.js +7 -15
  324. package/dist/sdk/developerPortal/index.js.map +1 -1
  325. package/dist/sdk/kaiMemory/index.cjs +7 -0
  326. package/dist/sdk/kaiMemory/index.d.cts +41 -0
  327. package/dist/sdk/kaiMemory/index.d.ts +41 -0
  328. package/dist/sdk/kaiMemory/index.js +2 -0
  329. package/dist/sdk/kaiMemory/types.cjs +0 -0
  330. package/dist/sdk/kaiMemory/types.d.cts +2 -0
  331. package/dist/sdk/kaiMemory/types.d.ts +2 -0
  332. package/dist/sdk/kaiMemory/types.js +1 -0
  333. package/dist/sdk/queryService/index.cjs +2 -2
  334. package/dist/sdk/queryService/index.d.cts +1 -1
  335. package/dist/sdk/queryService/index.d.ts +1 -1
  336. package/dist/sdk/queryService/index.js +2 -2
  337. package/dist/sdk/semanticLayer/index.cjs +1 -1
  338. package/dist/sdk/semanticLayer/index.d.cts +16 -40
  339. package/dist/sdk/semanticLayer/index.d.ts +16 -40
  340. package/dist/sdk/semanticLayer/index.js +1 -1
  341. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  342. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  343. package/dist/sdk/storage/index.cjs +0 -5
  344. package/dist/sdk/storage/index.cjs.map +1 -1
  345. package/dist/sdk/storage/index.d.cts +2 -2
  346. package/dist/sdk/storage/index.d.ts +2 -2
  347. package/dist/sdk/storage/index.js +1 -5
  348. package/dist/sdk/storage/index.js.map +1 -1
  349. package/dist/sdk/tag/index.cjs +1 -1
  350. package/dist/sdk/tag/index.d.cts +3 -3
  351. package/dist/sdk/tag/index.d.ts +3 -3
  352. package/dist/sdk/tag/index.js +1 -1
  353. package/dist/sdk/tag/types.d.cts +1 -1
  354. package/dist/sdk/tag/types.d.ts +1 -1
  355. package/dist/sdk/vault/index.cjs +1 -1
  356. package/dist/sdk/vault/index.d.cts +1 -1
  357. package/dist/sdk/vault/index.d.ts +1 -1
  358. package/dist/sdk/vault/index.js +1 -1
  359. package/dist/{semanticLayer-E0Vilu8u.cjs → semanticLayer-CKDVkU56.cjs} +78 -166
  360. package/dist/semanticLayer-CKDVkU56.cjs.map +1 -0
  361. package/dist/{semanticLayer-CSqmtHRo.js → semanticLayer-pYy082Ju.js} +78 -166
  362. package/dist/semanticLayer-pYy082Ju.js.map +1 -0
  363. package/dist/{serviceIds-DRcoTnSd.d.cts → serviceIds-DC-H6ZD9.d.cts} +2 -1
  364. package/dist/{serviceIds-DRcoTnSd.d.ts → serviceIds-DC-H6ZD9.d.ts} +2 -1
  365. package/dist/status/index.cjs +1 -1
  366. package/dist/status/index.d.cts +1 -1
  367. package/dist/status/index.d.ts +1 -1
  368. package/dist/status/index.js +1 -1
  369. package/dist/storage/index.cjs +6 -5
  370. package/dist/storage/index.d.cts +3 -3
  371. package/dist/storage/index.d.ts +3 -3
  372. package/dist/storage/index.js +6 -6
  373. package/dist/storage/types.d.cts +3 -3
  374. package/dist/storage/types.d.ts +3 -3
  375. package/dist/{storage-LYwFQPNO.js → storage-CZQHZcXG.js} +127 -289
  376. package/dist/storage-CZQHZcXG.js.map +1 -0
  377. package/dist/{storage-BKm7cztt.cjs → storage-JinL1y1s.cjs} +132 -288
  378. package/dist/storage-JinL1y1s.cjs.map +1 -0
  379. package/dist/stream/index.cjs +3 -3
  380. package/dist/stream/index.d.cts +2 -2
  381. package/dist/stream/index.d.ts +2 -2
  382. package/dist/stream/index.js +3 -3
  383. package/dist/stream/types.d.cts +1 -1
  384. package/dist/stream/types.d.ts +1 -1
  385. package/dist/syncActions/index.cjs +1 -1
  386. package/dist/syncActions/index.d.cts +1 -1
  387. package/dist/syncActions/index.d.ts +1 -1
  388. package/dist/syncActions/index.js +1 -1
  389. package/dist/syncActions/types.d.cts +2 -2
  390. package/dist/syncActions/types.d.ts +2 -2
  391. package/dist/{syncActions-QeBhIVhG.js → syncActions-BmmoqZO_.js} +130 -111
  392. package/dist/syncActions-BmmoqZO_.js.map +1 -0
  393. package/dist/{syncActions-OEZdVffK.cjs → syncActions-CtcLGQiy.cjs} +130 -111
  394. package/dist/syncActions-CtcLGQiy.cjs.map +1 -0
  395. package/dist/{tag-CsoOZWB_.cjs → tag-DHS_soa7.cjs} +2 -2
  396. package/dist/{tag-CsoOZWB_.cjs.map → tag-DHS_soa7.cjs.map} +1 -1
  397. package/dist/{tag-DCsoewjL.js → tag-hh-1nhNr.js} +2 -2
  398. package/dist/{tag-DCsoewjL.js.map → tag-hh-1nhNr.js.map} +1 -1
  399. package/dist/telemetry/index.cjs +7 -11
  400. package/dist/telemetry/index.cjs.map +1 -1
  401. package/dist/telemetry/index.d.cts +5 -9
  402. package/dist/telemetry/index.d.ts +5 -9
  403. package/dist/telemetry/index.js +7 -11
  404. package/dist/telemetry/index.js.map +1 -1
  405. package/dist/telemetry/types.d.cts +1 -1
  406. package/dist/telemetry/types.d.ts +1 -1
  407. package/dist/{types-DqxIx9Pi.d.cts → types-6kuMW4JW.d.cts} +2 -2
  408. package/dist/{types-Ct0YPy2w.d.ts → types-B2w2TtSA.d.ts} +3 -3
  409. package/dist/{types-M46WuBSm.d.cts → types-B61aCifg.d.cts} +2 -2
  410. package/dist/{types-COL1kVEB.d.cts → types-B8N_k79M.d.cts} +2 -2
  411. package/dist/{types-Jw10xuOW.d.cts → types-BIECJYun.d.ts} +171 -44
  412. package/dist/{types-DZk3XHiN.d.cts → types-BLNB882w.d.cts} +3 -3
  413. package/dist/{types-BEe50G2r.d.cts → types-BPy5Ozee.d.cts} +2 -2
  414. package/dist/{types-DBOSvWtD.d.ts → types-BS4jwuMi.d.ts} +8 -15
  415. package/dist/{types-BrYkBQo4.d.ts → types-BTK7Bv3n.d.cts} +171 -44
  416. package/dist/{types-CW6lCqrC.d.cts → types-BYM9Ptz5.d.ts} +93 -43
  417. package/dist/{types-D6UmMa6E.d.ts → types-BZDV8DZk.d.ts} +3 -3
  418. package/dist/{types-Cz83RiVu.d.cts → types-B_iLJlp4.d.ts} +255 -12
  419. package/dist/{types-DjrRmQUe.d.cts → types-BiMahEK8.d.cts} +92 -238
  420. package/dist/{types-BH5LLeJy.d.ts → types-Bl03Cg2n.d.cts} +255 -12
  421. package/dist/{types-bGQb4Jtl.d.cts → types-ByLH46Dt.d.cts} +13 -8
  422. package/dist/{types-g3vU7hcg.d.cts → types-Bydx6ga_.d.cts} +2 -2
  423. package/dist/{types-DYzJ6K2e.d.ts → types-CFeZCQ9p.d.cts} +93 -43
  424. package/dist/{types-DEc55spK.d.ts → types-CKmTZSPG.d.ts} +92 -238
  425. package/dist/{types-CaYtinmA.d.cts → types-CMzQSHAQ.d.cts} +3 -3
  426. package/dist/{types-N3EChotg.d.cts → types-CP_LBmw3.d.cts} +2 -2
  427. package/dist/{types-zZBxJ0P-.d.ts → types-CWyXTMwy.d.ts} +2 -2
  428. package/dist/{types-CPB-eF82.d.ts → types-CZJlLCbA.d.ts} +2 -2
  429. package/dist/{types-l9o4gFsI.d.ts → types-CZXPu3gn.d.ts} +2 -2
  430. package/dist/{types-BztF4HeB.d.ts → types-CaOtNjSZ.d.ts} +6 -13
  431. package/dist/{types-BTWIPEiU.d.ts → types-CfwqVkEA.d.ts} +2 -2
  432. package/dist/types-Cg14ncdV.d.ts +63 -0
  433. package/dist/{types-Bxhh2SJr.d.ts → types-CoJVrRAD.d.ts} +2 -2
  434. package/dist/{types-CKiW3n6v.d.ts → types-D3wcs4tp.d.ts} +2 -2
  435. package/dist/{types-DPS8nwkV.d.cts → types-DDOa07rU.d.cts} +8 -15
  436. package/dist/{types-BW2BXUB4.d.cts → types-DE9hgr7i.d.cts} +2 -2
  437. package/dist/{types-BOqD3Hqy.d.cts → types-DEzW1CfI.d.cts} +3 -3
  438. package/dist/{types-OaD-cbbl.d.ts → types-DIiOMV-t.d.ts} +3 -3
  439. package/dist/{types-BuqxXXYP.d.ts → types-DKc1gmd9.d.ts} +949 -190
  440. package/dist/{types-BQsOHNI0.d.ts → types-DRCMBt89.d.ts} +3 -3
  441. package/dist/{types-BQvv4RaI.d.cts → types-DUMal2E-.d.cts} +5 -8
  442. package/dist/types-DWiLcrxt.d.cts +63 -0
  443. package/dist/{types-DNxOHnZI.d.cts → types-Dd31Lw4S.d.cts} +2 -2
  444. package/dist/{types-Dmu-8g4O.d.ts → types-DekYAlA-.d.ts} +3 -3
  445. package/dist/{types-B2U9cFcx.d.ts → types-DgJeO9Nd.d.ts} +2 -2
  446. package/dist/{types-nrviNdzZ.d.ts → types-DicSaNwq.d.ts} +2 -2
  447. package/dist/{types-f8W_j6qD.d.cts → types-DinIJ1D_.d.cts} +688 -201
  448. package/dist/{types-DhDNS-5B.d.ts → types-DlQw6FCi.d.ts} +13 -8
  449. package/dist/{types-_RhBCj4_.d.cts → types-DoZtE9tz.d.cts} +3 -3
  450. package/dist/{types-BsxLGDoC.d.cts → types-DrvKfXXd.d.cts} +2 -2
  451. package/dist/{types-CzsnuPFh.d.cts → types-Dtuvhm3K.d.cts} +949 -190
  452. package/dist/{types-CcrvrAJX.d.ts → types-DwVSj-Da.d.ts} +5 -8
  453. package/dist/{types-C2vefB4D.d.ts → types-FwRmjsNN.d.ts} +10 -34
  454. package/dist/{types-C0_2KZ-A.d.ts → types-RbrfiY8T.d.ts} +2 -2
  455. package/dist/{types-DfvdbRPL.d.ts → types-WZBztugL.d.ts} +2 -2
  456. package/dist/{types-52irAt99.d.cts → types-YHUEArkR.d.cts} +2 -2
  457. package/dist/{types-fX4gbxfV.d.cts → types-bc-4z_gc.d.cts} +10 -34
  458. package/dist/{types-3eUgOA7I.d.cts → types-ePSqbXRr.d.cts} +6 -13
  459. package/dist/{types-BupPADSm.d.ts → types-n4PTnLii.d.ts} +688 -201
  460. package/dist/{types-DXskkNp8.d.cts → types-pvQzbgNE.d.cts} +3 -3
  461. package/dist/{types-DajzGOKB.d.ts → types-q-1r_9d1.d.ts} +2 -2
  462. package/dist/{types-D8Rrz51O.d.cts → types-tKkeLa2B.d.cts} +2 -2
  463. package/dist/{validateConnectionStatus-olE2sQ3U.js → validateConnectionStatus-BEGu8wXT.js} +7 -10
  464. package/dist/validateConnectionStatus-BEGu8wXT.js.map +1 -0
  465. package/dist/{validateConnectionStatus-CsvYmCOI.cjs → validateConnectionStatus-BEYkQpu9.cjs} +7 -10
  466. package/dist/validateConnectionStatus-BEYkQpu9.cjs.map +1 -0
  467. package/dist/vault/index.cjs +4 -4
  468. package/dist/vault/index.d.cts +1 -1
  469. package/dist/vault/index.d.ts +1 -1
  470. package/dist/vault/index.js +4 -4
  471. package/dist/vault/types.d.cts +1 -1
  472. package/dist/vault/types.d.ts +1 -1
  473. package/package.json +58 -4
  474. package/surface/apps.md +3 -3
  475. package/surface/auth.md +13 -6
  476. package/surface/businessWorkspaceApi.md +12 -0
  477. package/surface/chat.md +7 -7
  478. package/surface/kaiAgent.md +13 -9
  479. package/surface/management.md +18 -5
  480. package/surface/metastore.md +2 -2
  481. package/surface/queue.md +3 -3
  482. package/surface/sdk.md +13 -3
  483. package/surface/storage.md +6 -6
  484. package/surface/syncActions.md +9 -0
  485. package/dist/ValidationError-BekhphAq.js +0 -48
  486. package/dist/ValidationError-BekhphAq.js.map +0 -1
  487. package/dist/ValidationError-CLVJCCwH.cjs.map +0 -1
  488. package/dist/authClient-D7W9vWPR.js.map +0 -1
  489. package/dist/authClient-_PpvGgZJ.cjs.map +0 -1
  490. package/dist/concurrent-CH9fbNr3.js.map +0 -1
  491. package/dist/concurrent-tbiIa0UL.cjs.map +0 -1
  492. package/dist/configurations-BVvcimzo.js.map +0 -1
  493. package/dist/configurations-CyFF9Dtu.cjs.map +0 -1
  494. package/dist/configurations-VtNE0nrT.js.map +0 -1
  495. package/dist/configurations-zkNjr73Q.cjs.map +0 -1
  496. package/dist/constants-C4DlsF_M.cjs.map +0 -1
  497. package/dist/constants-wfbFsqqN.js.map +0 -1
  498. package/dist/createFetchClient-DgMiqTJ8.cjs.map +0 -1
  499. package/dist/createFetchClient-U-ZrwPl2.js.map +0 -1
  500. package/dist/credential-CihSf_xs.js +0 -36
  501. package/dist/credential-CihSf_xs.js.map +0 -1
  502. package/dist/credential-DVWvJFJs.cjs +0 -47
  503. package/dist/credential-DVWvJFJs.cjs.map +0 -1
  504. package/dist/dedupe-CiskLkGR.cjs +0 -30
  505. package/dist/dedupe-CiskLkGR.cjs.map +0 -1
  506. package/dist/dedupe-DYIHgZoG.js +0 -25
  507. package/dist/dedupe-DYIHgZoG.js.map +0 -1
  508. package/dist/isLoginPageRedirect-B0EmRsHr.cjs +0 -25
  509. package/dist/isLoginPageRedirect-B0EmRsHr.cjs.map +0 -1
  510. package/dist/isLoginPageRedirect-BTTAedW-.js +0 -20
  511. package/dist/isLoginPageRedirect-BTTAedW-.js.map +0 -1
  512. package/dist/jobStatus-0_Y3Sr4i.cjs.map +0 -1
  513. package/dist/jobStatus-PSZJMTiA.js.map +0 -1
  514. package/dist/kaiAgent-8LNzGhZc.js.map +0 -1
  515. package/dist/kaiAgent-B_TaUPRt.cjs.map +0 -1
  516. package/dist/management-BoxlRNg2.cjs.map +0 -1
  517. package/dist/management-Bp440RsV.js.map +0 -1
  518. package/dist/metastore-BYYWTb3m.cjs.map +0 -1
  519. package/dist/metastore-VCDRVhUT.js.map +0 -1
  520. package/dist/queue-DyotLFJi.js.map +0 -1
  521. package/dist/queue-OJJUUqc2.cjs.map +0 -1
  522. package/dist/semanticLayer-CSqmtHRo.js.map +0 -1
  523. package/dist/semanticLayer-E0Vilu8u.cjs.map +0 -1
  524. package/dist/storage-BKm7cztt.cjs.map +0 -1
  525. package/dist/storage-LYwFQPNO.js.map +0 -1
  526. package/dist/syncActions-OEZdVffK.cjs.map +0 -1
  527. package/dist/syncActions-QeBhIVhG.js.map +0 -1
  528. package/dist/validateConnectionStatus-CsvYmCOI.cjs.map +0 -1
  529. package/dist/validateConnectionStatus-olE2sQ3U.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
2
- const require_createFetchClient = require("./createFetchClient-DgMiqTJ8.cjs");
2
+ const require_createFetchClient = require("./createFetchClient-Cwp8max9.cjs");
3
3
  const require_SyncActionError = require("./SyncActionError-BG0zwchi.cjs");
4
- const require_ValidationError = require("./ValidationError-CLVJCCwH.cjs");
5
- const require_createGenericFetchClient = require("./createGenericFetchClient-o3cPJeRn.cjs");
6
- const require_createOpenapiFetchClient = require("./createOpenapiFetchClient-DhUU3M1W.cjs");
7
- const require_auth = require("./auth-JQ33o3nU.cjs");
8
- const require_componentId = require("./componentId-DkyQ8PM0.cjs");
4
+ const require_ValidationError = require("./ValidationError-D65QU0uq.cjs");
5
+ const require_createGenericFetchClient = require("./createGenericFetchClient-Dl9cqTvR.cjs");
6
+ const require_createOpenapiFetchClient = require("./createOpenapiFetchClient-BYqW-9tm.cjs");
7
+ const require_auth = require("./auth-Dm0F2rOh.cjs");
8
+ const require_componentId = require("./componentId-57vjsa2i.cjs");
9
9
  let zod = require("zod");
10
10
  zod = require_rolldown_runtime.__toESM(zod, 1);
11
11
  //#region src/clients/syncActions/utils/response.ts
@@ -13,16 +13,10 @@ const asErrorBody = (data) => typeof data === "object" && data !== null ? data :
13
13
  const asString = (value) => typeof value === "string" && value ? value : void 0;
14
14
  const asNumber = (value) => typeof value === "number" ? value : void 0;
15
15
  /**
16
- * A component reports failure two ways: a non-2xx response, and a **2xx** whose body carries
17
- * `status: 'error'` (the component ran, and said no). Both are recognised here so every sync action
18
- * fails as one `SyncActionError` — `validateStatus` is the only hook that sees the parsed body of a
19
- * successful response, which is what the second case needs.
16
+ * Fails a sync action on a non-2xx, or on a 2xx whose body has `status: 'error'`.
20
17
  *
21
- * Throwing rather than returning the error is deliberate. `coreFetch` only rethrows a returned value
22
- * that is an `ApiError`, and `SyncActionError` is a peer of `ApiError`, not a subclass: a component
23
- * answering `status: 'error'` on a **200** gave a business answer, not a transport failure, so it
24
- * must not satisfy `isApiError` / `isFetchClientError` — those drive retry and "network problem"
25
- * handling, and `err.response.status` would read 200 and mislead every status-based branch.
18
+ * - Throws: `coreFetch` only rethrows a returned `ApiError`.
19
+ * - `SyncActionError` is not an `ApiError`, so retry / network-error handling skips it.
26
20
  */
27
21
  const syncActionValidateStatus = (apiResponse) => {
28
22
  const body = asErrorBody(apiResponse.data);
@@ -42,39 +36,24 @@ const SyncAction = {
42
36
  DBT_RUN_RESULTS: "dbtRunResults",
43
37
  GIT_REPOSITORY: "gitRepository",
44
38
  ENROLL_MFA: "enrollMFA",
39
+ FLOW_MIGRATION_PREVIEW: "preview",
40
+ FLOW_MIGRATION_VALIDATE: "validate",
45
41
  LIST_ACTORS: "listActors",
46
42
  LIST_TASKS: "listTasks",
47
- TEST_LOOKER_CREDENTIALS: "testLookerCredentials"
43
+ TEST_LOOKER_CREDENTIALS: "testLookerCredentials",
44
+ SSH_KEYS_GENERATE: "generate"
48
45
  };
49
46
  //#endregion
50
47
  //#region src/clients/syncActions/schemas.ts
51
- /**
52
- * The Keboola-side context every sync action carries, whichever action it is. Namespaces extend it
53
- * with the fields their own action needs, so a caller never assembles the rest of the body.
54
- */
48
+ /** The Keboola-side context every sync action carries; namespaces extend it with their own fields. */
55
49
  const syncActionContextSchema = zod.object({
56
- /**
57
- * Required, because omitting it changes nothing: the service normalises a missing, empty or
58
- * `null` value to `"default"` and resolves that to the default branch's numeric id — the same id,
59
- * branch type and downstream context an explicit value resolves to, with no extra lookup either
60
- * way. Requiring it keeps every request self-describing. Both a numeric id and the literal
61
- * `"default"` are accepted (`keboola/runner-sync-api`: `ExecuteActionRequestProcessor` →
62
- * `BranchTypeResolver`).
63
- */
50
+ /** A numeric id or `"default"`; required so requests are self-describing. */
64
51
  branchId: zod.string().min(1, "Required"),
65
- /**
66
- * Leave undefined. The service then runs the component's registered tag from the Developer
67
- * Portal / Storage component definition — the currently published version, not Docker's
68
- * `latest`. Set it only to deliberately pin a specific or branch build.
69
- */
52
+ /** Leave undefined to run the published version (not Docker `latest`); set only to pin a build. */
70
53
  tag: zod.string().optional(),
71
54
  mode: zod.enum(["run", "debug"]).optional()
72
55
  });
73
- /**
74
- * The `/actions` request body. `configData` is whatever the component's action expects, so it is
75
- * only asserted to be an object here — each namespace validates the shape its own action needs
76
- * before handing it over.
77
- */
56
+ /** The `/actions` body; each namespace validates its own `configData` shape. */
78
57
  const syncActionBodySchema = syncActionContextSchema.extend({
79
58
  componentId: zod.string().min(1, "Required"),
80
59
  action: zod.string().min(1, "Required"),
@@ -128,45 +107,31 @@ const createApify = (sendSyncAction) => {
128
107
  };
129
108
  //#endregion
130
109
  //#region src/clients/syncActions/dbt/schemas.ts
131
- /**
132
- * `componentId` is a plain string here, unlike the git actions' closed enum. Every dbt transformation
133
- * answers `dbtCompile` and `dbtRunResults` under the same action name and the same payload, so the id
134
- * selects nothing — it only names the component to run, and rejecting an unlisted one would cost the
135
- * caller a cast for no guarantee. The component itself refuses an action it does not serve.
136
- */
110
+ /** `componentId` is a plain string: every dbt transformation serves the same actions, so it selects nothing. */
137
111
  const dbtActionInputSchema = syncActionContextSchema.extend({
138
112
  componentId: zod.string().min(1, "Required"),
139
113
  configId: zod.string().min(1, "Required"),
140
114
  artifacts: zod.record(zod.string(), zod.unknown()).optional()
141
115
  });
142
116
  /**
143
- * `compiled` maps a model's file name (`orders.sql`) to its compiled SQL. Key order is the
144
- * component's own and is preserved, so the caller can render the models in it.
117
+ * Model file name (`orders.sql`) → compiled SQL, in the component's key order.
145
118
  *
146
- * A configuration that has never run does **not** answer with an empty payload — the component
147
- * raises a user exception telling you to run it first, which arrives as a `SyncActionError` carrying
148
- * that sentence. The empty default here is only for a payload that omits the key anyway: rendering
149
- * "nothing to show" beats failing on a validation error no caller can act on. A key that is
150
- * *present* with the wrong shape still fails — that is a contract change, and reading it as "no
151
- * models" would hide it.
119
+ * - A never-run configuration fails with a `SyncActionError`, not an empty payload.
120
+ * - A missing key defaults to empty; a present key of the wrong shape still fails.
152
121
  */
153
122
  const dbtCompiledSchema = zod.object({ compiled: zod.record(zod.string(), zod.string()).default({}) }).transform(({ compiled }) => compiled);
154
- /**
155
- * dbt reports the worker as `"Thread-1"`; the number alone is what a consumer positions a row by, so
156
- * the prefix is stripped here rather than in every consumer. An unparseable value falls back to `0`
157
- * — one odd worker label must not cost the caller the whole timeline.
158
- */
123
+ /** `"Thread-1"` → `1`; an unparseable value falls back to `0` rather than failing the timeline. */
159
124
  const dbtThreadSchema = zod.string().transform((thread) => Number.parseInt(thread.replace(/^Thread-/, ""), 10)).pipe(zod.number().int().nonnegative()).catch(0);
160
- /** Each entry also carries `status` and `dependsOn`, dropped here until a consumer needs them. */
125
+ /** Omits `status` and `dependsOn`. */
161
126
  const dbtModelTimingSchema = zod.object({
162
127
  id: zod.string(),
163
128
  name: zod.string(),
164
129
  thread: dbtThreadSchema,
165
- /** ISO timestamps, left as strings — the consumer decides what to parse them into. */
130
+ /** ISO timestamps, left unparsed. */
166
131
  timeStarted: zod.string(),
167
132
  timeCompleted: zod.string()
168
133
  });
169
- /** Defaults to empty for the same reason as `compiled` above — and with the same caveat. */
134
+ /** A missing key defaults to empty, as in `dbtCompiledSchema`. */
170
135
  const dbtRunResultsSchema = zod.object({ modelTiming: zod.array(dbtModelTimingSchema).default([]) }).transform(({ modelTiming }) => modelTiming);
171
136
  //#endregion
172
137
  //#region src/clients/syncActions/dbt/utils.ts
@@ -212,6 +177,75 @@ const createDbt = (sendSyncAction) => {
212
177
  };
213
178
  };
214
179
  //#endregion
180
+ //#region src/clients/syncActions/flowMigration/schemas.ts
181
+ const flowMigrationInputSchema = syncActionContextSchema.extend({ orchestrationIds: zod.array(zod.string().min(1, "Required")) });
182
+ const flowMigrationValidationResultSchema = zod.object({
183
+ orchestrationId: zod.string(),
184
+ orchestrationName: zod.string(),
185
+ valid: zod.boolean(),
186
+ issues: zod.array(zod.string())
187
+ });
188
+ /** The orchestration's configuration as the flow it would become; extra keys pass through. */
189
+ const flowMigrationMigratedConfigurationSchema = zod.looseObject({
190
+ phases: zod.array(zod.unknown()).optional(),
191
+ tasks: zod.array(zod.unknown()).optional(),
192
+ parameters: zod.unknown().optional()
193
+ });
194
+ /**
195
+ * One orchestration's dry-run outcome.
196
+ *
197
+ * - `skipped`: it failed validation; `issues` says why.
198
+ * - `failed`: building the flow threw; `error` carries the message.
199
+ */
200
+ const flowMigrationPreviewResultSchema = zod.object({
201
+ orchestrationId: zod.string(),
202
+ orchestrationName: zod.string(),
203
+ status: zod.enum([
204
+ "dry-run",
205
+ "skipped",
206
+ "failed"
207
+ ]),
208
+ issues: zod.array(zod.string()),
209
+ changes: zod.array(zod.string()),
210
+ error: zod.string().optional(),
211
+ migratedConfiguration: flowMigrationMigratedConfigurationSchema.optional()
212
+ });
213
+ const flowMigrationValidationResultsSchema = zod.array(flowMigrationValidationResultSchema);
214
+ const flowMigrationPreviewResultsSchema = zod.array(flowMigrationPreviewResultSchema);
215
+ //#endregion
216
+ //#region src/clients/syncActions/flowMigration/flowMigration.ts
217
+ /** Orchestration → flow migration checks; one result per requested orchestration. */
218
+ const createFlowMigration = (sendSyncAction) => {
219
+ const validate = async (input, signal) => {
220
+ const { orchestrationIds, ...context } = require_ValidationError.parseOrThrow(flowMigrationInputSchema, input);
221
+ const data = await sendSyncAction({
222
+ ...context,
223
+ action: SyncAction.FLOW_MIGRATION_VALIDATE,
224
+ componentId: require_componentId.ComponentId.FLOW_MIGRATION_TOOL,
225
+ configData: { parameters: { orchestrationIds } }
226
+ }, { signal });
227
+ return require_ValidationError.parseOrThrow(flowMigrationValidationResultsSchema, data);
228
+ };
229
+ /** A dry run: nothing is written, and invalid orchestrations come back `skipped`. */
230
+ const preview = async (input, signal) => {
231
+ const { orchestrationIds, ...context } = require_ValidationError.parseOrThrow(flowMigrationInputSchema, input);
232
+ const data = await sendSyncAction({
233
+ ...context,
234
+ action: SyncAction.FLOW_MIGRATION_PREVIEW,
235
+ componentId: require_componentId.ComponentId.FLOW_MIGRATION_TOOL,
236
+ configData: { parameters: {
237
+ mode: "config",
238
+ orchestrationIds
239
+ } }
240
+ }, { signal });
241
+ return require_ValidationError.parseOrThrow(flowMigrationPreviewResultsSchema, data);
242
+ };
243
+ return {
244
+ validate,
245
+ preview
246
+ };
247
+ };
248
+ //#endregion
215
249
  //#region src/clients/syncActions/git/constants.ts
216
250
  /**
217
251
  * Components whose git repository lives under `parameters.dataApp.git.repository` and that answer to
@@ -253,14 +287,7 @@ const gitAuthSchema = zod.discriminatedUnion("type", [
253
287
  }),
254
288
  zod.object({
255
289
  type: zod.literal("sshKey"),
256
- /**
257
- * Optional, unlike the password variant's — the key is the whole credential.
258
- *
259
- * - The component rewrites the URL to `git@host:path` and clones over SSH, where the user is
260
- * always `git` (`keboola/sandboxes`: `GitRepository::resolveRepositoryUrl`).
261
- * - It never reads `username` on that path, so a deploy key has none to be stored with.
262
- * - Accept one when the caller has it anyway; it reaches the component and is ignored there.
263
- */
290
+ /** Ignored by the component: over SSH the user is always `git`. */
264
291
  username: zod.string().min(1, "Required").optional(),
265
292
  "#sshKey": zod.string().min(1, "Required")
266
293
  })
@@ -270,14 +297,8 @@ const gitInputSchema = syncActionContextSchema.extend({
270
297
  auth: gitAuthSchema.default({ type: "public" })
271
298
  });
272
299
  /**
273
- * Accepts only the components that serve a git repository action — the action name and the
274
- * `configData` path are resolved from the id, so one from neither family has nowhere to go. The
275
- * enum rejects an unsupported id when parsing, before any request is sent.
276
- *
277
- * **Takes no `branch`, deliberately — do not add one.** It is a run-config field the component
278
- * feeds to `git clone -b <branch>`, so a stale or renamed value fails the clone and breaks the very
279
- * call you make to find out which branches exist. Accepting it optionally would let a caller
280
- * reintroduce that by spreading in an existing config; zod strips it instead.
300
+ * **Takes no `branch` — do not add one.** The component clones with `-b <branch>`, so a stale one
301
+ * would fail the branch listing. Zod strips it.
281
302
  */
282
303
  const getBranchesInputSchema = gitInputSchema.extend({ componentId: zod.enum(GIT_FAMILY) }).check((ctx) => {
283
304
  const { componentId, auth } = ctx.value;
@@ -289,26 +310,13 @@ const getBranchesInputSchema = gitInputSchema.extend({ componentId: zod.enum(GIT
289
310
  message: `Component "${componentId}" authenticates with a password, not an SSH key.`
290
311
  });
291
312
  });
292
- /** Only the data-app family serves `data-app-entrypoints`; the enum rejects anything else. */
313
+ /** Only the data-app family serves `data-app-entrypoints`. */
293
314
  const getEntrypointsInputSchema = gitInputSchema.extend({
294
315
  componentId: zod.enum(DATA_APP_FAMILY),
295
- /**
296
- * Unlike `getBranches`, the branch is a real input here — it selects whose revision's files get
297
- * enumerated. The *git* branch, not the dev branch (`branchId`) every sync action carries.
298
- * Omit it for the repository's default branch; don't resolve one client-side.
299
- *
300
- * An empty string normalises to omitted rather than being rejected: a config written outside the
301
- * UI can carry `branch: ""`, and the form this replaces deleted a falsy branch before sending, so
302
- * refusing it would fail a call that has always meant "the default branch".
303
- */
316
+ /** The *git* branch (not `branchId`); omit for the repository default. `""` normalises to omitted. */
304
317
  branch: zod.string().optional().transform((branch) => branch || void 0)
305
318
  });
306
- /**
307
- * Only `branch` is load-bearing — it is the value the caller selects and stores. The rest is
308
- * decoration the UI renders beside it, so each field falls back to an empty string rather than
309
- * failing: one commit with no message must not cost the caller the whole branch list. They stay
310
- * `string` rather than becoming optional, so a consumer needs no new undefined handling.
311
- */
319
+ /** Only `branch` is load-bearing; the rest falls back to `''` so one bad field can't fail the list. */
312
320
  const gitBranchSchema = zod.object({
313
321
  branch: zod.string(),
314
322
  sha: zod.string().catch(""),
@@ -322,24 +330,12 @@ const gitBranchSchema = zod.object({
322
330
  email: ""
323
331
  })
324
332
  });
333
+ /** An array, or an index-keyed object with gaps (a server-filtered PHP array). */
334
+ const gitBranchListSchema = zod.union([zod.array(gitBranchSchema), zod.record(zod.string(), gitBranchSchema)]).transform((branches) => Array.isArray(branches) ? branches : Object.values(branches));
325
335
  /**
326
- * Only `repository.branches` is confirmed — it is what the UI read before these actions were typed.
327
- * The top-level position is accepted too because the schema this replaces declared it there, and
328
- * nothing ever exercised that schema to settle which is right; the two families are separate
329
- * implementations, so both may well be real.
330
- *
331
- * A list in neither position is a different thing from an empty one, though, and is rejected rather
332
- * than read as none: an empty array is a real answer (a repository with no branches yet), while an
333
- * envelope carrying no list at all is one we do not understand, and rendering that as "no branches"
334
- * would hide the failure behind an ordinary empty state.
335
- */
336
- /**
337
- * Either a JSON array or an object keyed by stringified indices, gaps included:
338
- * `{ "0": …, "1": …, "3": … }`. The component filters the list server-side, and a PHP array whose
339
- * integer keys are no longer contiguous serializes as an object. `Object.values` reads those keys
340
- * back in ascending numeric order, so the branch order survives either shape.
336
+ * - `repository.branches` is confirmed; the top-level position is accepted but unverified.
337
+ * - A response with neither list is rejected, not read as no branches.
341
338
  */
342
- const gitBranchListSchema = zod.union([zod.array(gitBranchSchema), zod.record(zod.string(), gitBranchSchema)]).transform((branches) => Array.isArray(branches) ? branches : Object.values(branches));
343
339
  const gitBranchesSchema = zod.object({
344
340
  repository: zod.object({ branches: gitBranchListSchema.optional() }).optional(),
345
341
  branches: gitBranchListSchema.optional()
@@ -359,7 +355,6 @@ const toCredentials = (auth) => {
359
355
  const { type: _type, ...credentials } = auth;
360
356
  return credentials;
361
357
  };
362
- /** The default is the absence of a branch — the component's own `git clone` decides it. */
363
358
  const toRevision = (rev) => rev.revision === "branch" ? { branch: rev.branch } : {};
364
359
  /** Data apps nest their repository a level deeper, and call the URL `repository`. */
365
360
  const buildDataAppConfigData = ({ repositoryUrl, auth, ...rev }) => ({ parameters: { dataApp: { git: {
@@ -453,6 +448,28 @@ const createLooker = (sendSyncAction) => {
453
448
  return { testCredentials };
454
449
  };
455
450
  //#endregion
451
+ //#region src/clients/syncActions/sshKeys/schemas.ts
452
+ const sshKeyPairSchema = zod.object({
453
+ status: zod.literal("success"),
454
+ public: zod.string(),
455
+ private: zod.string()
456
+ });
457
+ //#endregion
458
+ //#region src/clients/syncActions/sshKeys/sshKeys.ts
459
+ const createSshKeys = (sendSyncAction) => {
460
+ /** Generates a new 4096-bit RSA key pair; the component keeps no copy. */
461
+ const generate = async (input, signal) => {
462
+ const data = await sendSyncAction({
463
+ ...require_ValidationError.parseOrThrow(syncActionContextSchema, input),
464
+ action: SyncAction.SSH_KEYS_GENERATE,
465
+ componentId: require_componentId.ComponentId.SSH_KEYGEN_V2,
466
+ configData: {}
467
+ }, { signal });
468
+ return require_ValidationError.parseOrThrow(sshKeyPairSchema, data);
469
+ };
470
+ return { generate };
471
+ };
472
+ //#endregion
456
473
  //#region src/clients/syncActions/syncActionsClient.ts
457
474
  const createSendSyncAction = (client) => {
458
475
  return async (body, options = {}) => {
@@ -489,8 +506,10 @@ const createSyncActionsClient = ({ baseUrl, middlewares, auth }) => {
489
506
  enrollMFA,
490
507
  apify: createApify(sendSyncAction),
491
508
  dbt: createDbt(sendSyncAction),
509
+ flowMigration: createFlowMigration(sendSyncAction),
492
510
  git: createGit(sendSyncAction),
493
- looker: createLooker(sendSyncAction)
511
+ looker: createLooker(sendSyncAction),
512
+ sshKeys: createSshKeys(sendSyncAction)
494
513
  };
495
514
  };
496
515
  //#endregion
@@ -501,4 +520,4 @@ Object.defineProperty(exports, "createSyncActionsClient", {
501
520
  }
502
521
  });
503
522
 
504
- //# sourceMappingURL=syncActions-OEZdVffK.cjs.map
523
+ //# sourceMappingURL=syncActions-CtcLGQiy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncActions-CtcLGQiy.cjs","names":["SyncActionError","defaultValidateStatus","z","z","SyncActionError","parseOrThrow","ComponentId","z","parseOrThrow","z","parseOrThrow","ComponentId","ComponentId","z","parseOrThrow","z","parseOrThrow","ComponentId","z","parseOrThrow","ComponentId","parseOrThrow","createOpenapiFetchClient","createAuthHeaders","createGenericFetchClient"],"sources":["../src/clients/syncActions/utils/response.ts","../src/clients/syncActions/constants.ts","../src/clients/syncActions/schemas.ts","../src/clients/syncActions/apify/schemas.ts","../src/clients/syncActions/apify/utils.ts","../src/clients/syncActions/apify/apify.ts","../src/clients/syncActions/dbt/schemas.ts","../src/clients/syncActions/dbt/utils.ts","../src/clients/syncActions/dbt/dbt.ts","../src/clients/syncActions/flowMigration/schemas.ts","../src/clients/syncActions/flowMigration/flowMigration.ts","../src/clients/syncActions/git/constants.ts","../src/clients/syncActions/git/schemas.ts","../src/clients/syncActions/git/utils.ts","../src/clients/syncActions/git/git.ts","../src/clients/syncActions/looker/schemas.ts","../src/clients/syncActions/looker/looker.ts","../src/clients/syncActions/sshKeys/schemas.ts","../src/clients/syncActions/sshKeys/sshKeys.ts","../src/clients/syncActions/syncActionsClient.ts"],"sourcesContent":["import { SyncActionError } from '../../../errors';\nimport type { ValidateStatusFn } from '../../../fetchClient';\nimport { defaultValidateStatus } from '../../../fetchClient';\n\ntype SyncActionErrorBody = {\n status?: unknown;\n message?: unknown;\n error?: unknown;\n exceptionId?: unknown;\n code?: unknown;\n};\n\nconst asErrorBody = (data: unknown): SyncActionErrorBody | null =>\n typeof data === 'object' && data !== null ? (data as SyncActionErrorBody) : null;\n\nconst asString = (value: unknown) => (typeof value === 'string' && value ? value : undefined);\nconst asNumber = (value: unknown) => (typeof value === 'number' ? value : undefined);\n\n/**\n * Fails a sync action on a non-2xx, or on a 2xx whose body has `status: 'error'`.\n *\n * - Throws: `coreFetch` only rethrows a returned `ApiError`.\n * - `SyncActionError` is not an `ApiError`, so retry / network-error handling skips it.\n */\nexport const syncActionValidateStatus: ValidateStatusFn = (apiResponse) => {\n const body = asErrorBody(apiResponse.data);\n\n if (body?.status === 'error') {\n throw new SyncActionError(\n asString(body.message) ?? asString(body.error) ?? apiResponse.response.statusText,\n {\n exceptionId: asString(body.exceptionId),\n code: asNumber(body.code),\n data: apiResponse.data,\n },\n );\n }\n\n return defaultValidateStatus(apiResponse);\n};\n","export const SyncAction = {\n DATA_APP_GIT_REPOSITORY: 'git-repository',\n DATA_APP_ENTRYPOINTS: 'data-app-entrypoints',\n DBT_COMPILE: 'dbtCompile',\n DBT_RUN_RESULTS: 'dbtRunResults',\n GIT_REPOSITORY: 'gitRepository',\n ENROLL_MFA: 'enrollMFA',\n FLOW_MIGRATION_PREVIEW: 'preview',\n FLOW_MIGRATION_VALIDATE: 'validate',\n LIST_ACTORS: 'listActors',\n LIST_TASKS: 'listTasks',\n TEST_LOOKER_CREDENTIALS: 'testLookerCredentials',\n SSH_KEYS_GENERATE: 'generate',\n};\n","import * as z from 'zod';\n\n/** The Keboola-side context every sync action carries; namespaces extend it with their own fields. */\nexport const syncActionContextSchema = z.object({\n /** A numeric id or `\"default\"`; required so requests are self-describing. */\n branchId: z.string().min(1, 'Required'),\n /** Leave undefined to run the published version (not Docker `latest`); set only to pin a build. */\n tag: z.string().optional(),\n mode: z.enum(['run', 'debug']).optional(),\n});\n\n/** The `/actions` body; each namespace validates its own `configData` shape. */\nexport const syncActionBodySchema = syncActionContextSchema.extend({\n componentId: z.string().min(1, 'Required'),\n action: z.string().min(1, 'Required'),\n configData: z.record(z.string(), z.unknown()),\n});\n\nexport type SyncActionContext = z.infer<typeof syncActionContextSchema>;\nexport type SyncActionBody = z.infer<typeof syncActionBodySchema>;\n","import * as z from 'zod';\n\nimport { syncActionContextSchema } from '../schemas';\n\nexport const apifyObjectsInputSchema = syncActionContextSchema.extend({\n '#token': z.string().min(1, 'Required'),\n});\n\nexport const apifyObjectsSchema = z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n }),\n);\n\nexport type ApifyObjectsInput = z.infer<typeof apifyObjectsInputSchema>;\n\nexport type ApifyObject = z.infer<typeof apifyObjectsSchema>[number];\n","import { SyncActionError } from '../../../errors';\nimport type { ValidateStatusFn } from '../../../fetchClient';\nimport { syncActionValidateStatus } from '../utils/response';\n\n/**\n * A slow Apify account makes the component answer `{ timeout: true }` on a 200 instead of the list —\n * a failure only this action knows how to spot, so it is checked before deferring to the shared\n * validation.\n */\nexport const apifyValidateStatus: ValidateStatusFn = (apiResponse) => {\n const data = apiResponse.data;\n\n if (typeof data === 'object' && data !== null && 'timeout' in data && data.timeout)\n throw new SyncActionError('Timed out while loading data from Apify.', { data });\n\n return syncActionValidateStatus(apiResponse);\n};\n","import { ComponentId } from '../../../constants';\nimport { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport { type ApifyObjectsInput, apifyObjectsInputSchema, apifyObjectsSchema } from './schemas';\nimport { apifyValidateStatus } from './utils';\n\nexport const createApify = (sendSyncAction: SendSyncAction) => {\n const _getObjects = async (action: string, input: ApifyObjectsInput, signal?: AbortSignal) => {\n const { '#token': token, ...context } = parseOrThrow(apifyObjectsInputSchema, input);\n\n const data = await sendSyncAction(\n {\n ...context,\n action,\n componentId: ComponentId.APIFY,\n configData: { parameters: { '#token': token } },\n },\n { signal, validateStatus: apifyValidateStatus },\n );\n\n return parseOrThrow(apifyObjectsSchema, data);\n };\n\n const getActors = (input: ApifyObjectsInput, signal?: AbortSignal) => {\n return _getObjects(SyncAction.LIST_ACTORS, input, signal);\n };\n\n const getTasks = (input: ApifyObjectsInput, signal?: AbortSignal) => {\n return _getObjects(SyncAction.LIST_TASKS, input, signal);\n };\n\n return { getActors, getTasks };\n};\n","import * as z from 'zod';\n\nimport { syncActionContextSchema } from '../schemas';\n\n/** `componentId` is a plain string: every dbt transformation serves the same actions, so it selects nothing. */\nexport const dbtActionInputSchema = syncActionContextSchema.extend({\n componentId: z.string().min(1, 'Required'),\n configId: z.string().min(1, 'Required'),\n artifacts: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Model file name (`orders.sql`) → compiled SQL, in the component's key order.\n *\n * - A never-run configuration fails with a `SyncActionError`, not an empty payload.\n * - A missing key defaults to empty; a present key of the wrong shape still fails.\n */\nexport const dbtCompiledSchema = z\n .object({ compiled: z.record(z.string(), z.string()).default({}) })\n .transform(({ compiled }) => compiled);\n\n/** `\"Thread-1\"` → `1`; an unparseable value falls back to `0` rather than failing the timeline. */\nconst dbtThreadSchema = z\n .string()\n .transform((thread) => Number.parseInt(thread.replace(/^Thread-/, ''), 10))\n .pipe(z.number().int().nonnegative())\n .catch(0);\n\n/** Omits `status` and `dependsOn`. */\nexport const dbtModelTimingSchema = z.object({\n id: z.string(),\n name: z.string(),\n thread: dbtThreadSchema,\n /** ISO timestamps, left unparsed. */\n timeStarted: z.string(),\n timeCompleted: z.string(),\n});\n\n/** A missing key defaults to empty, as in `dbtCompiledSchema`. */\nexport const dbtRunResultsSchema = z\n .object({ modelTiming: z.array(dbtModelTimingSchema).default([]) })\n .transform(({ modelTiming }) => modelTiming);\n\nexport type DbtActionInput = z.infer<typeof dbtActionInputSchema>;\nexport type DbtCompiled = z.infer<typeof dbtCompiledSchema>;\nexport type DbtModelTiming = z.infer<typeof dbtModelTimingSchema>;\n","export type DbtActionConfigDataInput = {\n configId: string;\n artifacts?: Record<string, unknown>;\n};\n\n/**\n * Both dbt artifact actions read the *stored* configuration — `configId` is what they resolve it by,\n * so the payload carries no settings of its own. `artifacts` is the configuration's own artifacts\n * section, passed through untouched: it selects which run's artifacts the component picks up, and\n * omitting it leaves the component on its default (the latest run).\n */\nexport const buildDbtActionConfigData = ({ configId, artifacts }: DbtActionConfigDataInput) => ({\n parameters: { configId },\n ...(artifacts && { artifacts }),\n});\n","import { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport {\n type DbtActionInput,\n dbtActionInputSchema,\n dbtCompiledSchema,\n dbtRunResultsSchema,\n} from './schemas';\nimport { buildDbtActionConfigData } from './utils';\n\n/** The dbt transformations' artifact actions — both read what the *last run* left behind. */\nexport const createDbt = (sendSyncAction: SendSyncAction) => {\n const sendDbtAction = (action: string, input: DbtActionInput, signal?: AbortSignal) => {\n const { componentId, configId, artifacts, ...context } = parseOrThrow(\n dbtActionInputSchema,\n input,\n );\n\n return sendSyncAction(\n {\n ...context,\n componentId,\n action,\n configData: buildDbtActionConfigData({ configId, artifacts }),\n },\n { signal },\n );\n };\n\n /** The compiled SQL of every model in the configuration. */\n const compile = async (input: DbtActionInput, signal?: AbortSignal) => {\n const data = await sendDbtAction(SyncAction.DBT_COMPILE, input, signal);\n\n return parseOrThrow(dbtCompiledSchema, data);\n };\n\n /** When each model of the last run started and finished, and on which worker. */\n const runResults = async (input: DbtActionInput, signal?: AbortSignal) => {\n const data = await sendDbtAction(SyncAction.DBT_RUN_RESULTS, input, signal);\n\n return parseOrThrow(dbtRunResultsSchema, data);\n };\n\n return { compile, runResults };\n};\n","import * as z from 'zod';\n\nimport { syncActionContextSchema } from '../schemas';\n\nexport const flowMigrationInputSchema = syncActionContextSchema.extend({\n orchestrationIds: z.array(z.string().min(1, 'Required')),\n});\n\nexport const flowMigrationValidationResultSchema = z.object({\n orchestrationId: z.string(),\n orchestrationName: z.string(),\n valid: z.boolean(),\n issues: z.array(z.string()),\n});\n\n/** The orchestration's configuration as the flow it would become; extra keys pass through. */\nconst flowMigrationMigratedConfigurationSchema = z.looseObject({\n phases: z.array(z.unknown()).optional(),\n tasks: z.array(z.unknown()).optional(),\n parameters: z.unknown().optional(),\n});\n\n/**\n * One orchestration's dry-run outcome.\n *\n * - `skipped`: it failed validation; `issues` says why.\n * - `failed`: building the flow threw; `error` carries the message.\n */\nexport const flowMigrationPreviewResultSchema = z.object({\n orchestrationId: z.string(),\n orchestrationName: z.string(),\n status: z.enum(['dry-run', 'skipped', 'failed']),\n issues: z.array(z.string()),\n changes: z.array(z.string()),\n error: z.string().optional(),\n migratedConfiguration: flowMigrationMigratedConfigurationSchema.optional(),\n});\n\nexport const flowMigrationValidationResultsSchema = z.array(flowMigrationValidationResultSchema);\nexport const flowMigrationPreviewResultsSchema = z.array(flowMigrationPreviewResultSchema);\n\nexport type FlowMigrationInput = z.infer<typeof flowMigrationInputSchema>;\nexport type FlowMigrationValidationResult = z.infer<typeof flowMigrationValidationResultSchema>;\nexport type FlowMigrationPreviewResult = z.infer<typeof flowMigrationPreviewResultSchema>;\n","import { ComponentId } from '../../../constants';\nimport { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport {\n type FlowMigrationInput,\n flowMigrationInputSchema,\n flowMigrationPreviewResultsSchema,\n flowMigrationValidationResultsSchema,\n} from './schemas';\n\n/** Orchestration → flow migration checks; one result per requested orchestration. */\nexport const createFlowMigration = (sendSyncAction: SendSyncAction) => {\n const validate = async (input: FlowMigrationInput, signal?: AbortSignal) => {\n const { orchestrationIds, ...context } = parseOrThrow(flowMigrationInputSchema, input);\n\n const data = await sendSyncAction(\n {\n ...context,\n action: SyncAction.FLOW_MIGRATION_VALIDATE,\n componentId: ComponentId.FLOW_MIGRATION_TOOL,\n configData: { parameters: { orchestrationIds } },\n },\n { signal },\n );\n\n return parseOrThrow(flowMigrationValidationResultsSchema, data);\n };\n\n /** A dry run: nothing is written, and invalid orchestrations come back `skipped`. */\n const preview = async (input: FlowMigrationInput, signal?: AbortSignal) => {\n const { orchestrationIds, ...context } = parseOrThrow(flowMigrationInputSchema, input);\n\n const data = await sendSyncAction(\n {\n ...context,\n action: SyncAction.FLOW_MIGRATION_PREVIEW,\n componentId: ComponentId.FLOW_MIGRATION_TOOL,\n configData: { parameters: { mode: 'config', orchestrationIds } },\n },\n { signal },\n );\n\n return parseOrThrow(flowMigrationPreviewResultsSchema, data);\n };\n\n return { validate, preview };\n};\n","import { ComponentId } from '../../../constants';\n\n/**\n * Components whose git repository lives under `parameters.dataApp.git.repository` and that answer to\n * the `git-repository` action. They are the only ones serving `data-app-entrypoints`, and the only\n * ones accepting an SSH key.\n */\nexport const DATA_APP_FAMILY = [ComponentId.DATA_APPS, ComponentId.SANDBOXES] as const;\n\n/**\n * Components whose git repository lives under `parameters.git.repo` and that answer to the\n * `gitRepository` action. They authenticate over HTTPS with a username and password only.\n *\n * Deliberately a list rather than \"everything else\": `listBranches` / `list_branches` /\n * `checkBranches` also exist on unrelated third-party components (`kds-team.app-custom-python`,\n * `keboola.app-transformation-migration`, `kds-team.app-sox-migration-checker`) under a different\n * contract. Those stay on the generic `sendSyncAction` escape hatch.\n */\nconst DBT_FAMILY = [\n ComponentId.DBT_TEST_CORE_KEY_PAIR,\n ComponentId.DBT_TEST_REMOTE_SNOWFLAKE,\n ComponentId.DBT_TRANSFORMATION,\n ComponentId.DBT_TRANSFORMATION_LOCAL_BIGQUERY,\n ComponentId.DBT_TRANSFORMATION_REMOTE_BIGQUERY,\n ComponentId.DBT_TRANSFORMATION_REMOTE_MSSQL,\n ComponentId.DBT_TRANSFORMATION_REMOTE_POSTGRESQL,\n ComponentId.DBT_TRANSFORMATION_REMOTE_REDSHIFT,\n ComponentId.DBT_TRANSFORMATION_REMOTE_SNOWFLAKE,\n] as const;\n\nexport const GIT_FAMILY = [...DATA_APP_FAMILY, ...DBT_FAMILY] as const;\n\n/** The ids the git actions accept — anything else has no action name or payload path to resolve. */\nexport type GitComponentId = (typeof GIT_FAMILY)[number];\nexport type DataAppComponentId = (typeof DATA_APP_FAMILY)[number];\n\nconst dataAppIds: ReadonlySet<string> = new Set(DATA_APP_FAMILY);\n\nexport const isDataAppFamily = (componentId: string): componentId is DataAppComponentId =>\n dataAppIds.has(componentId);\n","import * as z from 'zod';\n\nimport { syncActionContextSchema } from '../schemas';\n\nimport { DATA_APP_FAMILY, GIT_FAMILY, isDataAppFamily } from './constants';\n\nexport const gitAuthSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('public') }),\n z.object({\n type: z.literal('password'),\n username: z.string().min(1, 'Required'),\n '#password': z.string().min(1, 'Required'),\n }),\n z.object({\n type: z.literal('sshKey'),\n /** Ignored by the component: over SSH the user is always `git`. */\n username: z.string().min(1, 'Required').optional(),\n '#sshKey': z.string().min(1, 'Required'),\n }),\n]);\n\nconst gitInputSchema = syncActionContextSchema.extend({\n repositoryUrl: z.string().min(1, 'Required'),\n auth: gitAuthSchema.default({ type: 'public' }),\n});\n\n/**\n * **Takes no `branch` — do not add one.** The component clones with `-b <branch>`, so a stale one\n * would fail the branch listing. Zod strips it.\n */\nexport const getBranchesInputSchema = gitInputSchema\n .extend({ componentId: z.enum(GIT_FAMILY) })\n .check((ctx) => {\n const { componentId, auth } = ctx.value;\n\n // The types can't vary auth by family: dbt clones over HTTPS with a password, no SSH key.\n if (auth.type !== 'sshKey' || isDataAppFamily(componentId)) return;\n\n ctx.issues.push({\n code: 'custom',\n input: auth,\n path: ['auth'],\n message: `Component \"${componentId}\" authenticates with a password, not an SSH key.`,\n });\n });\n\n/** Only the data-app family serves `data-app-entrypoints`. */\nexport const getEntrypointsInputSchema = gitInputSchema.extend({\n componentId: z.enum(DATA_APP_FAMILY),\n /** The *git* branch (not `branchId`); omit for the repository default. `\"\"` normalises to omitted. */\n branch: z\n .string()\n .optional()\n .transform((branch) => branch || undefined),\n});\n\n/** Only `branch` is load-bearing; the rest falls back to `''` so one bad field can't fail the list. */\nconst gitBranchSchema = z.object({\n branch: z.string(),\n sha: z.string().catch(''),\n date: z.string().catch(''),\n comment: z.string().catch(''),\n author: z\n .object({\n name: z.string().catch(''),\n email: z.string().catch(''),\n })\n .catch({ name: '', email: '' }),\n});\n\n/** An array, or an index-keyed object with gaps (a server-filtered PHP array). */\nconst gitBranchListSchema = z\n .union([z.array(gitBranchSchema), z.record(z.string(), gitBranchSchema)])\n .transform((branches) => (Array.isArray(branches) ? branches : Object.values(branches)));\n\n/**\n * - `repository.branches` is confirmed; the top-level position is accepted but unverified.\n * - A response with neither list is rejected, not read as no branches.\n */\nexport const gitBranchesSchema = z\n .object({\n repository: z.object({ branches: gitBranchListSchema.optional() }).optional(),\n branches: gitBranchListSchema.optional(),\n })\n .check((ctx) => {\n if (ctx.value.branches ?? ctx.value.repository?.branches) return;\n\n ctx.issues.push({\n code: 'custom',\n input: ctx.value,\n message: 'The response carried no branch list.',\n });\n })\n .transform(({ repository, branches }) => branches ?? repository?.branches ?? []);\n\nexport const gitEntrypointsSchema = z.object({\n entrypoints: z.array(z.string()),\n});\n\nexport type GitAuth = z.infer<typeof gitAuthSchema>;\nexport type GetBranchesInput = z.input<typeof getBranchesInputSchema>;\nexport type GetEntrypointsInput = z.input<typeof getEntrypointsInputSchema>;\nexport type GitBranch = z.infer<typeof gitBranchSchema>;\nexport type GitEntrypoints = z.infer<typeof gitEntrypointsSchema>;\n","import type { GitAuth } from './schemas';\n\n/** Every variant is already the shape the components read, minus the discriminator. */\nconst toCredentials = (auth: GitAuth) => {\n const { type: _type, ...credentials } = auth;\n\n return credentials;\n};\n\n/**\n * Which revision the component clones.\n *\n * - `default` — no `-b`; branch listing must use it, as a stale pinned branch fails the listing.\n * - `branch` — `git clone -b <branch>`.\n */\ntype GitRevision = { revision: 'default' } | { revision: 'branch'; branch: string };\n\nconst toRevision = (rev: GitRevision) => (rev.revision === 'branch' ? { branch: rev.branch } : {});\n\nexport type GitConfigDataInput = {\n repositoryUrl: string;\n auth: GitAuth;\n} & GitRevision;\n\n/** Data apps nest their repository a level deeper, and call the URL `repository`. */\nexport const buildDataAppConfigData = ({ repositoryUrl, auth, ...rev }: GitConfigDataInput) => ({\n parameters: {\n dataApp: {\n git: {\n repository: repositoryUrl,\n ...toCredentials(auth),\n ...toRevision(rev),\n },\n },\n },\n});\n\n/** dbt transformations keep the same settings at the top of `parameters`, under `repo`. */\nexport const buildDbtConfigData = ({ repositoryUrl, auth, ...rev }: GitConfigDataInput) => ({\n parameters: {\n git: {\n repo: repositoryUrl,\n ...toCredentials(auth),\n ...toRevision(rev),\n },\n },\n});\n","import { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport { isDataAppFamily } from './constants';\nimport {\n type GetBranchesInput,\n getBranchesInputSchema,\n type GetEntrypointsInput,\n getEntrypointsInputSchema,\n gitBranchesSchema,\n gitEntrypointsSchema,\n} from './schemas';\nimport { buildDataAppConfigData, buildDbtConfigData } from './utils';\n\n/**\n * Git repository actions, across both component families that serve them — the data apps\n * (`git-repository`) and the dbt transformations (`gitRepository`). Which action name and which\n * `configData` shape a call uses is resolved from `componentId`; see `./constants`.\n */\nexport const createGit = (sendSyncAction: SendSyncAction) => {\n const getBranches = async (input: GetBranchesInput, signal?: AbortSignal) => {\n const { componentId, repositoryUrl, auth, ...context } = parseOrThrow(\n getBranchesInputSchema,\n input,\n );\n const isDataApp = isDataAppFamily(componentId);\n const action = isDataApp ? SyncAction.DATA_APP_GIT_REPOSITORY : SyncAction.GIT_REPOSITORY;\n const buildConfigData = isDataApp ? buildDataAppConfigData : buildDbtConfigData;\n\n const data = await sendSyncAction(\n {\n ...context,\n componentId,\n action,\n configData: buildConfigData({ repositoryUrl, auth, revision: 'default' }),\n },\n { signal },\n );\n\n return parseOrThrow(gitBranchesSchema, data);\n };\n\n const getEntrypoints = async (input: GetEntrypointsInput, signal?: AbortSignal) => {\n const { componentId, repositoryUrl, auth, branch, ...context } = parseOrThrow(\n getEntrypointsInputSchema,\n input,\n );\n\n const data = await sendSyncAction(\n {\n ...context,\n componentId,\n action: SyncAction.DATA_APP_ENTRYPOINTS,\n // Data-app only — the input schema rejects every other component, so no family branch here.\n configData: buildDataAppConfigData({\n repositoryUrl,\n auth,\n ...(branch ? { revision: 'branch', branch } : { revision: 'default' }),\n }),\n },\n { signal },\n );\n\n return parseOrThrow(gitEntrypointsSchema, data);\n };\n\n return { getBranches, getEntrypoints };\n};\n","import * as z from 'zod';\n\nimport { syncActionContextSchema } from '../schemas';\n\nexport const testLookerCredentialsInputSchema = syncActionContextSchema.extend({\n credentialsId: z.string().min(1, 'Required'),\n '#token': z.string().min(1, 'Required'),\n host: z.string().min(1, 'Required'),\n});\n\n/** The component answers with a status envelope only — there is no payload to model. */\nexport const lookerCredentialsResultSchema = z.object({\n status: z.string().optional(),\n message: z.string().optional(),\n});\n\nexport type TestLookerCredentialsInput = z.infer<typeof testLookerCredentialsInputSchema>;\nexport type LookerCredentialsResult = z.infer<typeof lookerCredentialsResultSchema>;\n","import { ComponentId } from '../../../constants';\nimport { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport {\n lookerCredentialsResultSchema,\n type TestLookerCredentialsInput,\n testLookerCredentialsInputSchema,\n} from './schemas';\n\nexport const createLooker = (sendSyncAction: SendSyncAction) => {\n /** Registers the project's Looker credentials; throws `SyncActionError` when Looker rejects them. */\n const testCredentials = async (input: TestLookerCredentialsInput, signal?: AbortSignal) => {\n const {\n credentialsId,\n '#token': token,\n host,\n ...context\n } = parseOrThrow(testLookerCredentialsInputSchema, input);\n\n const data = await sendSyncAction(\n {\n ...context,\n action: SyncAction.TEST_LOOKER_CREDENTIALS,\n componentId: ComponentId.WR_LOOKER_V2,\n configData: { parameters: { looker: { credentialsId, '#token': token, host } } },\n },\n { signal },\n );\n\n return parseOrThrow(lookerCredentialsResultSchema, data);\n };\n\n return { testCredentials };\n};\n","import * as z from 'zod';\n\nexport const sshKeyPairSchema = z.object({\n status: z.literal('success'),\n public: z.string(),\n private: z.string(),\n});\n\nexport type SshKeyPair = z.infer<typeof sshKeyPairSchema>;\n","import { ComponentId } from '../../../constants';\nimport { parseOrThrow } from '../../../errors';\nimport { SyncAction } from '../constants';\nimport { type SyncActionContext, syncActionContextSchema } from '../schemas';\nimport type { SendSyncAction } from '../syncActionsClient';\n\nimport { sshKeyPairSchema } from './schemas';\n\nexport const createSshKeys = (sendSyncAction: SendSyncAction) => {\n /** Generates a new 4096-bit RSA key pair; the component keeps no copy. */\n const generate = async (input: SyncActionContext, signal?: AbortSignal) => {\n const context = parseOrThrow(syncActionContextSchema, input);\n\n const data = await sendSyncAction(\n {\n ...context,\n action: SyncAction.SSH_KEYS_GENERATE,\n componentId: ComponentId.SSH_KEYGEN_V2,\n configData: {},\n },\n { signal },\n );\n\n return parseOrThrow(sshKeyPairSchema, data);\n };\n\n return { generate };\n};\n","import { parseOrThrow } from '../../errors';\nimport type { ValidateStatusFn } from '../../fetchClient';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { syncActionValidateStatus } from './utils/response';\nimport { createApify } from './apify';\nimport { SyncAction } from './constants';\nimport { createDbt } from './dbt';\nimport { createFlowMigration } from './flowMigration';\nimport { createGit } from './git';\nimport { createLooker } from './looker';\nimport { type SyncActionBody, syncActionBodySchema } from './schemas';\nimport { createSshKeys } from './sshKeys';\nimport type { EnrollMFAInput, PostActionsBodyRaw } from './types';\n\nexport type SendSyncActionOptions = {\n signal?: AbortSignal;\n /** Replaces `syncActionValidateStatus` for this request; delegate to it for anything else. */\n validateStatus?: ValidateStatusFn;\n};\n\nconst createSendSyncAction = (client: SyncActionClient) => {\n return async (body: SyncActionBody, options: SendSyncActionOptions = {}) => {\n const { data } = await client.post(\n '/actions',\n // Generated `configData: Record<string, never>` is unsatisfiable; the schema is the contract.\n { body: parseOrThrow(syncActionBodySchema, body) as unknown as PostActionsBodyRaw },\n options,\n );\n\n return data;\n };\n};\n\nexport type SendSyncAction = ReturnType<typeof createSendSyncAction>;\ntype SyncActionClient = ReturnType<typeof createOpenapiFetchClient<paths>>;\n\nexport const createSyncActionsClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n validateStatus: syncActionValidateStatus,\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const sendSyncAction = createSendSyncAction(client);\n\n const enrollMFA = ({ email, ...rest }: EnrollMFAInput, signal?: AbortSignal) => {\n return sendSyncAction(\n {\n ...rest,\n action: SyncAction.ENROLL_MFA,\n configData: {\n parameters: {\n user: {\n email,\n },\n },\n },\n },\n { signal },\n );\n };\n\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n sendSyncAction,\n enrollMFA,\n apify: createApify(sendSyncAction),\n dbt: createDbt(sendSyncAction),\n flowMigration: createFlowMigration(sendSyncAction),\n git: createGit(sendSyncAction),\n looker: createLooker(sendSyncAction),\n sshKeys: createSshKeys(sendSyncAction),\n };\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_concurrent = require("./concurrent-tbiIa0UL.cjs");
1
+ const require_concurrent = require("./concurrent-CdVfR1N5.cjs");
2
2
  const require_generateUUID = require("./generateUUID-C6qKBPIv.cjs");
3
3
  //#region src/utils/keboolaUID.ts
4
4
  const KEBOOLA_OBJECT_ID_DELIMITER = "--";
@@ -172,4 +172,4 @@ Object.defineProperty(exports, "keboolaUID", {
172
172
  }
173
173
  });
174
174
 
175
- //# sourceMappingURL=tag-CsoOZWB_.cjs.map
175
+ //# sourceMappingURL=tag-DHS_soa7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tag-CsoOZWB_.cjs","names":["concurrent","generateUUID"],"sources":["../src/utils/keboolaUID.ts","../src/sdks/tag/tagSdk.ts"],"sourcesContent":["type KeboolaObjectType =\n | 'data-catalog'\n | 'table'\n | 'bucket'\n | 'flow'\n | 'configuration'\n | 'transformation'\n | 'data-app'\n | 'workspace';\n\nexport type KeboolaObjectId = {\n uid: string;\n type: KeboolaObjectType;\n projectId: number;\n};\n\n//As a delimiter for serialization, we use a double hyphen (--) instead of a single hyphen in type names.\nconst KEBOOLA_OBJECT_ID_DELIMITER = '--';\n\n/**\n * There is a proposal for a string format to identify objects in Keboola.\n *\n * https://keboola.atlassian.net/wiki/spaces/ENGG/pages/3967615431/Keboola+UUID+Format\n * Unfortunately, this format will not pass BE validation as `:` is not allowed in the `uid`, and the length is limited to 50 characters only.\n *\n */\nexport const keboolaUID = {\n serialize: (input: KeboolaObjectId): string => {\n if (input.uid === '')\n throw new Error('Invalid Keboola Object ID: uid of an object cannot be empty');\n\n return ['KID', input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);\n },\n\n deserialize: (input: string): KeboolaObjectId => {\n const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);\n if (identifier !== 'KID' || !projectId || !type || !uid)\n throw new Error('Invalid Keboola Object ID');\n\n return {\n projectId: Number(projectId),\n type: type as KeboolaObjectType,\n uid,\n };\n },\n};\n","import type { MetaObject, RawMetaObject } from '../../clients/metastore/repository/types';\nimport { concurrent, generateUUID, type KeboolaObjectId, keboolaUID } from '../../utils';\n\nimport type {\n CreateMetaObjectMetaDataInput,\n MetastoreClient,\n TagBindingData,\n TagData,\n TagWithBindings,\n UpdateMetaObjectMetaDataInput,\n} from './types';\n\nconst ObjectType = {\n TAG: 'tag',\n TAG_BINDING: 'tag-binding',\n};\ntype ObjectTypes = (typeof ObjectType)[keyof typeof ObjectType];\n\n// The live metastore envelope carries the data payload in `attributes`, the UUID in the\n// top-level `id`, and audit fields in `meta`. Normalize into { uuid, data, meta }.\nconst mapObject = <TData extends Record<string, unknown>>(\n item: RawMetaObject<TData>,\n): MetaObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createTagSdk = ({ metastoreClient }: Options) => {\n const _getTagMetaObjects = async <T extends Record<string, unknown>>(\n type: ObjectTypes,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<T>(\n {\n objectType: type,\n },\n signal,\n );\n return response.data.map(mapObject);\n };\n\n const _getAllTagBindingMapByTagId = async (signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);\n };\n\n const _getTagBindingMapByTagId = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n signal?: AbortSignal,\n ) => {\n const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);\n const objectUID = keboolaUID.serialize(objectId);\n return tagUUIDs.reduce<Record<string, MetaObject<TagBindingData> | null>>((acc, tagUUID) => {\n if (acc[tagUUID]) return acc; // filter out duplicated ids\n\n const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];\n acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;\n return acc;\n }, {});\n };\n\n const _deleteTagBindings = async (tagBindings: MetaObject<TagBindingData>[]) => {\n await concurrent({\n items: tagBindings,\n process: async (binding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: binding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const getTags = async (signal?: AbortSignal) => {\n const [tags, tagBindingMapByTagId] = await Promise.all([\n _getTagMetaObjects<TagData>(ObjectType.TAG, signal),\n _getAllTagBindingMapByTagId(signal),\n ]);\n\n return tags.map<TagWithBindings>((tag) => ({\n tag,\n bindings: tagBindingMapByTagId[tag.uuid] ?? [],\n }));\n };\n\n const getTagsByObjectId = async (objectId: KeboolaObjectId, signal?: AbortSignal) => {\n const tags = await getTags(signal);\n\n const keboolaObjectUID = keboolaUID.serialize(objectId);\n const mapByTagId = tags.reduce<Record<string, Set<string>>>((acc, { tag, bindings }) => {\n acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));\n return acc;\n }, {});\n\n return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));\n };\n\n const createTag = async (data: TagData, meta: CreateMetaObjectMetaDataInput = {}) => {\n const response = await metastoreClient.repository.createMetaObject<TagData>({\n objectType: ObjectType.TAG,\n data,\n name: generateUUID(),\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const updateTag = async (\n tagUUID: string,\n data: TagData,\n meta: UpdateMetaObjectMetaDataInput = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<TagData>({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n data,\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const deleteTag = async (tagUUID: string) => {\n const allBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING);\n const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);\n\n await Promise.all([\n // delete tag itself\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n }),\n // delete all tag associations\n _deleteTagBindings(tagBindings),\n ]);\n };\n\n const assignTags = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);\n // Assign only the unassigned tag IDs. Ignore the rest.\n const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);\n\n await concurrent({\n items: unassignedTagUUIDs,\n process: async (tagUUID) =>\n metastoreClient.repository.createMetaObject<TagBindingData>({\n objectType: ObjectType.TAG_BINDING,\n data: {\n objectUID: keboolaUID.serialize(objectId),\n tagUUID: tagUUID,\n },\n name: generateUUID(),\n ...meta,\n }),\n concurrency: 5,\n });\n };\n\n const unassignTags = async (tagUUIDs: string[], objectID: KeboolaObjectId) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);\n const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);\n\n const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]!);\n\n await concurrent({\n items: tagBindings,\n process: async (tagBinding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: tagBinding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const unassignAllTags = async (objectID: KeboolaObjectId, signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n\n const objectsTagBindings = tagBindings.filter(\n ({ data }) => data.objectUID === keboolaUID.serialize(objectID),\n );\n\n await _deleteTagBindings(objectsTagBindings);\n };\n\n const createAndAssignTag = async (\n data: TagData,\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tag = await createTag(data, meta);\n await assignTags([tag.uuid], objectId, meta);\n return tag;\n };\n\n return {\n // retrievals\n getTags,\n getTagsByObjectId,\n\n // modifications\n createTag,\n updateTag,\n deleteTag,\n assignTags,\n unassignTags,\n unassignAllTags,\n createAndAssignTag,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"tag-DHS_soa7.cjs","names":["concurrent","generateUUID"],"sources":["../src/utils/keboolaUID.ts","../src/sdks/tag/tagSdk.ts"],"sourcesContent":["type KeboolaObjectType =\n | 'data-catalog'\n | 'table'\n | 'bucket'\n | 'flow'\n | 'configuration'\n | 'transformation'\n | 'data-app'\n | 'workspace';\n\nexport type KeboolaObjectId = {\n uid: string;\n type: KeboolaObjectType;\n projectId: number;\n};\n\n//As a delimiter for serialization, we use a double hyphen (--) instead of a single hyphen in type names.\nconst KEBOOLA_OBJECT_ID_DELIMITER = '--';\n\n/**\n * There is a proposal for a string format to identify objects in Keboola.\n *\n * https://keboola.atlassian.net/wiki/spaces/ENGG/pages/3967615431/Keboola+UUID+Format\n * Unfortunately, this format will not pass BE validation as `:` is not allowed in the `uid`, and the length is limited to 50 characters only.\n *\n */\nexport const keboolaUID = {\n serialize: (input: KeboolaObjectId): string => {\n if (input.uid === '')\n throw new Error('Invalid Keboola Object ID: uid of an object cannot be empty');\n\n return ['KID', input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);\n },\n\n deserialize: (input: string): KeboolaObjectId => {\n const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);\n if (identifier !== 'KID' || !projectId || !type || !uid)\n throw new Error('Invalid Keboola Object ID');\n\n return {\n projectId: Number(projectId),\n type: type as KeboolaObjectType,\n uid,\n };\n },\n};\n","import type { MetaObject, RawMetaObject } from '../../clients/metastore/repository/types';\nimport { concurrent, generateUUID, type KeboolaObjectId, keboolaUID } from '../../utils';\n\nimport type {\n CreateMetaObjectMetaDataInput,\n MetastoreClient,\n TagBindingData,\n TagData,\n TagWithBindings,\n UpdateMetaObjectMetaDataInput,\n} from './types';\n\nconst ObjectType = {\n TAG: 'tag',\n TAG_BINDING: 'tag-binding',\n};\ntype ObjectTypes = (typeof ObjectType)[keyof typeof ObjectType];\n\n// The live metastore envelope carries the data payload in `attributes`, the UUID in the\n// top-level `id`, and audit fields in `meta`. Normalize into { uuid, data, meta }.\nconst mapObject = <TData extends Record<string, unknown>>(\n item: RawMetaObject<TData>,\n): MetaObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createTagSdk = ({ metastoreClient }: Options) => {\n const _getTagMetaObjects = async <T extends Record<string, unknown>>(\n type: ObjectTypes,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<T>(\n {\n objectType: type,\n },\n signal,\n );\n return response.data.map(mapObject);\n };\n\n const _getAllTagBindingMapByTagId = async (signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);\n };\n\n const _getTagBindingMapByTagId = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n signal?: AbortSignal,\n ) => {\n const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);\n const objectUID = keboolaUID.serialize(objectId);\n return tagUUIDs.reduce<Record<string, MetaObject<TagBindingData> | null>>((acc, tagUUID) => {\n if (acc[tagUUID]) return acc; // filter out duplicated ids\n\n const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];\n acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;\n return acc;\n }, {});\n };\n\n const _deleteTagBindings = async (tagBindings: MetaObject<TagBindingData>[]) => {\n await concurrent({\n items: tagBindings,\n process: async (binding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: binding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const getTags = async (signal?: AbortSignal) => {\n const [tags, tagBindingMapByTagId] = await Promise.all([\n _getTagMetaObjects<TagData>(ObjectType.TAG, signal),\n _getAllTagBindingMapByTagId(signal),\n ]);\n\n return tags.map<TagWithBindings>((tag) => ({\n tag,\n bindings: tagBindingMapByTagId[tag.uuid] ?? [],\n }));\n };\n\n const getTagsByObjectId = async (objectId: KeboolaObjectId, signal?: AbortSignal) => {\n const tags = await getTags(signal);\n\n const keboolaObjectUID = keboolaUID.serialize(objectId);\n const mapByTagId = tags.reduce<Record<string, Set<string>>>((acc, { tag, bindings }) => {\n acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));\n return acc;\n }, {});\n\n return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));\n };\n\n const createTag = async (data: TagData, meta: CreateMetaObjectMetaDataInput = {}) => {\n const response = await metastoreClient.repository.createMetaObject<TagData>({\n objectType: ObjectType.TAG,\n data,\n name: generateUUID(),\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const updateTag = async (\n tagUUID: string,\n data: TagData,\n meta: UpdateMetaObjectMetaDataInput = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<TagData>({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n data,\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const deleteTag = async (tagUUID: string) => {\n const allBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING);\n const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);\n\n await Promise.all([\n // delete tag itself\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n }),\n // delete all tag associations\n _deleteTagBindings(tagBindings),\n ]);\n };\n\n const assignTags = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);\n // Assign only the unassigned tag IDs. Ignore the rest.\n const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);\n\n await concurrent({\n items: unassignedTagUUIDs,\n process: async (tagUUID) =>\n metastoreClient.repository.createMetaObject<TagBindingData>({\n objectType: ObjectType.TAG_BINDING,\n data: {\n objectUID: keboolaUID.serialize(objectId),\n tagUUID: tagUUID,\n },\n name: generateUUID(),\n ...meta,\n }),\n concurrency: 5,\n });\n };\n\n const unassignTags = async (tagUUIDs: string[], objectID: KeboolaObjectId) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);\n const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);\n\n const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]!);\n\n await concurrent({\n items: tagBindings,\n process: async (tagBinding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: tagBinding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const unassignAllTags = async (objectID: KeboolaObjectId, signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n\n const objectsTagBindings = tagBindings.filter(\n ({ data }) => data.objectUID === keboolaUID.serialize(objectID),\n );\n\n await _deleteTagBindings(objectsTagBindings);\n };\n\n const createAndAssignTag = async (\n data: TagData,\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tag = await createTag(data, meta);\n await assignTags([tag.uuid], objectId, meta);\n return tag;\n };\n\n return {\n // retrievals\n getTags,\n getTagsByObjectId,\n\n // modifications\n createTag,\n updateTag,\n deleteTag,\n assignTags,\n unassignTags,\n unassignAllTags,\n createAndAssignTag,\n };\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as concurrent } from "./concurrent-CH9fbNr3.js";
1
+ import { t as concurrent } from "./concurrent-BacWxPwi.js";
2
2
  import { t as generateUUID } from "./generateUUID-Dr8l-aoc.js";
3
3
  //#region src/utils/keboolaUID.ts
4
4
  const KEBOOLA_OBJECT_ID_DELIMITER = "--";
@@ -161,4 +161,4 @@ const createTagSdk = ({ metastoreClient }) => {
161
161
  //#endregion
162
162
  export { keboolaUID as n, createTagSdk as t };
163
163
 
164
- //# sourceMappingURL=tag-DCsoewjL.js.map
164
+ //# sourceMappingURL=tag-hh-1nhNr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tag-DCsoewjL.js","names":[],"sources":["../src/utils/keboolaUID.ts","../src/sdks/tag/tagSdk.ts"],"sourcesContent":["type KeboolaObjectType =\n | 'data-catalog'\n | 'table'\n | 'bucket'\n | 'flow'\n | 'configuration'\n | 'transformation'\n | 'data-app'\n | 'workspace';\n\nexport type KeboolaObjectId = {\n uid: string;\n type: KeboolaObjectType;\n projectId: number;\n};\n\n//As a delimiter for serialization, we use a double hyphen (--) instead of a single hyphen in type names.\nconst KEBOOLA_OBJECT_ID_DELIMITER = '--';\n\n/**\n * There is a proposal for a string format to identify objects in Keboola.\n *\n * https://keboola.atlassian.net/wiki/spaces/ENGG/pages/3967615431/Keboola+UUID+Format\n * Unfortunately, this format will not pass BE validation as `:` is not allowed in the `uid`, and the length is limited to 50 characters only.\n *\n */\nexport const keboolaUID = {\n serialize: (input: KeboolaObjectId): string => {\n if (input.uid === '')\n throw new Error('Invalid Keboola Object ID: uid of an object cannot be empty');\n\n return ['KID', input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);\n },\n\n deserialize: (input: string): KeboolaObjectId => {\n const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);\n if (identifier !== 'KID' || !projectId || !type || !uid)\n throw new Error('Invalid Keboola Object ID');\n\n return {\n projectId: Number(projectId),\n type: type as KeboolaObjectType,\n uid,\n };\n },\n};\n","import type { MetaObject, RawMetaObject } from '../../clients/metastore/repository/types';\nimport { concurrent, generateUUID, type KeboolaObjectId, keboolaUID } from '../../utils';\n\nimport type {\n CreateMetaObjectMetaDataInput,\n MetastoreClient,\n TagBindingData,\n TagData,\n TagWithBindings,\n UpdateMetaObjectMetaDataInput,\n} from './types';\n\nconst ObjectType = {\n TAG: 'tag',\n TAG_BINDING: 'tag-binding',\n};\ntype ObjectTypes = (typeof ObjectType)[keyof typeof ObjectType];\n\n// The live metastore envelope carries the data payload in `attributes`, the UUID in the\n// top-level `id`, and audit fields in `meta`. Normalize into { uuid, data, meta }.\nconst mapObject = <TData extends Record<string, unknown>>(\n item: RawMetaObject<TData>,\n): MetaObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createTagSdk = ({ metastoreClient }: Options) => {\n const _getTagMetaObjects = async <T extends Record<string, unknown>>(\n type: ObjectTypes,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<T>(\n {\n objectType: type,\n },\n signal,\n );\n return response.data.map(mapObject);\n };\n\n const _getAllTagBindingMapByTagId = async (signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);\n };\n\n const _getTagBindingMapByTagId = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n signal?: AbortSignal,\n ) => {\n const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);\n const objectUID = keboolaUID.serialize(objectId);\n return tagUUIDs.reduce<Record<string, MetaObject<TagBindingData> | null>>((acc, tagUUID) => {\n if (acc[tagUUID]) return acc; // filter out duplicated ids\n\n const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];\n acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;\n return acc;\n }, {});\n };\n\n const _deleteTagBindings = async (tagBindings: MetaObject<TagBindingData>[]) => {\n await concurrent({\n items: tagBindings,\n process: async (binding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: binding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const getTags = async (signal?: AbortSignal) => {\n const [tags, tagBindingMapByTagId] = await Promise.all([\n _getTagMetaObjects<TagData>(ObjectType.TAG, signal),\n _getAllTagBindingMapByTagId(signal),\n ]);\n\n return tags.map<TagWithBindings>((tag) => ({\n tag,\n bindings: tagBindingMapByTagId[tag.uuid] ?? [],\n }));\n };\n\n const getTagsByObjectId = async (objectId: KeboolaObjectId, signal?: AbortSignal) => {\n const tags = await getTags(signal);\n\n const keboolaObjectUID = keboolaUID.serialize(objectId);\n const mapByTagId = tags.reduce<Record<string, Set<string>>>((acc, { tag, bindings }) => {\n acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));\n return acc;\n }, {});\n\n return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));\n };\n\n const createTag = async (data: TagData, meta: CreateMetaObjectMetaDataInput = {}) => {\n const response = await metastoreClient.repository.createMetaObject<TagData>({\n objectType: ObjectType.TAG,\n data,\n name: generateUUID(),\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const updateTag = async (\n tagUUID: string,\n data: TagData,\n meta: UpdateMetaObjectMetaDataInput = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<TagData>({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n data,\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const deleteTag = async (tagUUID: string) => {\n const allBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING);\n const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);\n\n await Promise.all([\n // delete tag itself\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n }),\n // delete all tag associations\n _deleteTagBindings(tagBindings),\n ]);\n };\n\n const assignTags = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);\n // Assign only the unassigned tag IDs. Ignore the rest.\n const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);\n\n await concurrent({\n items: unassignedTagUUIDs,\n process: async (tagUUID) =>\n metastoreClient.repository.createMetaObject<TagBindingData>({\n objectType: ObjectType.TAG_BINDING,\n data: {\n objectUID: keboolaUID.serialize(objectId),\n tagUUID: tagUUID,\n },\n name: generateUUID(),\n ...meta,\n }),\n concurrency: 5,\n });\n };\n\n const unassignTags = async (tagUUIDs: string[], objectID: KeboolaObjectId) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);\n const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);\n\n const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]!);\n\n await concurrent({\n items: tagBindings,\n process: async (tagBinding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: tagBinding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const unassignAllTags = async (objectID: KeboolaObjectId, signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n\n const objectsTagBindings = tagBindings.filter(\n ({ data }) => data.objectUID === keboolaUID.serialize(objectID),\n );\n\n await _deleteTagBindings(objectsTagBindings);\n };\n\n const createAndAssignTag = async (\n data: TagData,\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tag = await createTag(data, meta);\n await assignTags([tag.uuid], objectId, meta);\n return tag;\n };\n\n return {\n // retrievals\n getTags,\n getTagsByObjectId,\n\n // modifications\n createTag,\n updateTag,\n deleteTag,\n assignTags,\n unassignTags,\n unassignAllTags,\n createAndAssignTag,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"tag-hh-1nhNr.js","names":[],"sources":["../src/utils/keboolaUID.ts","../src/sdks/tag/tagSdk.ts"],"sourcesContent":["type KeboolaObjectType =\n | 'data-catalog'\n | 'table'\n | 'bucket'\n | 'flow'\n | 'configuration'\n | 'transformation'\n | 'data-app'\n | 'workspace';\n\nexport type KeboolaObjectId = {\n uid: string;\n type: KeboolaObjectType;\n projectId: number;\n};\n\n//As a delimiter for serialization, we use a double hyphen (--) instead of a single hyphen in type names.\nconst KEBOOLA_OBJECT_ID_DELIMITER = '--';\n\n/**\n * There is a proposal for a string format to identify objects in Keboola.\n *\n * https://keboola.atlassian.net/wiki/spaces/ENGG/pages/3967615431/Keboola+UUID+Format\n * Unfortunately, this format will not pass BE validation as `:` is not allowed in the `uid`, and the length is limited to 50 characters only.\n *\n */\nexport const keboolaUID = {\n serialize: (input: KeboolaObjectId): string => {\n if (input.uid === '')\n throw new Error('Invalid Keboola Object ID: uid of an object cannot be empty');\n\n return ['KID', input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);\n },\n\n deserialize: (input: string): KeboolaObjectId => {\n const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);\n if (identifier !== 'KID' || !projectId || !type || !uid)\n throw new Error('Invalid Keboola Object ID');\n\n return {\n projectId: Number(projectId),\n type: type as KeboolaObjectType,\n uid,\n };\n },\n};\n","import type { MetaObject, RawMetaObject } from '../../clients/metastore/repository/types';\nimport { concurrent, generateUUID, type KeboolaObjectId, keboolaUID } from '../../utils';\n\nimport type {\n CreateMetaObjectMetaDataInput,\n MetastoreClient,\n TagBindingData,\n TagData,\n TagWithBindings,\n UpdateMetaObjectMetaDataInput,\n} from './types';\n\nconst ObjectType = {\n TAG: 'tag',\n TAG_BINDING: 'tag-binding',\n};\ntype ObjectTypes = (typeof ObjectType)[keyof typeof ObjectType];\n\n// The live metastore envelope carries the data payload in `attributes`, the UUID in the\n// top-level `id`, and audit fields in `meta`. Normalize into { uuid, data, meta }.\nconst mapObject = <TData extends Record<string, unknown>>(\n item: RawMetaObject<TData>,\n): MetaObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createTagSdk = ({ metastoreClient }: Options) => {\n const _getTagMetaObjects = async <T extends Record<string, unknown>>(\n type: ObjectTypes,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<T>(\n {\n objectType: type,\n },\n signal,\n );\n return response.data.map(mapObject);\n };\n\n const _getAllTagBindingMapByTagId = async (signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);\n };\n\n const _getTagBindingMapByTagId = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n signal?: AbortSignal,\n ) => {\n const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);\n const objectUID = keboolaUID.serialize(objectId);\n return tagUUIDs.reduce<Record<string, MetaObject<TagBindingData> | null>>((acc, tagUUID) => {\n if (acc[tagUUID]) return acc; // filter out duplicated ids\n\n const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];\n acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;\n return acc;\n }, {});\n };\n\n const _deleteTagBindings = async (tagBindings: MetaObject<TagBindingData>[]) => {\n await concurrent({\n items: tagBindings,\n process: async (binding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: binding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const getTags = async (signal?: AbortSignal) => {\n const [tags, tagBindingMapByTagId] = await Promise.all([\n _getTagMetaObjects<TagData>(ObjectType.TAG, signal),\n _getAllTagBindingMapByTagId(signal),\n ]);\n\n return tags.map<TagWithBindings>((tag) => ({\n tag,\n bindings: tagBindingMapByTagId[tag.uuid] ?? [],\n }));\n };\n\n const getTagsByObjectId = async (objectId: KeboolaObjectId, signal?: AbortSignal) => {\n const tags = await getTags(signal);\n\n const keboolaObjectUID = keboolaUID.serialize(objectId);\n const mapByTagId = tags.reduce<Record<string, Set<string>>>((acc, { tag, bindings }) => {\n acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));\n return acc;\n }, {});\n\n return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));\n };\n\n const createTag = async (data: TagData, meta: CreateMetaObjectMetaDataInput = {}) => {\n const response = await metastoreClient.repository.createMetaObject<TagData>({\n objectType: ObjectType.TAG,\n data,\n name: generateUUID(),\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const updateTag = async (\n tagUUID: string,\n data: TagData,\n meta: UpdateMetaObjectMetaDataInput = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<TagData>({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n data,\n ...meta,\n });\n\n return mapObject(response.data);\n };\n\n const deleteTag = async (tagUUID: string) => {\n const allBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING);\n const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);\n\n await Promise.all([\n // delete tag itself\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n }),\n // delete all tag associations\n _deleteTagBindings(tagBindings),\n ]);\n };\n\n const assignTags = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);\n // Assign only the unassigned tag IDs. Ignore the rest.\n const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);\n\n await concurrent({\n items: unassignedTagUUIDs,\n process: async (tagUUID) =>\n metastoreClient.repository.createMetaObject<TagBindingData>({\n objectType: ObjectType.TAG_BINDING,\n data: {\n objectUID: keboolaUID.serialize(objectId),\n tagUUID: tagUUID,\n },\n name: generateUUID(),\n ...meta,\n }),\n concurrency: 5,\n });\n };\n\n const unassignTags = async (tagUUIDs: string[], objectID: KeboolaObjectId) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);\n const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);\n\n const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]!);\n\n await concurrent({\n items: tagBindings,\n process: async (tagBinding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: tagBinding.uuid,\n }),\n concurrency: 5,\n });\n };\n\n const unassignAllTags = async (objectID: KeboolaObjectId, signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n\n const objectsTagBindings = tagBindings.filter(\n ({ data }) => data.objectUID === keboolaUID.serialize(objectID),\n );\n\n await _deleteTagBindings(objectsTagBindings);\n };\n\n const createAndAssignTag = async (\n data: TagData,\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tag = await createTag(data, meta);\n await assignTags([tag.uuid], objectId, meta);\n return tag;\n };\n\n return {\n // retrievals\n getTags,\n getTagsByObjectId,\n\n // modifications\n createTag,\n updateTag,\n deleteTag,\n assignTags,\n unassignTags,\n unassignAllTags,\n createAndAssignTag,\n };\n};\n"],"mappings":"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"}