@keboola/api-client 36.0.0 → 39.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 (257) hide show
  1. package/AGENTS.md +12 -3
  2. package/API-SURFACE.md +14 -1
  3. package/CHANGELOG.md +74 -0
  4. package/README.md +19 -17
  5. package/dist/{ManagementClientAuthError-ey-f03vy.js → ManagementClientAuthError-Cr9IOsnJ.js} +3 -2
  6. package/dist/{ManagementClientAuthError-ey-f03vy.js.map → ManagementClientAuthError-Cr9IOsnJ.js.map} +1 -1
  7. package/dist/{ManagementClientAuthError-DD4u0EU7.cjs → ManagementClientAuthError-FcfMJNhr.cjs} +3 -2
  8. package/dist/{ManagementClientAuthError-DD4u0EU7.cjs.map → ManagementClientAuthError-FcfMJNhr.cjs.map} +1 -1
  9. package/dist/ai/index.cjs +2 -2
  10. package/dist/ai/index.js +2 -2
  11. package/dist/{appLogs-BjfUoWzs.cjs → appLogs-C_zP0lpv.cjs} +2 -2
  12. package/dist/{appLogs-BjfUoWzs.cjs.map → appLogs-C_zP0lpv.cjs.map} +1 -1
  13. package/dist/{appLogs-xsVkTriU.js → appLogs-Cl7Q_MR9.js} +2 -2
  14. package/dist/{appLogs-xsVkTriU.js.map → appLogs-Cl7Q_MR9.js.map} +1 -1
  15. package/dist/apps/index.cjs +3 -3
  16. package/dist/apps/index.js +3 -3
  17. package/dist/assets/index.cjs +1 -1
  18. package/dist/assets/index.js +1 -1
  19. package/dist/auth/index.cjs +1 -1
  20. package/dist/auth/index.js +1 -1
  21. package/dist/{auth-aItmDu45.js → auth-BjmkFOgd.js} +2 -2
  22. package/dist/{auth-aItmDu45.js.map → auth-BjmkFOgd.js.map} +1 -1
  23. package/dist/{auth-JQ33o3nU.cjs → auth-DLWnl18b.cjs} +2 -2
  24. package/dist/{auth-JQ33o3nU.cjs.map → auth-DLWnl18b.cjs.map} +1 -1
  25. package/dist/{authClient-_PpvGgZJ.cjs → authClient-8yU1last.cjs} +5 -5
  26. package/dist/{authClient-_PpvGgZJ.cjs.map → authClient-8yU1last.cjs.map} +1 -1
  27. package/dist/{authClient-D7W9vWPR.js → authClient-BTo4Afm6.js} +5 -5
  28. package/dist/{authClient-D7W9vWPR.js.map → authClient-BTo4Afm6.js.map} +1 -1
  29. package/dist/billing/index.cjs +2 -2
  30. package/dist/billing/index.js +2 -2
  31. package/dist/businessWorkspaceApi/index.cjs +3 -0
  32. package/dist/businessWorkspaceApi/index.d.cts +2 -0
  33. package/dist/businessWorkspaceApi/index.d.ts +2 -0
  34. package/dist/businessWorkspaceApi/index.js +2 -0
  35. package/dist/businessWorkspaceApi/types.cjs +0 -0
  36. package/dist/businessWorkspaceApi/types.d.cts +2 -0
  37. package/dist/businessWorkspaceApi/types.d.ts +2 -0
  38. package/dist/businessWorkspaceApi/types.js +1 -0
  39. package/dist/businessWorkspaceApi-BD-iUj07.js +61 -0
  40. package/dist/businessWorkspaceApi-BD-iUj07.js.map +1 -0
  41. package/dist/businessWorkspaceApi-wyBdbpIJ.cjs +66 -0
  42. package/dist/businessWorkspaceApi-wyBdbpIJ.cjs.map +1 -0
  43. package/dist/businessWorkspaceApiClient-C2WyWN3b.d.ts +529 -0
  44. package/dist/businessWorkspaceApiClient-CRM1U8b-.d.cts +529 -0
  45. package/dist/chat/index.cjs +5 -5
  46. package/dist/chat/index.cjs.map +1 -1
  47. package/dist/chat/index.d.cts +1 -1
  48. package/dist/chat/index.d.ts +1 -1
  49. package/dist/chat/index.js +5 -5
  50. package/dist/chat/index.js.map +1 -1
  51. package/dist/constants/index.cjs +1 -1
  52. package/dist/constants/index.d.cts +2 -2
  53. package/dist/constants/index.d.ts +2 -2
  54. package/dist/constants/index.js +1 -1
  55. package/dist/{constants-wfbFsqqN.js → constants-C2tYAJSj.js} +10 -1
  56. package/dist/constants-C2tYAJSj.js.map +1 -0
  57. package/dist/{constants-C4DlsF_M.cjs → constants-C6xku_Vx.cjs} +10 -1
  58. package/dist/constants-C6xku_Vx.cjs.map +1 -0
  59. package/dist/{createFetchClient-DgMiqTJ8.cjs → createFetchClient-BlgPbjFj.cjs} +14 -2
  60. package/dist/createFetchClient-BlgPbjFj.cjs.map +1 -0
  61. package/dist/{createFetchClient-U-ZrwPl2.js → createFetchClient-C-cadpBx.js} +14 -2
  62. package/dist/createFetchClient-C-cadpBx.js.map +1 -0
  63. package/dist/{createGenericFetchClient-rxvUUbap.js → createGenericFetchClient-Bnf1QK9W.js} +2 -2
  64. package/dist/{createGenericFetchClient-rxvUUbap.js.map → createGenericFetchClient-Bnf1QK9W.js.map} +1 -1
  65. package/dist/{createGenericFetchClient-o3cPJeRn.cjs → createGenericFetchClient-lcozzwk2.cjs} +2 -2
  66. package/dist/{createGenericFetchClient-o3cPJeRn.cjs.map → createGenericFetchClient-lcozzwk2.cjs.map} +1 -1
  67. package/dist/{createOpenapiFetchClient-DhUU3M1W.cjs → createOpenapiFetchClient-C3UmDXpe.cjs} +2 -2
  68. package/dist/{createOpenapiFetchClient-DhUU3M1W.cjs.map → createOpenapiFetchClient-C3UmDXpe.cjs.map} +1 -1
  69. package/dist/{createOpenapiFetchClient-BVSc9ibR.js → createOpenapiFetchClient-COaPeeQ0.js} +2 -2
  70. package/dist/{createOpenapiFetchClient-BVSc9ibR.js.map → createOpenapiFetchClient-COaPeeQ0.js.map} +1 -1
  71. package/dist/{credential-DVWvJFJs.cjs → credential-CAulvfZ-.cjs} +2 -2
  72. package/dist/{credential-DVWvJFJs.cjs.map → credential-CAulvfZ-.cjs.map} +1 -1
  73. package/dist/{credential-CihSf_xs.js → credential-DWXbo4IX.js} +2 -2
  74. package/dist/{credential-CihSf_xs.js.map → credential-DWXbo4IX.js.map} +1 -1
  75. package/dist/dataScience/index.cjs +2 -2
  76. package/dist/dataScience/index.js +2 -2
  77. package/dist/{dataScience-C1gO5zUn.js → dataScience-B_BmnB1m.js} +5 -5
  78. package/dist/{dataScience-C1gO5zUn.js.map → dataScience-B_BmnB1m.js.map} +1 -1
  79. package/dist/{dataScience-0Rl_EuV_.cjs → dataScience-D-hyc4GY.cjs} +5 -5
  80. package/dist/{dataScience-0Rl_EuV_.cjs.map → dataScience-D-hyc4GY.cjs.map} +1 -1
  81. package/dist/developerPortal/index.cjs +1 -1
  82. package/dist/developerPortal/index.js +1 -1
  83. package/dist/{developerPortalClient-ki0XS_OD.cjs → developerPortalClient-CutPqoAa.cjs} +3 -3
  84. package/dist/{developerPortalClient-ki0XS_OD.cjs.map → developerPortalClient-CutPqoAa.cjs.map} +1 -1
  85. package/dist/{developerPortalClient-C_48z8BN.js → developerPortalClient-yHFTkKPb.js} +3 -3
  86. package/dist/{developerPortalClient-C_48z8BN.js.map → developerPortalClient-yHFTkKPb.js.map} +1 -1
  87. package/dist/domain/permissions/index.d.cts +2 -2
  88. package/dist/domain/permissions/index.d.ts +2 -2
  89. package/dist/editor/index.cjs +2 -2
  90. package/dist/editor/index.js +2 -2
  91. package/dist/encryption/index.cjs +1 -1
  92. package/dist/encryption/index.d.cts +1 -1
  93. package/dist/encryption/index.d.ts +1 -1
  94. package/dist/encryption/index.js +1 -1
  95. package/dist/encryption/types.d.cts +1 -1
  96. package/dist/encryption/types.d.ts +1 -1
  97. package/dist/import/index.cjs +1 -1
  98. package/dist/import/index.js +1 -1
  99. package/dist/{import-C83w7BKz.cjs → import-7YyyD_U_.cjs} +3 -3
  100. package/dist/{import-C83w7BKz.cjs.map → import-7YyyD_U_.cjs.map} +1 -1
  101. package/dist/{import-CROEK82b.js → import-xliONVib.js} +3 -3
  102. package/dist/{import-CROEK82b.js.map → import-xliONVib.js.map} +1 -1
  103. package/dist/{index-D8rcUbnk.d.ts → index-1r_CskjU.d.ts} +2 -2
  104. package/dist/{index-BXF-bs2d.d.ts → index-BK-qHT39.d.ts} +8 -4
  105. package/dist/{index-DIAyi-EZ.d.cts → index-CHXnJQ9s.d.cts} +92 -14
  106. package/dist/{index-BDG-LKXj.d.cts → index-CWoEnDJ_.d.cts} +8 -4
  107. package/dist/{index-NaYLwG_h.d.ts → index-DBklbaTp.d.cts} +9 -1
  108. package/dist/{index-NaYLwG_h.d.cts → index-DBklbaTp.d.ts} +9 -1
  109. package/dist/{index-BgLnWTZU.d.cts → index-DVw4Av4b.d.cts} +4 -4
  110. package/dist/{index-DR4QqItd.d.cts → index-DWf6FXOr.d.cts} +2 -2
  111. package/dist/{index-CqgtL2NU.d.ts → index-De5qUWhp.d.ts} +4 -4
  112. package/dist/{index-2JM0gyAf.d.ts → index-GfKzh267.d.ts} +92 -14
  113. package/dist/index.cjs +30 -19
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.d.cts +3 -3
  116. package/dist/index.d.ts +3 -3
  117. package/dist/index.js +30 -20
  118. package/dist/index.js.map +1 -1
  119. package/dist/{isLoginPageRedirect-B0EmRsHr.cjs → isLoginPageRedirect-Cm6Pn8Pj.cjs} +2 -2
  120. package/dist/{isLoginPageRedirect-B0EmRsHr.cjs.map → isLoginPageRedirect-Cm6Pn8Pj.cjs.map} +1 -1
  121. package/dist/{isLoginPageRedirect-BTTAedW-.js → isLoginPageRedirect-hyPqyWNX.js} +2 -2
  122. package/dist/{isLoginPageRedirect-BTTAedW-.js.map → isLoginPageRedirect-hyPqyWNX.js.map} +1 -1
  123. package/dist/kaiAgent/index.cjs +1 -1
  124. package/dist/kaiAgent/index.d.cts +1 -1
  125. package/dist/kaiAgent/index.d.ts +1 -1
  126. package/dist/kaiAgent/index.js +1 -1
  127. package/dist/kaiAgent/types.d.cts +2 -2
  128. package/dist/kaiAgent/types.d.ts +2 -2
  129. package/dist/{kaiAgent-8LNzGhZc.js → kaiAgent-CcT2oNip.js} +41 -6
  130. package/dist/kaiAgent-CcT2oNip.js.map +1 -0
  131. package/dist/{kaiAgent-B_TaUPRt.cjs → kaiAgent-DaB6UCsh.cjs} +41 -6
  132. package/dist/kaiAgent-DaB6UCsh.cjs.map +1 -0
  133. package/dist/{kaiAgentClient-BJj_2aqt.d.ts → kaiAgentClient-B5L4gbQ1.d.ts} +8 -3
  134. package/dist/{kaiAgentClient-DhTaM3GC.d.cts → kaiAgentClient-CHpULyeG.d.cts} +8 -3
  135. package/dist/management/index.cjs +1 -1
  136. package/dist/management/index.d.cts +2 -2
  137. package/dist/management/index.d.ts +2 -2
  138. package/dist/management/index.js +1 -1
  139. package/dist/management/types.d.cts +2 -2
  140. package/dist/management/types.d.ts +2 -2
  141. package/dist/{management-BoxlRNg2.cjs → management-DeZiQSlw.cjs} +41 -8
  142. package/dist/management-DeZiQSlw.cjs.map +1 -0
  143. package/dist/{management-Bp440RsV.js → management-ckdnu1dA.js} +41 -8
  144. package/dist/management-ckdnu1dA.js.map +1 -0
  145. package/dist/metastore/index.cjs +1 -1
  146. package/dist/metastore/index.js +1 -1
  147. package/dist/{metastore-BYYWTb3m.cjs → metastore-9AGrwjmN.cjs} +4 -4
  148. package/dist/{metastore-BYYWTb3m.cjs.map → metastore-9AGrwjmN.cjs.map} +1 -1
  149. package/dist/{metastore-VCDRVhUT.js → metastore-B0PolCjQ.js} +4 -4
  150. package/dist/{metastore-VCDRVhUT.js.map → metastore-B0PolCjQ.js.map} +1 -1
  151. package/dist/microsoftGraph/index.cjs +2 -2
  152. package/dist/microsoftGraph/index.js +2 -2
  153. package/dist/notifications/index.cjs +3 -3
  154. package/dist/notifications/index.js +3 -3
  155. package/dist/oauth/index.cjs +1 -1
  156. package/dist/oauth/index.js +1 -1
  157. package/dist/{oauth--asfePw-.js → oauth-BnHVf4cB.js} +5 -5
  158. package/dist/{oauth--asfePw-.js.map → oauth-BnHVf4cB.js.map} +1 -1
  159. package/dist/{oauth-B8yqG6Sy.cjs → oauth-DNtv4Ihb.cjs} +5 -5
  160. package/dist/{oauth-B8yqG6Sy.cjs.map → oauth-DNtv4Ihb.cjs.map} +1 -1
  161. package/dist/omnisearch/index.cjs +2 -2
  162. package/dist/omnisearch/index.js +2 -2
  163. package/dist/{project-hePfzUY0.d.cts → project-BRpzv3yE.d.cts} +2 -2
  164. package/dist/{project-C2wvX0xZ.d.ts → project-DCHOxRWd.d.ts} +2 -2
  165. package/dist/queryService/index.cjs +1 -1
  166. package/dist/queryService/index.d.cts +1 -1
  167. package/dist/queryService/index.d.ts +1 -1
  168. package/dist/queryService/index.js +1 -1
  169. package/dist/{queryService-BVtjkXy1.cjs → queryService-BVwD6Vmc.cjs} +5 -5
  170. package/dist/{queryService-BVtjkXy1.cjs.map → queryService-BVwD6Vmc.cjs.map} +1 -1
  171. package/dist/{queryService-Ca65E5KH.js → queryService-j3XZ2mX6.js} +5 -5
  172. package/dist/{queryService-Ca65E5KH.js.map → queryService-j3XZ2mX6.js.map} +1 -1
  173. package/dist/queue/index.cjs +1 -1
  174. package/dist/queue/index.d.cts +1 -1
  175. package/dist/queue/index.d.ts +1 -1
  176. package/dist/queue/index.js +1 -1
  177. package/dist/{queue-DyotLFJi.js → queue-Dagl0sdP.js} +4 -4
  178. package/dist/{queue-DyotLFJi.js.map → queue-Dagl0sdP.js.map} +1 -1
  179. package/dist/{queue-OJJUUqc2.cjs → queue-e3rMWbmK.cjs} +4 -4
  180. package/dist/{queue-OJJUUqc2.cjs.map → queue-e3rMWbmK.cjs.map} +1 -1
  181. package/dist/scheduler/index.cjs +3 -3
  182. package/dist/scheduler/index.js +3 -3
  183. package/dist/sdk/configurations/index.d.cts +4 -4
  184. package/dist/sdk/configurations/index.d.ts +4 -4
  185. package/dist/sdk/developerPortal/index.cjs +3 -3
  186. package/dist/sdk/developerPortal/index.js +3 -3
  187. package/dist/sdk/queryService/index.d.cts +1 -1
  188. package/dist/sdk/queryService/index.d.ts +1 -1
  189. package/dist/sdk/semanticLayer/index.cjs +1 -1
  190. package/dist/sdk/semanticLayer/index.js +1 -1
  191. package/dist/sdk/storage/index.d.cts +1 -1
  192. package/dist/sdk/storage/index.d.ts +1 -1
  193. package/dist/sdk/vault/index.d.cts +1 -1
  194. package/dist/sdk/vault/index.d.ts +1 -1
  195. package/dist/{semanticLayer-CSqmtHRo.js → semanticLayer-6_gtFxDu.js} +38 -5
  196. package/dist/semanticLayer-6_gtFxDu.js.map +1 -0
  197. package/dist/{semanticLayer-E0Vilu8u.cjs → semanticLayer-9uTaU7UT.cjs} +38 -5
  198. package/dist/semanticLayer-9uTaU7UT.cjs.map +1 -0
  199. package/dist/{serviceIds-DRcoTnSd.d.ts → serviceIds-DC-H6ZD9.d.cts} +2 -1
  200. package/dist/{serviceIds-DRcoTnSd.d.cts → serviceIds-DC-H6ZD9.d.ts} +2 -1
  201. package/dist/status/index.cjs +1 -1
  202. package/dist/status/index.js +1 -1
  203. package/dist/storage/index.cjs +5 -4
  204. package/dist/storage/index.d.cts +2 -2
  205. package/dist/storage/index.d.ts +2 -2
  206. package/dist/storage/index.js +5 -5
  207. package/dist/storage/types.d.cts +3 -3
  208. package/dist/storage/types.d.ts +3 -3
  209. package/dist/{storage-BKm7cztt.cjs → storage-HFUdEy7P.cjs} +43 -6
  210. package/dist/storage-HFUdEy7P.cjs.map +1 -0
  211. package/dist/{storage-LYwFQPNO.js → storage-Ob1LUIDq.js} +38 -7
  212. package/dist/storage-Ob1LUIDq.js.map +1 -0
  213. package/dist/stream/index.cjs +3 -3
  214. package/dist/stream/index.js +3 -3
  215. package/dist/syncActions/index.cjs +1 -1
  216. package/dist/syncActions/index.js +1 -1
  217. package/dist/{syncActions-QeBhIVhG.js → syncActions-B3NS5a0g.js} +5 -5
  218. package/dist/{syncActions-QeBhIVhG.js.map → syncActions-B3NS5a0g.js.map} +1 -1
  219. package/dist/{syncActions-OEZdVffK.cjs → syncActions-D2DhY6pP.cjs} +5 -5
  220. package/dist/{syncActions-OEZdVffK.cjs.map → syncActions-D2DhY6pP.cjs.map} +1 -1
  221. package/dist/telemetry/index.cjs +3 -3
  222. package/dist/telemetry/index.js +3 -3
  223. package/dist/{types-CzsnuPFh.d.cts → types-B-P4vQe0.d.cts} +35 -2
  224. package/dist/{types-DEc55spK.d.ts → types-B95uNQ9o.d.ts} +3 -3
  225. package/dist/{types-BQsOHNI0.d.ts → types-BrPlv-NS.d.ts} +3 -3
  226. package/dist/{types-DjrRmQUe.d.cts → types-CmF3pR2n.d.cts} +3 -3
  227. package/dist/{types-f8W_j6qD.d.cts → types-Crhy0c9m.d.cts} +657 -199
  228. package/dist/{types-DPS8nwkV.d.cts → types-DOyNe7oe.d.cts} +2 -1
  229. package/dist/{types-BuqxXXYP.d.ts → types-DPl8pZsY.d.ts} +35 -2
  230. package/dist/{types-CaYtinmA.d.cts → types-D_j2Uq5X.d.cts} +3 -3
  231. package/dist/{types-BupPADSm.d.ts → types-DrqKICcK.d.ts} +657 -199
  232. package/dist/{types-DBOSvWtD.d.ts → types-gi4Eay19.d.ts} +2 -1
  233. package/dist/{validateConnectionStatus-olE2sQ3U.js → validateConnectionStatus-828HV8WL.js} +4 -3
  234. package/dist/validateConnectionStatus-828HV8WL.js.map +1 -0
  235. package/dist/{validateConnectionStatus-CsvYmCOI.cjs → validateConnectionStatus-CvBKyeDO.cjs} +4 -3
  236. package/dist/validateConnectionStatus-CvBKyeDO.cjs.map +1 -0
  237. package/dist/vault/index.cjs +4 -4
  238. package/dist/vault/index.js +4 -4
  239. package/package.json +28 -2
  240. package/surface/businessWorkspaceApi.md +12 -0
  241. package/surface/chat.md +1 -1
  242. package/surface/kaiAgent.md +5 -2
  243. package/surface/management.md +4 -0
  244. package/dist/constants-C4DlsF_M.cjs.map +0 -1
  245. package/dist/constants-wfbFsqqN.js.map +0 -1
  246. package/dist/createFetchClient-DgMiqTJ8.cjs.map +0 -1
  247. package/dist/createFetchClient-U-ZrwPl2.js.map +0 -1
  248. package/dist/kaiAgent-8LNzGhZc.js.map +0 -1
  249. package/dist/kaiAgent-B_TaUPRt.cjs.map +0 -1
  250. package/dist/management-BoxlRNg2.cjs.map +0 -1
  251. package/dist/management-Bp440RsV.js.map +0 -1
  252. package/dist/semanticLayer-CSqmtHRo.js.map +0 -1
  253. package/dist/semanticLayer-E0Vilu8u.cjs.map +0 -1
  254. package/dist/storage-BKm7cztt.cjs.map +0 -1
  255. package/dist/storage-LYwFQPNO.js.map +0 -1
  256. package/dist/validateConnectionStatus-CsvYmCOI.cjs.map +0 -1
  257. package/dist/validateConnectionStatus-olE2sQ3U.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"management-BoxlRNg2.cjs","names":["defaultValidateStatus","isLoginPageRedirect","ManagementClientAuthError","ManagementClientAuthError","createGenericFetchClient","KeboolaHttpHeader","dedupe","KeboolaHttpHeader","HttpHeader","createOpenapiFetchClient","createGenericFetchClient"],"sources":["../src/clients/management/validateStatus.ts","../src/clients/management/authMiddleware.ts","../src/clients/management/currentUser/currentUser.ts","../src/clients/management/deletedProjects/deletedProjects.ts","../src/clients/management/features/features.ts","../src/clients/management/fileStorage/fileStorage.ts","../src/clients/management/maintainers/maintainers.ts","../src/clients/management/organizations/organizations.ts","../src/clients/management/payAsYouGo/payAsYouGo.ts","../src/clients/management/projects/projects.ts","../src/clients/management/storageBackends/storageBackends.ts","../src/clients/management/uiApps/uiApps.ts","../src/clients/management/users/users.ts","../src/clients/management/managementClient.ts"],"sourcesContent":["import { ManagementClientAuthError } from '../../errors';\nimport { defaultValidateStatus, type ValidateStatusFn } from '../../fetchClient';\nimport { isLoginPageRedirect } from '../isLoginPageRedirect';\n\n/**\n * Status validation for the Manage API, which answers an expired session with the login page.\n *\n * - A *successful* login page is the followed redirect, and becomes `ManagementClientAuthError`.\n * - HTML on a failed response is a real error page (a proxy's 502) and stays an `ApiError`: reading\n * it as session expiry would sign the user out over a transient upstream blip.\n */\nexport const validateManagementStatus: ValidateStatusFn = (apiResponse) => {\n const isValid = defaultValidateStatus(apiResponse);\n\n if (isValid && isLoginPageRedirect(apiResponse)) {\n return new ManagementClientAuthError(\n 'Your session expired',\n 'You will be logged out automatically.',\n apiResponse,\n );\n }\n\n return isValid;\n};\n","import { ManagementClientAuthError } from '../../errors';\nimport { createGenericFetchClient, type MiddlewareFn } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport { dedupe } from '../../utils';\n\nimport type { ManagementToken } from './tokenTypes';\nimport { validateManagementStatus } from './validateStatus';\n\ntype ManagementTokenWithStringToken = { token: string } & ManagementToken;\n\n// Long enough to amortize verify calls over a burst of parallel queries at app\n// startup; short enough that a remotely revoked token is re-checked within a minute.\nconst TOKEN_CACHE_TTL_MS = 60_000;\n\nexport const isManagementClientAuthError = (error: unknown): error is ManagementClientAuthError =>\n error instanceof ManagementClientAuthError;\n\nconst createAuth = (baseUrl: string) => {\n const fetchClient = createGenericFetchClient({\n baseUrl,\n validateStatus: validateManagementStatus,\n });\n\n // Raw token verify — deliberately does NOT go through this middleware (which would recurse).\n const verifyManagementToken = async (accessToken: string) => {\n const headers = new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: accessToken });\n const { data } = await fetchClient.get<ManagementToken>(\n '/manage/tokens/verify',\n {},\n { headers },\n );\n return data;\n };\n\n const createCurrentUserSessionToken = async (accessToken: string) => {\n const headers = new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: accessToken });\n const { data } = await fetchClient.post<ManagementTokenWithStringToken>(\n '/manage/current-user/session-token',\n {},\n { headers },\n );\n return data.token;\n };\n\n // A session-expired redirect lands here as `200 text/html`; `validateManagementStatus` (on the\n // client above) turns it into a `ManagementClientAuthError`.\n const createAdminAccountSessionToken = async () => {\n const { data } = await fetchClient.post<ManagementTokenWithStringToken>(\n '/admin/account/session-token',\n {},\n );\n return data.token;\n };\n\n return {\n verifyManagementToken,\n createCurrentUserSessionToken,\n createAdminAccountSessionToken,\n };\n};\n\nexport const createAuthMiddleware = ({\n accessToken,\n baseUrl,\n}: {\n baseUrl: string;\n accessToken?: string;\n}): MiddlewareFn => {\n const auth = createAuth(baseUrl);\n\n let token: string | undefined = accessToken;\n let tokenValidUntil = 0;\n // oxlint-disable-next-line turbo/no-undeclared-env-vars\n const isDevelopment = process.env.NODE_ENV === 'development';\n\n const ensureValidToken = async () => {\n if (token && Date.now() < tokenValidUntil) return token;\n\n if (token) {\n const tokenInfo = await auth.verifyManagementToken(token);\n const isTokenValid = !tokenInfo.isDisabled && !tokenInfo.isExpired;\n if (isTokenValid) {\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n }\n token = isDevelopment\n ? await auth.createCurrentUserSessionToken(token)\n : await auth.createAdminAccountSessionToken();\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n }\n\n token = await auth.createAdminAccountSessionToken();\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n };\n\n // Deduplicate concurrent auth — all parallel requests share one inflight promise.\n const ensureValidTokenDeduped = dedupe(ensureValidToken);\n\n return (next) => async (request) => {\n const validToken = await ensureValidTokenDeduped();\n\n request.request.headers.set(KeboolaHttpHeader.MANAGEMENT_API_TOKEN, validToken);\n return next(request);\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nexport const createCurrentUser = (client: ManagementOpenApiFetchClient) => {\n const getMaintainerInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/maintainers-invitations',\n {},\n { signal },\n );\n return data;\n };\n\n const getMaintainerInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/maintainers-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptMaintainerInvitation = async (id: number) => {\n await client.put('/manage/current-user/maintainers-invitations/{id}', { path: { id } });\n };\n\n const rejectMaintainerInvitation = async (id: number) => {\n await client.delete('/manage/current-user/maintainers-invitations/{id}', { path: { id } });\n };\n\n const getOrganizationInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/organizations-invitations',\n {},\n { signal },\n );\n return data;\n };\n\n const getOrganizationInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/organizations-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptOrganizationInvitation = async (id: number) => {\n await client.put('/manage/current-user/organizations-invitations/{id}', { path: { id } });\n };\n\n const rejectOrganizationInvitation = async (id: number) => {\n await client.delete('/manage/current-user/organizations-invitations/{id}', { path: { id } });\n };\n\n const getProjectInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/current-user/projects-invitations', {}, { signal });\n return data;\n };\n\n const getProjectInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptProjectInvitation = async (id: number) => {\n await client.put('/manage/current-user/projects-invitations/{id}', { path: { id } });\n };\n\n const rejectProjectInvitation = async (id: number) => {\n await client.delete('/manage/current-user/projects-invitations/{id}', { path: { id } });\n };\n\n const getProjectJoinRequests = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-join-requests',\n {},\n { signal },\n );\n return data;\n };\n\n const getProjectJoinRequest = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-join-requests/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const deleteProjectJoinRequest = async (id: number) => {\n await client.delete('/manage/current-user/projects-join-requests/{id}', { path: { id } });\n };\n\n return {\n getMaintainerInvitations,\n getMaintainerInvitation,\n acceptMaintainerInvitation,\n rejectMaintainerInvitation,\n getOrganizationInvitations,\n getOrganizationInvitation,\n acceptOrganizationInvitation,\n rejectOrganizationInvitation,\n getProjectInvitations,\n getProjectInvitation,\n acceptProjectInvitation,\n rejectProjectInvitation,\n getProjectJoinRequests,\n getProjectJoinRequest,\n deleteProjectJoinRequest,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { DeletedProjectsListQuery } from './types';\n\nexport const createDeletedProjects = (client: ManagementOpenApiFetchClient) => {\n const getDeletedProjects = async (query?: DeletedProjectsListQuery, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/deleted-projects',\n {\n query: {\n limit: query?.limit ?? undefined,\n offset: query?.offset ?? undefined,\n organizationId: query?.organizationId ?? undefined,\n name: query?.name ?? undefined,\n },\n },\n { signal },\n );\n return data;\n };\n\n const getDeletedProject = async (projectId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/deleted-projects/{projectId}',\n { path: { projectId } },\n { signal },\n );\n return data;\n };\n\n /** Restore a deleted project (cancels deletion). Maps to DELETE /manage/deleted-projects/{projectId}\n * — note: the RFC says POST but the live schema uses DELETE. */\n const restoreDeletedProject = async (projectId: number) => {\n await client.delete('/manage/deleted-projects/{projectId}', { path: { projectId } });\n };\n\n /** Permanently purge a deleted project (irreversible). Pass `ignoreBackendErrors: true` to purge\n * even if backend-storage cleanup fails. Returns the enqueued purge command. */\n const purgeDeletedProject = async (projectId: number, ignoreBackendErrors = false) => {\n const { data } = await client.post('/manage/deleted-projects/{projectId}/purge', {\n path: { projectId },\n body: { ignoreBackendErrors },\n });\n return data;\n };\n\n return {\n getDeletedProjects,\n getDeletedProject,\n restoreDeletedProject,\n purgeDeletedProject,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { Feature, FeatureAdmin, FeatureProject, GetAllFeaturesQuery } from './types';\n\n// Read-only on purpose. The three write endpoints the schema declares are not exposed:\n//\n// - `POST /manage/features` — deprecated upstream; features are provisioned by migration.\n// - `PATCH /manage/features/{id}` — edits a definition shared by every project on the stack.\n// - `DELETE /manage/features/{id}` — removes it from every project that has it.\n//\n// Add one only alongside a caller that genuinely needs it.\nexport const createFeatures = (client: ManagementOpenApiFetchClient) => {\n const getAllFeatures = async (query: GetAllFeaturesQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/manage/features', { query }, { signal });\n return data as Feature[];\n };\n\n // The schema names the path parameter `id`; the public argument stays `featureId`.\n const getFeature = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}',\n { path: { id: featureId } },\n { signal },\n );\n return data as Feature;\n };\n\n const getFeatureProjects = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}/projects',\n { path: { id: featureId } },\n { signal },\n );\n // Every field is present on the response; the swagger just declares none of them required.\n return data as FeatureProject[];\n };\n\n const getFeatureAdmins = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}/admins',\n { path: { id: featureId } },\n { signal },\n );\n return data as FeatureAdmin[];\n };\n\n return {\n getAllFeatures,\n getFeature,\n getFeatureProjects,\n getFeatureAdmins,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreateFileStorageAbsBody,\n CreateFileStorageGcsBody,\n CreateFileStorageS3Body,\n FileStorageGcs,\n RotateFileStorageAbsInput,\n RotateFileStorageGcsInput,\n RotateFileStorageS3Input,\n} from './types';\n\n// The GCS methods return `FileStorageGcs`, which widens `gcsCredentials` — the generated schema models\n// it as `Record<string, never>`, where every property access would be `never`.\nexport const createFileStorage = (client: ManagementOpenApiFetchClient) => {\n const getFileStoragesS3 = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-s3', {}, { signal });\n return data;\n };\n\n const getFileStoragesAbs = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-abs', {}, { signal });\n return data;\n };\n\n const getFileStoragesGcs = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-gcs', {}, { signal });\n return data as FileStorageGcs[];\n };\n\n const createFileStorageS3 = async (body: CreateFileStorageS3Body) => {\n const { data } = await client.post('/manage/file-storage-s3', { body });\n return data;\n };\n\n const rotateFileStorageS3Credentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageS3Input) => {\n const { data } = await client.post('/manage/file-storage-s3/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data;\n };\n\n const setFileStorageS3Default = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-s3/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data;\n };\n\n const createFileStorageAbs = async (body: CreateFileStorageAbsBody) => {\n const { data } = await client.post('/manage/file-storage-abs', { body });\n return data;\n };\n\n const rotateFileStorageAbsCredentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageAbsInput) => {\n const { data } = await client.post('/manage/file-storage-abs/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data;\n };\n\n const setFileStorageAbsDefault = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-abs/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data;\n };\n\n const createFileStorageGcs = async (body: CreateFileStorageGcsBody) => {\n const { data } = await client.post('/manage/file-storage-gcs', { body });\n return data as FileStorageGcs;\n };\n\n const rotateFileStorageGcsCredentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageGcsInput) => {\n const { data } = await client.post('/manage/file-storage-gcs/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data as FileStorageGcs;\n };\n\n const setFileStorageGcsDefault = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-gcs/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data as FileStorageGcs;\n };\n\n return {\n getFileStoragesS3,\n getFileStoragesAbs,\n getFileStoragesGcs,\n createFileStorageS3,\n createFileStorageAbs,\n createFileStorageGcs,\n rotateFileStorageS3Credentials,\n rotateFileStorageAbsCredentials,\n rotateFileStorageGcsCredentials,\n setFileStorageS3Default,\n setFileStorageAbsDefault,\n setFileStorageGcsDefault,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n AddMaintainerUserInput,\n CompleteSamlSetupInput,\n CreateMaintainerBody,\n CreateMaintainerInvitationInput,\n CreateMaintainerOrganizationInput,\n CreateSamlConfigInput,\n Maintainer,\n MaintainerDetail,\n MaintainerInvitationPath,\n MaintainerMetadataItemPath,\n MaintainerUser,\n MaintainerUserPath,\n MetadataItem,\n SamlConfigPath,\n SetMaintainerMetadataInput,\n UpdateMaintainerInput,\n UpdateSamlConfigInput,\n} from './types';\n\nexport const createMaintainers = (client: ManagementOpenApiFetchClient) => {\n const getMaintainers = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/maintainers', {}, { signal });\n // The schema types each maintainer's `organizations` as bare objects; `Maintainer` overrides them.\n return data as unknown as Maintainer[];\n };\n\n const getMaintainer = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}',\n { path: { id: maintainerId } },\n { signal },\n );\n // The schema under-models the detail's `organizations`; the backend returns full objects.\n return data as unknown as MaintainerDetail;\n };\n\n const createMaintainer = async (body: CreateMaintainerBody) => {\n const { data } = await client.post('/manage/maintainers', { body });\n return data;\n };\n\n const updateMaintainer = async ({ maintainerId, ...body }: UpdateMaintainerInput) => {\n const { data } = await client.patch('/manage/maintainers/{id}', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const deleteMaintainer = async (maintainerId: number) => {\n await client.delete('/manage/maintainers/{id}', { path: { id: maintainerId } });\n };\n\n const getMaintainerUsers = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/users',\n { path: { id: maintainerId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as MaintainerUser[];\n };\n\n const addMaintainerUser = async ({ maintainerId, ...body }: AddMaintainerUserInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/users', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const removeMaintainerUser = async ({ maintainerId, adminId }: MaintainerUserPath) => {\n await client.delete('/manage/maintainers/{id}/users/{adminId}', {\n path: { id: maintainerId, adminId },\n });\n };\n\n const getMaintainerInvitations = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/invitations',\n { path: { id: maintainerId } },\n { signal },\n );\n return data;\n };\n\n const getMaintainerInvitation = async (\n { maintainerId, invitationId }: MaintainerInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/invitations/{invitationId}',\n { path: { id: maintainerId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const createMaintainerInvitation = async ({\n maintainerId,\n ...body\n }: CreateMaintainerInvitationInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/invitations', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const deleteMaintainerInvitation = async ({\n maintainerId,\n invitationId,\n }: MaintainerInvitationPath) => {\n await client.delete('/manage/maintainers/{id}/invitations/{invitationId}', {\n path: { id: maintainerId, invitationId },\n });\n };\n\n const createMaintainerOrganization = async ({\n maintainerId,\n ...body\n }: CreateMaintainerOrganizationInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/organizations', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const getMaintainerMetadata = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/metadata',\n { path: { id: maintainerId } },\n { signal },\n );\n // The swagger marks no field of the metadata items required; the backend sends them all.\n return data as MetadataItem[];\n };\n\n const setMaintainerMetadata = async ({ maintainerId, ...body }: SetMaintainerMetadataInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/metadata', {\n path: { id: maintainerId },\n body,\n });\n return data as MetadataItem[];\n };\n\n const deleteMaintainerMetadata = async ({\n maintainerId,\n metadataId,\n }: MaintainerMetadataItemPath) => {\n await client.delete('/manage/maintainers/{id}/metadata/{metadataId}', {\n path: { id: maintainerId, metadataId },\n });\n };\n\n const getMaintainerOrganizations = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/organizations',\n { path: { id: maintainerId } },\n { signal },\n );\n return data;\n };\n\n const joinMaintainer = async (maintainerId: number) => {\n await client.post('/manage/maintainers/{id}/join-maintainer', { path: { id: maintainerId } });\n };\n\n const getMaintainerSamlConfigs = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{maintainerId}/saml',\n { path: { maintainerId } },\n { signal },\n );\n return data;\n };\n\n const getMaintainerSamlConfig = async (\n { maintainerId, configId }: SamlConfigPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/maintainers/{maintainerId}/saml/{configId}',\n { path: { maintainerId, configId } },\n { signal },\n );\n return data;\n };\n\n const createMaintainerSamlConfig = async ({ maintainerId, ...body }: CreateSamlConfigInput) => {\n const { data } = await client.post('/manage/maintainers/{maintainerId}/saml', {\n path: { maintainerId },\n body,\n });\n return data;\n };\n\n const updateMaintainerSamlConfig = async ({\n maintainerId,\n configId,\n ...body\n }: UpdateSamlConfigInput) => {\n const { data } = await client.patch('/manage/maintainers/{maintainerId}/saml/{configId}', {\n path: { maintainerId, configId },\n body,\n });\n return data;\n };\n\n const completeMaintainerSamlSetup = async ({\n maintainerId,\n configId,\n ...body\n }: CompleteSamlSetupInput) => {\n const { data } = await client.post(\n '/manage/maintainers/{maintainerId}/saml/{configId}/complete-setup',\n { path: { maintainerId, configId }, body },\n );\n return data;\n };\n\n const deleteMaintainerSamlConfig = async ({ maintainerId, configId }: SamlConfigPath) => {\n await client.delete('/manage/maintainers/{maintainerId}/saml/{configId}', {\n path: { maintainerId, configId },\n });\n };\n\n return {\n getMaintainers,\n getMaintainer,\n createMaintainer,\n updateMaintainer,\n deleteMaintainer,\n getMaintainerUsers,\n addMaintainerUser,\n removeMaintainerUser,\n getMaintainerInvitations,\n getMaintainerInvitation,\n createMaintainerInvitation,\n deleteMaintainerInvitation,\n createMaintainerOrganization,\n getMaintainerMetadata,\n setMaintainerMetadata,\n deleteMaintainerMetadata,\n getMaintainerOrganizations,\n joinMaintainer,\n getMaintainerSamlConfigs,\n getMaintainerSamlConfig,\n createMaintainerSamlConfig,\n updateMaintainerSamlConfig,\n completeMaintainerSamlSetup,\n deleteMaintainerSamlConfig,\n };\n};\n","import type { MetadataItem } from '../maintainers/types';\nimport type { ManagementOpenApiFetchClient } from '../managementClient';\nimport type { Project } from '../projects/types';\n\nimport type {\n AddOrganizationUserInput,\n AdminUser,\n CreateOrganizationInvitationInput,\n CreateOrganizationProjectInput,\n OrganizationDetail,\n OrganizationInvitationPath,\n OrganizationMetadataItemPath,\n OrganizationUserPath,\n SetOrganizationMetadataInput,\n UpdateOrganizationInput,\n} from './types';\n\nexport const createOrganizations = (client: ManagementOpenApiFetchClient) => {\n const getOrganizations = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/organizations', {}, { signal });\n return data;\n };\n\n const getOrganization = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema's `projects` items carry only `{ id, name, created }`; the backend returns more.\n return data as unknown as OrganizationDetail;\n };\n\n const updateOrganization = async ({ organizationId, ...body }: UpdateOrganizationInput) => {\n const { data } = await client.patch('/manage/organizations/{id}', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const deleteOrganization = async (organizationId: number) => {\n await client.delete('/manage/organizations/{id}', { path: { id: organizationId } });\n };\n\n const forceMfa = async (organizationId: number) => {\n const { data } = await client.patch('/manage/organizations/{id}/force-mfa', {\n path: { id: organizationId },\n });\n return data;\n };\n\n const joinOrganization = async (organizationId: number) => {\n await client.post('/manage/organizations/{id}/join-organization', {\n path: { id: organizationId },\n });\n };\n\n const getOrganizationUsers = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/users',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as AdminUser[];\n };\n\n const addOrganizationUser = async ({ organizationId, ...body }: AddOrganizationUserInput) => {\n const { data } = await client.post('/manage/organizations/{id}/users', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const removeOrganizationUser = async ({ organizationId, userId }: OrganizationUserPath) => {\n await client.delete('/manage/organizations/{id}/users/{userId}', {\n path: { id: organizationId, userId },\n });\n };\n\n const getOrganizationProjectsUsers = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/projects-users',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as AdminUser[];\n };\n\n const getOrganizationInvitations = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/invitations',\n { path: { id: organizationId } },\n { signal },\n );\n return data;\n };\n\n const getOrganizationInvitation = async (\n { organizationId, invitationId }: OrganizationInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/invitations/{invitationId}',\n { path: { id: organizationId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const createOrganizationInvitation = async ({\n organizationId,\n ...body\n }: CreateOrganizationInvitationInput) => {\n const { data } = await client.post('/manage/organizations/{id}/invitations', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const deleteOrganizationInvitation = async ({\n organizationId,\n invitationId,\n }: OrganizationInvitationPath) => {\n await client.delete('/manage/organizations/{id}/invitations/{invitationId}', {\n path: { id: organizationId, invitationId },\n });\n };\n\n const getOrganizationProjects = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/projects',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema types the items as a bare object; the backend returns full project objects.\n return data as unknown as Project[];\n };\n\n const createOrganizationProject = async ({\n organizationId,\n ...body\n }: CreateOrganizationProjectInput) => {\n const { data } = await client.post('/manage/organizations/{id}/projects', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const getOrganizationMetadata = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/metadata',\n { path: { id: organizationId } },\n { signal },\n );\n // The swagger marks no field of the metadata items required; the backend sends them all.\n return data as MetadataItem[];\n };\n\n const setOrganizationMetadata = async ({\n organizationId,\n ...body\n }: SetOrganizationMetadataInput) => {\n const { data } = await client.post('/manage/organizations/{id}/metadata', {\n path: { id: organizationId },\n body,\n });\n return data as MetadataItem[];\n };\n\n const deleteOrganizationMetadata = async ({\n organizationId,\n metadataId,\n }: OrganizationMetadataItemPath) => {\n await client.delete('/manage/organizations/{id}/metadata/{metadataId}', {\n path: { id: organizationId, metadataId },\n });\n };\n\n return {\n getOrganizations,\n getOrganization,\n updateOrganization,\n deleteOrganization,\n forceMfa,\n joinOrganization,\n getOrganizationUsers,\n addOrganizationUser,\n removeOrganizationUser,\n getOrganizationProjectsUsers,\n getOrganizationInvitations,\n getOrganizationInvitation,\n createOrganizationInvitation,\n deleteOrganizationInvitation,\n getOrganizationProjects,\n createOrganizationProject,\n getOrganizationMetadata,\n setOrganizationMetadata,\n deleteOrganizationMetadata,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreatePaymentRequestBody,\n CreditPaymentRequest,\n CreditPurchase,\n PayAsYouGoBillingConfiguration,\n StripeCustomer,\n TopUpSetting,\n UpdateStripeCustomerBody,\n UpdateTopUpSettingBody,\n} from './types';\n\nexport const createPayAsYouGo = (client: ManagementOpenApiFetchClient) => {\n const getBillingConfiguration = async (\n signal?: AbortSignal,\n ): Promise<PayAsYouGoBillingConfiguration> => {\n const { data } = await client.get('/pay-as-you-go/billing/configuration', {}, { signal });\n return data as PayAsYouGoBillingConfiguration;\n };\n\n const getCreditPurchases = async (\n idProject: number,\n signal?: AbortSignal,\n ): Promise<CreditPurchase[]> => {\n const { data } = await client.post(\n '/pay-as-you-go/billing/credits',\n { body: { idProject } },\n { signal },\n );\n return data as CreditPurchase[];\n };\n\n const getStripeCustomer = async (\n idProject: number,\n signal?: AbortSignal,\n ): Promise<StripeCustomer | null> => {\n const { data } = await client.get(\n '/pay-as-you-go/billing/stripe-customer',\n { query: { idProject } },\n { signal },\n );\n return data;\n };\n\n const updateStripeCustomer = async (body: UpdateStripeCustomerBody) => {\n const { data } = await client.put('/pay-as-you-go/billing/stripe-customer', { body });\n return data;\n };\n\n const getTopUpSetting = async (\n projectId: number,\n signal?: AbortSignal,\n ): Promise<TopUpSetting> => {\n const { data } = await client.get(\n '/pay-as-you-go/billing/top-up/{projectId}',\n { path: { projectId } },\n { signal },\n );\n return data as TopUpSetting;\n };\n\n const updateTopUpSetting = async (body: UpdateTopUpSettingBody) => {\n await client.put('/pay-as-you-go/billing/top-up', { body });\n };\n\n const createPaymentRequest = async (\n body: CreatePaymentRequestBody,\n ): Promise<CreditPaymentRequest> => {\n const { data } = await client.post('/pay-as-you-go/billing/create-payment-request', { body });\n return data as CreditPaymentRequest;\n };\n\n return {\n getBillingConfiguration,\n getCreditPurchases,\n getStripeCustomer,\n updateStripeCustomer,\n getTopUpSetting,\n updateTopUpSetting,\n createPaymentRequest,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\nimport type { User } from '../types';\n\nimport type {\n AddProjectUserBody,\n AddProjectUserPath,\n AssignProjectTemplateFeatureInput,\n ChangeProjectUserRoleInput,\n CreateProjectFeatureBody,\n CreateProjectFeaturePath,\n CreateProjectInvitationBody,\n CreateProjectInvitationPath,\n DeleteProjectInvitationPath,\n DeleteProjectMetadataPath,\n GetProjectMetadataPath,\n GetProjectPath,\n GetProjectReviewersPath,\n JoinProjectInput,\n ListProjectInvitationsPath,\n ListProjectJoinRequestsPath,\n ListProjectUsersPath,\n MoveProjectInput,\n Project,\n ProjectBase,\n ProjectInvitableRole,\n ProjectJoinRequestPath,\n ProjectMetadataItem,\n RemoveProjectFeaturePath,\n RemoveProjectLimitPath,\n RemoveProjectTemplateFeaturePath,\n RemoveProjectUserPath,\n RequestProjectAccessInput,\n Reviewer,\n SetProjectDisabledInput,\n SetProjectLimitsInput,\n SetProjectMetadataBody,\n SetProjectMetadataPath,\n SetProjectReviewersBody,\n SetProjectReviewersPath,\n UpdateProjectInput,\n} from './types';\n\n// The schema types every `projectId` path parameter as a number while these methods accept\n// `number | string`, since legacy call sites hold project ids as strings. Coercing keeps that input\n// contract without widening the schema — `Number('123')` and `123` build the same path.\n//\n// This client is scoped to a project's own settings and membership. Five write endpoints the schema\n// files under `/manage/projects/{projectId}/` reach past that, and are deliberately not exposed here —\n// the capability isn't denied, it just belongs to the namespace that owns it:\n//\n// - `POST …/tokens` — mints a Storage token. Storage tokens live in `api.storage.tokens`, where the\n// permission model is visible at the call site.\n// - `POST …/storage-backend` and its `DELETE`, and `POST …/file-storage` — attach or detach storage\n// infrastructure. `api.management.storageBackends` and `api.management.fileStorage` own that.\n// - `POST …/credits` — grants pay-as-you-go credits; a billing operation with no home here.\n//\n// Add one only alongside a caller that genuinely needs it.\nexport const createProjects = (client: ManagementOpenApiFetchClient) => {\n const getProject = async (projectId: GetProjectPath['projectId'], signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data as unknown as Project;\n };\n\n const getProjectTemplates = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/project-templates', {}, { signal });\n return data;\n };\n\n const addProjectFeature = async ({\n projectId,\n feature,\n }: CreateProjectFeaturePath & CreateProjectFeatureBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/features', {\n path: { projectId },\n body: { feature },\n });\n return data as ProjectBase;\n };\n\n const removeProjectFeature = async ({ projectId, feature }: RemoveProjectFeaturePath) => {\n await client.delete('/manage/projects/{projectId}/features/{feature}', {\n path: { projectId, feature },\n });\n return null;\n };\n\n const changeProjectUserRole = async ({ projectId, userId, role }: ChangeProjectUserRoleInput) => {\n const { data } = await client.patch('/manage/projects/{projectId}/users/{userId}', {\n path: { projectId, userId },\n // The schema's role enum lists only the four non-SOX roles; a project with a protected default\n // branch really does accept `productionManager` / `developer` / `reviewer` here.\n body: { role: role as ProjectInvitableRole },\n });\n\n return data as User;\n };\n\n const getProjectUsers = async (\n projectId: ListProjectUsersPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/users',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n // The schema types the items as a bare object; the backend returns full user objects.\n return data as unknown as User[];\n };\n\n const getProjectInvitations = async (\n projectId: ListProjectInvitationsPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/invitations',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data;\n };\n\n const createProjectInvitation = async ({\n projectId,\n ...body\n }: CreateProjectInvitationPath & CreateProjectInvitationBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/invitations', {\n path: { projectId },\n // Same schema gap as `changeProjectUserRole` — the SOX roles are accepted but undocumented.\n body: { ...body, role: body.role as ProjectInvitableRole },\n });\n return data;\n };\n\n const deleteProjectInvitation = async ({\n projectId,\n invitationId,\n }: DeleteProjectInvitationPath) => {\n await client.delete('/manage/projects/{projectId}/invitations/{invitationId}', {\n path: { projectId, invitationId },\n });\n return null;\n };\n\n const addProjectUser = async ({\n projectId,\n ...body\n }: AddProjectUserPath & AddProjectUserBody) => {\n // 204 No Content — the endpoint answers with an empty body, not the created user.\n await client.post('/manage/projects/{projectId}/users', { path: { projectId }, body });\n return null;\n };\n\n const removeProjectUser = async ({ projectId, idOrEmail }: RemoveProjectUserPath) => {\n await client.delete('/manage/projects/{projectId}/users/{idOrEmail}', {\n path: { projectId, idOrEmail: String(idOrEmail) },\n });\n return null;\n };\n\n const getProjectJoinRequests = async (\n projectId: ListProjectJoinRequestsPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/join-requests',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data;\n };\n\n const approveProjectJoinRequest = async ({\n projectId,\n joinRequestId,\n }: ProjectJoinRequestPath) => {\n await client.put('/manage/projects/{projectId}/join-requests/{joinRequestId}', {\n path: { projectId, joinRequestId },\n });\n return null;\n };\n\n const rejectProjectJoinRequest = async ({ projectId, joinRequestId }: ProjectJoinRequestPath) => {\n await client.delete('/manage/projects/{projectId}/join-requests/{joinRequestId}', {\n path: { projectId, joinRequestId },\n });\n return null;\n };\n\n const getProjectMetadata = async (\n projectId: GetProjectMetadataPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/metadata',\n { path: { projectId } },\n { signal },\n );\n // Every field is present on the response; the swagger just declares none of them required.\n return data as ProjectMetadataItem[];\n };\n\n const setProjectMetadata = async ({\n projectId,\n provider,\n metadata,\n }: SetProjectMetadataPath & SetProjectMetadataBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/metadata', {\n path: { projectId },\n body: { provider, metadata },\n });\n return data as ProjectMetadataItem[];\n };\n\n const getProjectReviewers = async (\n projectId: GetProjectReviewersPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/reviewers',\n { path: { projectId } },\n { signal },\n );\n return data as Reviewer[];\n };\n\n const setProjectReviewers = async ({\n projectId,\n adminIds,\n }: SetProjectReviewersPath & SetProjectReviewersBody) => {\n await client.put('/manage/projects/{projectId}/reviewers', {\n path: { projectId },\n body: { adminIds },\n });\n };\n\n const updateProject = async ({ projectId, ...body }: UpdateProjectInput) => {\n const { data } = await client.put('/manage/projects/{projectId}', {\n path: { projectId },\n body,\n });\n return data as ProjectBase;\n };\n\n const deleteProject = async (projectId: number) => {\n await client.delete('/manage/projects/{projectId}', { path: { projectId } });\n return null;\n };\n\n const moveProject = async ({ projectId, organizationId }: MoveProjectInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/organizations', {\n path: { projectId },\n body: { organizationId },\n });\n return data as ProjectBase;\n };\n\n const setProjectDisabled = async ({ projectId, ...body }: SetProjectDisabledInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/disabled', {\n path: { projectId },\n body,\n });\n return data as ProjectBase;\n };\n\n const setProjectLimits = async ({ projectId, ...body }: SetProjectLimitsInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/limits', {\n path: { projectId },\n body,\n });\n return data as unknown as Project;\n };\n\n const getProjectTemplate = async (templateId: string, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/project-templates/{templateId}',\n { path: { templateId } },\n { signal },\n );\n return data;\n };\n\n const getProjectTemplateFeatures = async (templateId: string, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/project-templates/{templateId}/features',\n { path: { templateId } },\n { signal },\n );\n return data;\n };\n\n const addProjectTemplateFeature = async ({\n templateId,\n ...body\n }: AssignProjectTemplateFeatureInput) => {\n await client.post('/manage/project-templates/{templateId}/features', {\n path: { templateId },\n body,\n });\n };\n\n const removeProjectTemplateFeature = async ({\n templateId,\n featureName,\n }: RemoveProjectTemplateFeaturePath) => {\n await client.delete('/manage/project-templates/{templateId}/features/{featureName}', {\n path: { templateId, featureName },\n });\n };\n\n const getProjectInvitation = async (\n { projectId, invitationId }: DeleteProjectInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/invitations/{invitationId}',\n { path: { projectId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const getProjectJoinRequest = async (\n { projectId, joinRequestId }: ProjectJoinRequestPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/join-requests/{joinRequestId}',\n { path: { projectId, joinRequestId } },\n { signal },\n );\n return data;\n };\n\n const joinProject = async ({ projectId, ...body }: JoinProjectInput) => {\n await client.post('/manage/projects/{projectId}/join-project', { path: { projectId }, body });\n };\n\n const requestProjectAccess = async ({ projectId, ...body }: RequestProjectAccessInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/request-access', {\n path: { projectId },\n body,\n });\n return data;\n };\n\n const removeProjectLimit = async ({ projectId, limitName }: RemoveProjectLimitPath) => {\n await client.delete('/manage/projects/{projectId}/limits/{limitName}', {\n path: { projectId, limitName },\n });\n };\n\n const deleteProjectMetadata = async ({ projectId, metadataId }: DeleteProjectMetadataPath) => {\n await client.delete('/manage/projects/{projectId}/metadata/{metadataId}', {\n path: { projectId, metadataId },\n });\n };\n\n return {\n getProject,\n getProjectTemplates,\n addProjectFeature,\n removeProjectFeature,\n changeProjectUserRole,\n getProjectUsers,\n getProjectInvitations,\n createProjectInvitation,\n deleteProjectInvitation,\n addProjectUser,\n removeProjectUser,\n getProjectJoinRequests,\n approveProjectJoinRequest,\n rejectProjectJoinRequest,\n getProjectMetadata,\n setProjectMetadata,\n getProjectReviewers,\n setProjectReviewers,\n updateProject,\n deleteProject,\n moveProject,\n setProjectDisabled,\n setProjectLimits,\n getProjectTemplate,\n getProjectTemplateFeatures,\n addProjectTemplateFeature,\n removeProjectTemplateFeature,\n getProjectInvitation,\n getProjectJoinRequest,\n joinProject,\n requestProjectAccess,\n removeProjectLimit,\n deleteProjectMetadata,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreateBigqueryStorageBackendBody,\n CreateSnowflakeStorageBackendBody,\n GetStorageBackendProjectsQuery,\n StorageBackend,\n UpdateBigqueryStorageBackendInput,\n UpdateStorageBackendInput,\n} from './types';\n\nexport const createStorageBackends = (client: ManagementOpenApiFetchClient) => {\n // `StorageBackend` weakens three fields the schema marks required — see its doc comment.\n const getStorageBackend = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get('/manage/storage-backend/{id}', { path: { id } }, { signal });\n return data as StorageBackend;\n };\n\n const getStorageBackends = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/storage-backend', {}, { signal });\n return data as StorageBackend[];\n };\n\n /** Projects assigned to this backend, paginated via `limit`/`offset`. */\n const getStorageBackendProjects = async (\n id: number,\n query?: GetStorageBackendProjectsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/storage-backend/{id}/projects',\n { path: { id }, query: { limit: query?.limit, offset: query?.offset } },\n { signal },\n );\n return data;\n };\n\n /** Maintainers assigned to this backend — small, unpaginated list. */\n const getStorageBackendMaintainers = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/storage-backend/{id}/maintainers',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const createSnowflakeStorageBackend = async (body: CreateSnowflakeStorageBackendBody) => {\n const { data } = await client.post('/manage/storage-backend/snowflake', { body });\n return data;\n };\n\n const createBigqueryStorageBackend = async (body: CreateBigqueryStorageBackendBody) => {\n const { data } = await client.post('/manage/storage-backend/bigquery', { body });\n return data;\n };\n\n const updateStorageBackend = async ({ id, ...body }: UpdateStorageBackendInput) => {\n const { data } = await client.patch('/manage/storage-backend/{id}', { path: { id }, body });\n return data;\n };\n\n const updateBigqueryStorageBackend = async ({\n id,\n ...body\n }: UpdateBigqueryStorageBackendInput) => {\n const { data } = await client.patch('/manage/storage-backend/{id}/bigquery', {\n path: { id },\n body,\n });\n return data;\n };\n\n const activateStorageBackend = async (backendId: number) => {\n const { data } = await client.post('/manage/storage-backend/{backendId}/activate', {\n path: { backendId },\n });\n return data;\n };\n\n const deleteStorageBackend = async (id: number) => {\n await client.delete('/manage/storage-backend/{id}', { path: { id } });\n };\n\n return {\n getStorageBackend,\n getStorageBackends,\n getStorageBackendProjects,\n getStorageBackendMaintainers,\n createSnowflakeStorageBackend,\n createBigqueryStorageBackend,\n updateStorageBackend,\n updateBigqueryStorageBackend,\n activateStorageBackend,\n deleteStorageBackend,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { ActivateUiAppVersionPath, RegisterUiAppBody } from './types';\n\nexport const createUiApps = (client: ManagementOpenApiFetchClient) => {\n const getUiApps = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/ui-apps', {}, { signal });\n return data;\n };\n\n const registerUiApp = async (body: RegisterUiAppBody) => {\n const { data } = await client.post('/manage/ui-apps', { body });\n return data;\n };\n\n const activateUiAppVersion = async ({ id, version }: ActivateUiAppVersionPath) => {\n await client.post('/manage/ui-apps/{id}/activate/{version}', { path: { id, version } });\n };\n\n const deleteUiApp = async (id: string) => {\n await client.delete('/manage/ui-apps/{id}', { path: { id } });\n };\n\n return {\n getUiApps,\n registerUiApp,\n activateUiAppVersion,\n deleteUiApp,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n AddUserFeatureBody,\n AddUserFeaturePath,\n DeleteUserMetadataPath,\n GetUsersQuery,\n RemoveUserFeaturePath,\n SetUserMetadataInput,\n UpdateUserInput,\n UserDetail,\n UserListItem,\n UserMaintainerMembership,\n UserOrganizationMembership,\n UserProjectMembership,\n} from './types';\n\n// The schema names the path parameters `idOrEmail` / `featureName`; the public arguments keep the\n// names call sites already use. `createPath` percent-encodes every path parameter, so an email must\n// NOT be encoded here as well — doing so double-encodes it (`a@b.com` → `a%2540b.com`).\nexport const createUsers = (client: ManagementOpenApiFetchClient) => {\n const addUserAdminFeature = async (\n { feature, userIdOrMail }: AddUserFeatureBody & AddUserFeaturePath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/manage/users/{idOrEmail}/features',\n { path: { idOrEmail: userIdOrMail }, body: { feature } },\n { signal },\n );\n return data;\n };\n\n const removeUserAdminFeature = async (\n { userIdOrMail, feature }: RemoveUserFeaturePath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/manage/users/{idOrEmail}/features/{featureName}',\n { path: { idOrEmail: userIdOrMail, featureName: feature } },\n { signal },\n );\n return data;\n };\n\n /** Paginated list of all users, filterable via `q` (name/email substring). */\n const getUsers = async (query?: GetUsersQuery, signal?: AbortSignal): Promise<UserListItem[]> => {\n const { data } = await client.get(\n '/manage/users',\n { query: { q: query?.q, limit: query?.limit, offset: query?.offset } },\n { signal },\n );\n return data;\n };\n\n const getUser = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.get(\n '/manage/users/{idOrEmail}',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const getUserOrganizations = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserOrganizationMembership[]> => {\n const { data } = await client.get(\n '/manage/users/{id}/organizations',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const getUserProjects = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserProjectMembership[]> => {\n const { data } = await client.get('/manage/users/{id}/projects', { path: { id } }, { signal });\n return data;\n };\n\n const getUserMaintainers = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserMaintainerMembership[]> => {\n const { data } = await client.get(\n '/manage/users/{id}/maintainers',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n /** Requires the target user to have MFA enabled (422 otherwise). Superadmin-only. */\n const grantSuperAdmin = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.post(\n '/manage/users/{id}/super-admin',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const removeSuperAdmin = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.delete(\n '/manage/users/{idOrEmail}/super-admin',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const disableUserMfa = async (id: number, signal?: AbortSignal): Promise<void> => {\n await client.delete(\n '/manage/users/{idOrEmail}/mfa',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n };\n\n const deleteUser = async (id: number, signal?: AbortSignal): Promise<void> => {\n await client.delete(\n '/manage/users/{idOrEmail}',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n };\n\n const updateUser = async ({ id, ...body }: UpdateUserInput) => {\n const { data } = await client.put('/manage/users/{idOrEmail}', {\n path: { idOrEmail: String(id) },\n body,\n });\n return data;\n };\n\n const getUserMetadata = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/users/{idOrEmail}/metadata',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const setUserMetadata = async ({ id, ...body }: SetUserMetadataInput) => {\n const { data } = await client.post('/manage/users/{idOrEmail}/metadata', {\n path: { idOrEmail: String(id) },\n body,\n });\n return data;\n };\n\n const deleteUserMetadata = async ({ id, metadataId }: DeleteUserMetadataPath) => {\n await client.delete('/manage/users/{idOrEmail}/metadata/{metadataId}', {\n path: { idOrEmail: String(id), metadataId },\n });\n };\n\n return {\n addUserAdminFeature,\n removeUserAdminFeature,\n getUsers,\n getUser,\n getUserOrganizations,\n getUserProjects,\n getUserMaintainers,\n grantSuperAdmin,\n removeSuperAdmin,\n disableUserMfa,\n deleteUser,\n updateUser,\n getUserMetadata,\n setUserMetadata,\n deleteUserMetadata,\n };\n};\n","import {\n createGenericFetchClient,\n createOpenapiFetchClient,\n HttpHeader,\n type MiddlewareFn,\n} from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { createAuthMiddleware } from './authMiddleware';\nimport { createCurrentUser } from './currentUser';\nimport { createDeletedProjects } from './deletedProjects';\nimport { createFeatures } from './features';\nimport { createFileStorage } from './fileStorage';\nimport { createMaintainers } from './maintainers';\nimport { createOrganizations } from './organizations';\nimport { createPayAsYouGo } from './payAsYouGo';\nimport { createProjects } from './projects';\nimport { createStorageBackends } from './storageBackends';\nimport { createUiApps } from './uiApps';\nimport { createUsers } from './users';\nimport { validateManagementStatus } from './validateStatus';\n\nexport type ManagementOpenApiFetchClient = ReturnType<typeof createOpenapiFetchClient<paths>>;\n\nexport type AuthStrategy =\n | { type: 'management-token'; token?: string }\n | { type: 'bearer'; token: string };\n\n// Only invoked on the raw (no-auth-middleware) path — otherwise the auth middleware\n// owns the Manage API token header.\nconst createAuthHeaders = (auth: AuthStrategy): Record<string, string> => {\n if (auth.type === 'management-token')\n return auth.token ? { [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: auth.token } : {};\n\n return { [HttpHeader.AUTHORIZATION]: `Bearer ${auth.token}` };\n};\n\ntype ManagementClientInitOptions = Omit<ClientInitOptions, 'auth' | 'middlewares'> & {\n auth: AuthStrategy;\n middlewares?: MiddlewareFn[];\n withAuthMiddleware?: boolean;\n};\n\nexport const createManagementClient = ({\n baseUrl,\n middlewares = [],\n auth,\n withAuthMiddleware = true,\n}: ManagementClientInitOptions) => {\n // The auth middleware keeps a long-lived management session alive: it verifies the\n // token and, when it's invalid/expired, mints/refreshes a session token. That self-healing\n // is wrong for a plain \"is this token valid?\" check (it would recurse when used to verify,\n // and mint a session instead of reporting invalid). Pass `withAuthMiddleware: false` to get\n // a raw client that just attaches the token — used for token verification.\n const allMiddlewares =\n withAuthMiddleware && auth.type === 'management-token'\n ? [\n ...middlewares,\n createAuthMiddleware({ baseUrl, accessToken: auth.token }), // 👈 order of middlewares always matters\n ]\n : middlewares;\n\n const headers = withAuthMiddleware ? undefined : createAuthHeaders(auth);\n\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares: allMiddlewares,\n headers,\n validateStatus: validateManagementStatus,\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const verifyToken = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/tokens/verify', {}, { signal });\n return data;\n };\n\n // Host-level: Connection serves the storage, management and auth APIs off one baseUrl, so this\n // probes the host, not this API's prefix — `/v2/storage/health-check`, `/manage/health-check`\n // and `/v1/auth/health-check` all 404.\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 currentUser: createCurrentUser(client),\n deletedProjects: createDeletedProjects(client),\n maintainers: createMaintainers(client),\n organizations: createOrganizations(client),\n payAsYouGo: createPayAsYouGo(client),\n features: createFeatures(client),\n fileStorage: createFileStorage(client),\n projects: createProjects(client),\n storageBackends: createStorageBackends(client),\n uiApps: createUiApps(client),\n users: createUsers(client),\n verifyToken,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;AAWA,MAAa,4BAA8C,gBAAgB;CACzE,MAAM,UAAUA,0BAAAA,sBAAsB,WAAW;CAEjD,IAAI,WAAWC,4BAAAA,oBAAoB,WAAW,GAC5C,OAAO,IAAIC,kCAAAA,0BACT,wBACA,yCACA,WACF;CAGF,OAAO;AACT;;;ACXA,MAAM,qBAAqB;AAE3B,MAAa,+BAA+B,UAC1C,iBAAiBC,kCAAAA;AAEnB,MAAM,cAAc,YAAoB;CACtC,MAAM,cAAcC,iCAAAA,yBAAyB;EAC3C;EACA,gBAAgB;CAClB,CAAC;CAGD,MAAM,wBAAwB,OAAO,gBAAwB;EAC3D,MAAM,UAAU,IAAI,QAAQ,GAAGC,0BAAAA,kBAAkB,uBAAuB,YAAY,CAAC;EACrF,MAAM,EAAE,SAAS,MAAM,YAAY,IACjC,yBACA,CAAC,GACD,EAAE,QAAQ,CACZ;EACA,OAAO;CACT;CAEA,MAAM,gCAAgC,OAAO,gBAAwB;EACnE,MAAM,UAAU,IAAI,QAAQ,GAAGA,0BAAAA,kBAAkB,uBAAuB,YAAY,CAAC;EACrF,MAAM,EAAE,SAAS,MAAM,YAAY,KACjC,sCACA,CAAC,GACD,EAAE,QAAQ,CACZ;EACA,OAAO,KAAK;CACd;CAIA,MAAM,iCAAiC,YAAY;EACjD,MAAM,EAAE,SAAS,MAAM,YAAY,KACjC,gCACA,CAAC,CACH;EACA,OAAO,KAAK;CACd;CAEA,OAAO;EACL;EACA;EACA;CACF;AACF;AAEA,MAAa,wBAAwB,EACnC,aACA,cAIkB;CAClB,MAAM,OAAO,WAAW,OAAO;CAE/B,IAAI,QAA4B;CAChC,IAAI,kBAAkB;CAEtB,MAAM,gBAAgB,QAAQ,IAAI,aAAa;CAE/C,MAAM,mBAAmB,YAAY;EACnC,IAAI,SAAS,KAAK,IAAI,IAAI,iBAAiB,OAAO;EAElD,IAAI,OAAO;GACT,MAAM,YAAY,MAAM,KAAK,sBAAsB,KAAK;GAExD,IADqB,CAAC,UAAU,cAAc,CAAC,UAAU,WACvC;IAChB,kBAAkB,KAAK,IAAI,IAAI;IAC/B,OAAO;GACT;GACA,QAAQ,gBACJ,MAAM,KAAK,8BAA8B,KAAK,IAC9C,MAAM,KAAK,+BAA+B;GAC9C,kBAAkB,KAAK,IAAI,IAAI;GAC/B,OAAO;EACT;EAEA,QAAQ,MAAM,KAAK,+BAA+B;EAClD,kBAAkB,KAAK,IAAI,IAAI;EAC/B,OAAO;CACT;CAGA,MAAM,0BAA0BC,eAAAA,OAAO,gBAAgB;CAEvD,QAAQ,SAAS,OAAO,YAAY;EAClC,MAAM,aAAa,MAAM,wBAAwB;EAEjD,QAAQ,QAAQ,QAAQ,IAAID,0BAAAA,kBAAkB,sBAAsB,UAAU;EAC9E,OAAO,KAAK,OAAO;CACrB;AACF;;;ACxGA,MAAa,qBAAqB,WAAyC;CACzE,MAAM,2BAA2B,OAAO,WAAyB;EAC/D,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,gDACA,CAAC,GACD,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,IAAY,WAAyB;EAC1E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,qDACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,OAAe;EACvD,MAAM,OAAO,IAAI,qDAAqD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACxF;CAEA,MAAM,6BAA6B,OAAO,OAAe;EACvD,MAAM,OAAO,OAAO,qDAAqD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CAC3F;CAEA,MAAM,6BAA6B,OAAO,WAAyB;EACjE,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,kDACA,CAAC,GACD,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,4BAA4B,OAAO,IAAY,WAAyB;EAC5E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,uDACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,+BAA+B,OAAO,OAAe;EACzD,MAAM,OAAO,IAAI,uDAAuD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CAC1F;CAEA,MAAM,+BAA+B,OAAO,OAAe;EACzD,MAAM,OAAO,OAAO,uDAAuD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CAC7F;CAEA,MAAM,wBAAwB,OAAO,WAAyB;EAC5D,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,6CAA6C,CAAC,GAAG,EAAE,OAAO,CAAC;EAC7F,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,IAAY,WAAyB;EACvE,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,kDACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,OAAe;EACpD,MAAM,OAAO,IAAI,kDAAkD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACrF;CAEA,MAAM,0BAA0B,OAAO,OAAe;EACpD,MAAM,OAAO,OAAO,kDAAkD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACxF;CAEA,MAAM,yBAAyB,OAAO,WAAyB;EAC7D,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,+CACA,CAAC,GACD,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,wBAAwB,OAAO,IAAY,WAAyB;EACxE,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,oDACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,2BAA2B,OAAO,OAAe;EACrD,MAAM,OAAO,OAAO,oDAAoD,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CAC1F;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AChHA,MAAa,yBAAyB,WAAyC;CAC7E,MAAM,qBAAqB,OAAO,OAAkC,WAAyB;EAC3F,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,4BACA,EACE,OAAO;GACL,OAAO,OAAO,SAAS,KAAA;GACvB,QAAQ,OAAO,UAAU,KAAA;GACzB,gBAAgB,OAAO,kBAAkB,KAAA;GACzC,MAAM,OAAO,QAAQ,KAAA;EACvB,EACF,GACA,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,oBAAoB,OAAO,WAAmB,WAAyB;EAC3E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,wCACA,EAAE,MAAM,EAAE,UAAU,EAAE,GACtB,EAAE,OAAO,CACX;EACA,OAAO;CACT;;;CAIA,MAAM,wBAAwB,OAAO,cAAsB;EACzD,MAAM,OAAO,OAAO,wCAAwC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;CACrF;;;CAIA,MAAM,sBAAsB,OAAO,WAAmB,sBAAsB,UAAU;EACpF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,8CAA8C;GAC/E,MAAM,EAAE,UAAU;GAClB,MAAM,EAAE,oBAAoB;EAC9B,CAAC;EACD,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;;;ACzCA,MAAa,kBAAkB,WAAyC;CACtE,MAAM,iBAAiB,OAAO,OAA4B,WAAyB;EACjF,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,oBAAoB,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC;EAC3E,OAAO;CACT;CAGA,MAAM,aAAa,OAAO,WAAmB,WAAyB;EACpE,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,yBACA,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,GAC1B,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,WAAmB,WAAyB;EAC5E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,kCACA,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,GAC1B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,WAAmB,WAAyB;EAC1E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,gCACA,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,GAC1B,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;;;ACtCA,MAAa,qBAAqB,WAAyC;CACzE,MAAM,oBAAoB,OAAO,WAAyB;EACxD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,2BAA2B,CAAC,GAAG,EAAE,OAAO,CAAC;EAC3E,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,WAAyB;EACzD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,4BAA4B,CAAC,GAAG,EAAE,OAAO,CAAC;EAC5E,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,WAAyB;EACzD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,4BAA4B,CAAC,GAAG,EAAE,OAAO,CAAC;EAC5E,OAAO;CACT;CAEA,MAAM,sBAAsB,OAAO,SAAkC;EACnE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,2BAA2B,EAAE,KAAK,CAAC;EACtE,OAAO;CACT;CAEA,MAAM,iCAAiC,OAAO,EAC5C,eACA,GAAG,WAC2B;EAC9B,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,uDAAuD;GACxF,MAAM,EAAE,cAAc;GACtB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,kBAA0B;EAC/D,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,mDAAmD,EACpF,MAAM,EAAE,cAAc,EACxB,CAAC;EACD,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,SAAmC;EACrE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,4BAA4B,EAAE,KAAK,CAAC;EACvE,OAAO;CACT;CAEA,MAAM,kCAAkC,OAAO,EAC7C,eACA,GAAG,WAC4B;EAC/B,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,wDAAwD;GACzF,MAAM,EAAE,cAAc;GACtB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,2BAA2B,OAAO,kBAA0B;EAChE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,oDAAoD,EACrF,MAAM,EAAE,cAAc,EACxB,CAAC;EACD,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,SAAmC;EACrE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,4BAA4B,EAAE,KAAK,CAAC;EACvE,OAAO;CACT;CAEA,MAAM,kCAAkC,OAAO,EAC7C,eACA,GAAG,WAC4B;EAC/B,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,wDAAwD;GACzF,MAAM,EAAE,cAAc;GACtB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,2BAA2B,OAAO,kBAA0B;EAChE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,oDAAoD,EACrF,MAAM,EAAE,cAAc,EACxB,CAAC;EACD,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AC3FA,MAAa,qBAAqB,WAAyC;CACzE,MAAM,iBAAiB,OAAO,WAAyB;EACrD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC;EAEvE,OAAO;CACT;CAEA,MAAM,gBAAgB,OAAO,cAAsB,WAAyB;EAC1E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,4BACA,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,GAC7B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,SAA+B;EAC7D,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,uBAAuB,EAAE,KAAK,CAAC;EAClE,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,EAAE,cAAc,GAAG,WAAkC;EACnF,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,4BAA4B;GAC9D,MAAM,EAAE,IAAI,aAAa;GACzB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,iBAAyB;EACvD,MAAM,OAAO,OAAO,4BAA4B,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;CAChF;CAEA,MAAM,qBAAqB,OAAO,cAAsB,WAAyB;EAC/E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,kCACA,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,GAC7B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,oBAAoB,OAAO,EAAE,cAAc,GAAG,WAAmC;EACrF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,kCAAkC;GACnE,MAAM,EAAE,IAAI,aAAa;GACzB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,EAAE,cAAc,cAAkC;EACpF,MAAM,OAAO,OAAO,4CAA4C,EAC9D,MAAM;GAAE,IAAI;GAAc;EAAQ,EACpC,CAAC;CACH;CAEA,MAAM,2BAA2B,OAAO,cAAsB,WAAyB;EACrF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,wCACA,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,GAC7B,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAC9B,EAAE,cAAc,gBAChB,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,uDACA,EAAE,MAAM;GAAE,IAAI;GAAc;EAAa,EAAE,GAC3C,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EACxC,cACA,GAAG,WACkC;EACrC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,wCAAwC;GACzE,MAAM,EAAE,IAAI,aAAa;GACzB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EACxC,cACA,mBAC8B;EAC9B,MAAM,OAAO,OAAO,uDAAuD,EACzE,MAAM;GAAE,IAAI;GAAc;EAAa,EACzC,CAAC;CACH;CAEA,MAAM,+BAA+B,OAAO,EAC1C,cACA,GAAG,WACoC;EACvC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,0CAA0C;GAC3E,MAAM,EAAE,IAAI,aAAa;GACzB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,wBAAwB,OAAO,cAAsB,WAAyB;EAClF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,qCACA,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,GAC7B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB,OAAO,EAAE,cAAc,GAAG,WAAuC;EAC7F,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,qCAAqC;GACtE,MAAM,EAAE,IAAI,aAAa;GACzB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,2BAA2B,OAAO,EACtC,cACA,iBACgC;EAChC,MAAM,OAAO,OAAO,kDAAkD,EACpE,MAAM;GAAE,IAAI;GAAc;EAAW,EACvC,CAAC;CACH;CAEA,MAAM,6BAA6B,OAAO,cAAsB,WAAyB;EACvF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,0CACA,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,GAC7B,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,iBAAiB,OAAO,iBAAyB;EACrD,MAAM,OAAO,KAAK,4CAA4C,EAAE,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;CAC9F;CAEA,MAAM,2BAA2B,OAAO,cAAsB,WAAyB;EACrF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,2CACA,EAAE,MAAM,EAAE,aAAa,EAAE,GACzB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAC9B,EAAE,cAAc,YAChB,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,sDACA,EAAE,MAAM;GAAE;GAAc;EAAS,EAAE,GACnC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EAAE,cAAc,GAAG,WAAkC;EAC7F,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,2CAA2C;GAC5E,MAAM,EAAE,aAAa;GACrB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EACxC,cACA,UACA,GAAG,WACwB;EAC3B,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,sDAAsD;GACxF,MAAM;IAAE;IAAc;GAAS;GAC/B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,8BAA8B,OAAO,EACzC,cACA,UACA,GAAG,WACyB;EAC5B,MAAM,EAAE,SAAS,MAAM,OAAO,KAC5B,qEACA;GAAE,MAAM;IAAE;IAAc;GAAS;GAAG;EAAK,CAC3C;EACA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EAAE,cAAc,eAA+B;EACvF,MAAM,OAAO,OAAO,sDAAsD,EACxE,MAAM;GAAE;GAAc;EAAS,EACjC,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AChPA,MAAa,uBAAuB,WAAyC;CAC3E,MAAM,mBAAmB,OAAO,WAAyB;EACvD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC;EACzE,OAAO;CACT;CAEA,MAAM,kBAAkB,OAAO,gBAAwB,WAAyB;EAC9E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,8BACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,EAAE,gBAAgB,GAAG,WAAoC;EACzF,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,8BAA8B;GAChE,MAAM,EAAE,IAAI,eAAe;GAC3B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,mBAA2B;EAC3D,MAAM,OAAO,OAAO,8BAA8B,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;CACpF;CAEA,MAAM,WAAW,OAAO,mBAA2B;EACjD,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,wCAAwC,EAC1E,MAAM,EAAE,IAAI,eAAe,EAC7B,CAAC;EACD,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,mBAA2B;EACzD,MAAM,OAAO,KAAK,gDAAgD,EAChE,MAAM,EAAE,IAAI,eAAe,EAC7B,CAAC;CACH;CAEA,MAAM,uBAAuB,OAAO,gBAAwB,WAAyB;EACnF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,oCACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,sBAAsB,OAAO,EAAE,gBAAgB,GAAG,WAAqC;EAC3F,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,oCAAoC;GACrE,MAAM,EAAE,IAAI,eAAe;GAC3B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,yBAAyB,OAAO,EAAE,gBAAgB,aAAmC;EACzF,MAAM,OAAO,OAAO,6CAA6C,EAC/D,MAAM;GAAE,IAAI;GAAgB;EAAO,EACrC,CAAC;CACH;CAEA,MAAM,+BAA+B,OAAO,gBAAwB,WAAyB;EAC3F,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,6CACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,gBAAwB,WAAyB;EACzF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,0CACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,4BAA4B,OAChC,EAAE,gBAAgB,gBAClB,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,yDACA,EAAE,MAAM;GAAE,IAAI;GAAgB;EAAa,EAAE,GAC7C,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,+BAA+B,OAAO,EAC1C,gBACA,GAAG,WACoC;EACvC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,0CAA0C;GAC3E,MAAM,EAAE,IAAI,eAAe;GAC3B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,+BAA+B,OAAO,EAC1C,gBACA,mBACgC;EAChC,MAAM,OAAO,OAAO,yDAAyD,EAC3E,MAAM;GAAE,IAAI;GAAgB;EAAa,EAC3C,CAAC;CACH;CAEA,MAAM,0BAA0B,OAAO,gBAAwB,WAAyB;EACtF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,uCACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,4BAA4B,OAAO,EACvC,gBACA,GAAG,WACiC;EACpC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,uCAAuC;GACxE,MAAM,EAAE,IAAI,eAAe;GAC3B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,gBAAwB,WAAyB;EACtF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,uCACA,EAAE,MAAM,EAAE,IAAI,eAAe,EAAE,GAC/B,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,EACrC,gBACA,GAAG,WAC+B;EAClC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,uCAAuC;GACxE,MAAM,EAAE,IAAI,eAAe;GAC3B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,EACxC,gBACA,iBACkC;EAClC,MAAM,OAAO,OAAO,oDAAoD,EACtE,MAAM;GAAE,IAAI;GAAgB;EAAW,EACzC,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AChMA,MAAa,oBAAoB,WAAyC;CACxE,MAAM,0BAA0B,OAC9B,WAC4C;EAC5C,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,wCAAwC,CAAC,GAAG,EAAE,OAAO,CAAC;EACxF,OAAO;CACT;CAEA,MAAM,qBAAqB,OACzB,WACA,WAC8B;EAC9B,MAAM,EAAE,SAAS,MAAM,OAAO,KAC5B,kCACA,EAAE,MAAM,EAAE,UAAU,EAAE,GACtB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,oBAAoB,OACxB,WACA,WACmC;EACnC,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,0CACA,EAAE,OAAO,EAAE,UAAU,EAAE,GACvB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,SAAmC;EACrE,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,0CAA0C,EAAE,KAAK,CAAC;EACpF,OAAO;CACT;CAEA,MAAM,kBAAkB,OACtB,WACA,WAC0B;EAC1B,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,6CACA,EAAE,MAAM,EAAE,UAAU,EAAE,GACtB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,SAAiC;EACjE,MAAM,OAAO,IAAI,iCAAiC,EAAE,KAAK,CAAC;CAC5D;CAEA,MAAM,uBAAuB,OAC3B,SACkC;EAClC,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,iDAAiD,EAAE,KAAK,CAAC;EAC5F,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;ACzBA,MAAa,kBAAkB,WAAyC;CACtE,MAAM,aAAa,OAAO,WAAwC,WAAyB;EACzF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,gCACA,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,EAAE,GACzC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,sBAAsB,OAAO,WAAyB;EAC1D,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,6BAA6B,CAAC,GAAG,EAAE,OAAO,CAAC;EAC7E,OAAO;CACT;CAEA,MAAM,oBAAoB,OAAO,EAC/B,WACA,cACyD;EACzD,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,yCAAyC;GAC1E,MAAM,EAAE,UAAU;GAClB,MAAM,EAAE,QAAQ;EAClB,CAAC;EACD,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,EAAE,WAAW,cAAwC;EACvF,MAAM,OAAO,OAAO,mDAAmD,EACrE,MAAM;GAAE;GAAW;EAAQ,EAC7B,CAAC;EACD,OAAO;CACT;CAEA,MAAM,wBAAwB,OAAO,EAAE,WAAW,QAAQ,WAAuC;EAC/F,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,+CAA+C;GACjF,MAAM;IAAE;IAAW;GAAO;GAG1B,MAAM,EAAQ,KAA6B;EAC7C,CAAC;EAED,OAAO;CACT;CAEA,MAAM,kBAAkB,OACtB,WACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,sCACA,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,EAAE,GACzC,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB,OAC5B,WACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,4CACA,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,EAAE,GACzC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,EACrC,WACA,GAAG,WAC4D;EAC/D,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,4CAA4C;GAC7E,MAAM,EAAE,UAAU;GAElB,MAAM;IAAE,GAAG;IAAM,MAAM,KAAK;GAA6B;EAC3D,CAAC;EACD,OAAO;CACT;CAEA,MAAM,0BAA0B,OAAO,EACrC,WACA,mBACiC;EACjC,MAAM,OAAO,OAAO,2DAA2D,EAC7E,MAAM;GAAE;GAAW;EAAa,EAClC,CAAC;EACD,OAAO;CACT;CAEA,MAAM,iBAAiB,OAAO,EAC5B,WACA,GAAG,WAC0C;EAE7C,MAAM,OAAO,KAAK,sCAAsC;GAAE,MAAM,EAAE,UAAU;GAAG;EAAK,CAAC;EACrF,OAAO;CACT;CAEA,MAAM,oBAAoB,OAAO,EAAE,WAAW,gBAAuC;EACnF,MAAM,OAAO,OAAO,kDAAkD,EACpE,MAAM;GAAE;GAAW,WAAW,OAAO,SAAS;EAAE,EAClD,CAAC;EACD,OAAO;CACT;CAEA,MAAM,yBAAyB,OAC7B,WACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,8CACA,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,EAAE,GACzC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,4BAA4B,OAAO,EACvC,WACA,oBAC4B;EAC5B,MAAM,OAAO,IAAI,8DAA8D,EAC7E,MAAM;GAAE;GAAW;EAAc,EACnC,CAAC;EACD,OAAO;CACT;CAEA,MAAM,2BAA2B,OAAO,EAAE,WAAW,oBAA4C;EAC/F,MAAM,OAAO,OAAO,8DAA8D,EAChF,MAAM;GAAE;GAAW;EAAc,EACnC,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OACzB,WACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,yCACA,EAAE,MAAM,EAAE,UAAU,EAAE,GACtB,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,EAChC,WACA,UACA,eACqD;EACrD,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,yCAAyC;GAC1E,MAAM,EAAE,UAAU;GAClB,MAAM;IAAE;IAAU;GAAS;EAC7B,CAAC;EACD,OAAO;CACT;CAEA,MAAM,sBAAsB,OAC1B,WACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,0CACA,EAAE,MAAM,EAAE,UAAU,EAAE,GACtB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,sBAAsB,OAAO,EACjC,WACA,eACuD;EACvD,MAAM,OAAO,IAAI,0CAA0C;GACzD,MAAM,EAAE,UAAU;GAClB,MAAM,EAAE,SAAS;EACnB,CAAC;CACH;CAEA,MAAM,gBAAgB,OAAO,EAAE,WAAW,GAAG,WAA+B;EAC1E,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,gCAAgC;GAChE,MAAM,EAAE,UAAU;GAClB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,gBAAgB,OAAO,cAAsB;EACjD,MAAM,OAAO,OAAO,gCAAgC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;EAC3E,OAAO;CACT;CAEA,MAAM,cAAc,OAAO,EAAE,WAAW,qBAAuC;EAC7E,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,8CAA8C;GAC/E,MAAM,EAAE,UAAU;GAClB,MAAM,EAAE,eAAe;EACzB,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,EAAE,WAAW,GAAG,WAAoC;EACpF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,yCAAyC;GAC1E,MAAM,EAAE,UAAU;GAClB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,EAAE,WAAW,GAAG,WAAkC;EAChF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,uCAAuC;GACxE,MAAM,EAAE,UAAU;GAClB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,YAAoB,WAAyB;EAC7E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,0CACA,EAAE,MAAM,EAAE,WAAW,EAAE,GACvB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,6BAA6B,OAAO,YAAoB,WAAyB;EACrF,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,mDACA,EAAE,MAAM,EAAE,WAAW,EAAE,GACvB,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,4BAA4B,OAAO,EACvC,YACA,GAAG,WACoC;EACvC,MAAM,OAAO,KAAK,mDAAmD;GACnE,MAAM,EAAE,WAAW;GACnB;EACF,CAAC;CACH;CAEA,MAAM,+BAA+B,OAAO,EAC1C,YACA,kBACsC;EACtC,MAAM,OAAO,OAAO,iEAAiE,EACnF,MAAM;GAAE;GAAY;EAAY,EAClC,CAAC;CACH;CAEA,MAAM,uBAAuB,OAC3B,EAAE,WAAW,gBACb,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,2DACA,EAAE,MAAM;GAAE;GAAW;EAAa,EAAE,GACpC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,wBAAwB,OAC5B,EAAE,WAAW,iBACb,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,8DACA,EAAE,MAAM;GAAE;GAAW;EAAc,EAAE,GACrC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,cAAc,OAAO,EAAE,WAAW,GAAG,WAA6B;EACtE,MAAM,OAAO,KAAK,6CAA6C;GAAE,MAAM,EAAE,UAAU;GAAG;EAAK,CAAC;CAC9F;CAEA,MAAM,uBAAuB,OAAO,EAAE,WAAW,GAAG,WAAsC;EACxF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,+CAA+C;GAChF,MAAM,EAAE,UAAU;GAClB;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,EAAE,WAAW,gBAAwC;EACrF,MAAM,OAAO,OAAO,mDAAmD,EACrE,MAAM;GAAE;GAAW;EAAU,EAC/B,CAAC;CACH;CAEA,MAAM,wBAAwB,OAAO,EAAE,WAAW,iBAA4C;EAC5F,MAAM,OAAO,OAAO,sDAAsD,EACxE,MAAM;GAAE;GAAW;EAAW,EAChC,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AClYA,MAAa,yBAAyB,WAAyC;CAE7E,MAAM,oBAAoB,OAAO,IAAY,WAAyB;EACpE,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,gCAAgC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;EAC9F,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,WAAyB;EACzD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,2BAA2B,CAAC,GAAG,EAAE,OAAO,CAAC;EAC3E,OAAO;CACT;;CAGA,MAAM,4BAA4B,OAChC,IACA,OACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,yCACA;GAAE,MAAM,EAAE,GAAG;GAAG,OAAO;IAAE,OAAO,OAAO;IAAO,QAAQ,OAAO;GAAO;EAAE,GACtE,EAAE,OAAO,CACX;EACA,OAAO;CACT;;CAGA,MAAM,+BAA+B,OAAO,IAAY,WAAyB;EAC/E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,4CACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,gCAAgC,OAAO,SAA4C;EACvF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,qCAAqC,EAAE,KAAK,CAAC;EAChF,OAAO;CACT;CAEA,MAAM,+BAA+B,OAAO,SAA2C;EACrF,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,oCAAoC,EAAE,KAAK,CAAC;EAC/E,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,EAAE,IAAI,GAAG,WAAsC;EACjF,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,gCAAgC;GAAE,MAAM,EAAE,GAAG;GAAG;EAAK,CAAC;EAC1F,OAAO;CACT;CAEA,MAAM,+BAA+B,OAAO,EAC1C,IACA,GAAG,WACoC;EACvC,MAAM,EAAE,SAAS,MAAM,OAAO,MAAM,yCAAyC;GAC3E,MAAM,EAAE,GAAG;GACX;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,yBAAyB,OAAO,cAAsB;EAC1D,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,gDAAgD,EACjF,MAAM,EAAE,UAAU,EACpB,CAAC;EACD,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,OAAe;EACjD,MAAM,OAAO,OAAO,gCAAgC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CACtE;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;AC5FA,MAAa,gBAAgB,WAAyC;CACpE,MAAM,YAAY,OAAO,WAAyB;EAChD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC;EACnE,OAAO;CACT;CAEA,MAAM,gBAAgB,OAAO,SAA4B;EACvD,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,mBAAmB,EAAE,KAAK,CAAC;EAC9D,OAAO;CACT;CAEA,MAAM,uBAAuB,OAAO,EAAE,IAAI,cAAwC;EAChF,MAAM,OAAO,KAAK,2CAA2C,EAAE,MAAM;GAAE;GAAI;EAAQ,EAAE,CAAC;CACxF;CAEA,MAAM,cAAc,OAAO,OAAe;EACxC,MAAM,OAAO,OAAO,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;CAC9D;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF;;;ACTA,MAAa,eAAe,WAAyC;CACnE,MAAM,sBAAsB,OAC1B,EAAE,SAAS,gBACX,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,KAC5B,sCACA;GAAE,MAAM,EAAE,WAAW,aAAa;GAAG,MAAM,EAAE,QAAQ;EAAE,GACvD,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,yBAAyB,OAC7B,EAAE,cAAc,WAChB,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,OAC5B,oDACA,EAAE,MAAM;GAAE,WAAW;GAAc,aAAa;EAAQ,EAAE,GAC1D,EAAE,OAAO,CACX;EACA,OAAO;CACT;;CAGA,MAAM,WAAW,OAAO,OAAuB,WAAkD;EAC/F,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,iBACA,EAAE,OAAO;GAAE,GAAG,OAAO;GAAG,OAAO,OAAO;GAAO,QAAQ,OAAO;EAAO,EAAE,GACrE,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,UAAU,OAAO,IAAY,WAA8C;EAC/E,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,6BACA,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE,GAClC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,uBAAuB,OAC3B,IACA,WAC0C;EAC1C,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,oCACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,kBAAkB,OACtB,IACA,WACqC;EACrC,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,+BAA+B,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;EAC7F,OAAO;CACT;CAEA,MAAM,qBAAqB,OACzB,IACA,WACwC;EACxC,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,kCACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;;CAGA,MAAM,kBAAkB,OAAO,IAAY,WAA8C;EACvF,MAAM,EAAE,SAAS,MAAM,OAAO,KAC5B,kCACA,EAAE,MAAM,EAAE,GAAG,EAAE,GACf,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,mBAAmB,OAAO,IAAY,WAA8C;EACxF,MAAM,EAAE,SAAS,MAAM,OAAO,OAC5B,yCACA,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE,GAClC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,iBAAiB,OAAO,IAAY,WAAwC;EAChF,MAAM,OAAO,OACX,iCACA,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE,GAClC,EAAE,OAAO,CACX;CACF;CAEA,MAAM,aAAa,OAAO,IAAY,WAAwC;EAC5E,MAAM,OAAO,OACX,6BACA,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE,GAClC,EAAE,OAAO,CACX;CACF;CAEA,MAAM,aAAa,OAAO,EAAE,IAAI,GAAG,WAA4B;EAC7D,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,6BAA6B;GAC7D,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE;GAC9B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,kBAAkB,OAAO,IAAY,WAAyB;EAClE,MAAM,EAAE,SAAS,MAAM,OAAO,IAC5B,sCACA,EAAE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE,EAAE,GAClC,EAAE,OAAO,CACX;EACA,OAAO;CACT;CAEA,MAAM,kBAAkB,OAAO,EAAE,IAAI,GAAG,WAAiC;EACvE,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,sCAAsC;GACvE,MAAM,EAAE,WAAW,OAAO,EAAE,EAAE;GAC9B;EACF,CAAC;EACD,OAAO;CACT;CAEA,MAAM,qBAAqB,OAAO,EAAE,IAAI,iBAAyC;EAC/E,MAAM,OAAO,OAAO,mDAAmD,EACrE,MAAM;GAAE,WAAW,OAAO,EAAE;GAAG;EAAW,EAC5C,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;ACnJA,MAAM,qBAAqB,SAA+C;CACxE,IAAI,KAAK,SAAS,oBAChB,OAAO,KAAK,QAAQ,GAAGE,0BAAAA,kBAAkB,uBAAuB,KAAK,MAAM,IAAI,CAAC;CAElF,OAAO,GAAGC,0BAAAA,WAAW,gBAAgB,UAAU,KAAK,QAAQ;AAC9D;AAQA,MAAa,0BAA0B,EACrC,SACA,cAAc,CAAC,GACf,MACA,qBAAqB,WACY;CAMjC,MAAM,iBACJ,sBAAsB,KAAK,SAAS,qBAChC,CACE,GAAG,aACH,qBAAqB;EAAE;EAAS,aAAa,KAAK;CAAM,CAAC,CAC3D,IACA;CAEN,MAAM,UAAU,qBAAqB,KAAA,IAAY,kBAAkB,IAAI;CAEvE,MAAM,SAASC,iCAAAA,yBAAgC;EAC7C;EACA,aAAa;EACb;EACA,gBAAgB;CAClB,CAAC;CACD,MAAM,gBAAgBC,iCAAAA,yBAAyB;EAAE;EAAS;CAAY,CAAC;CAEvE,MAAM,cAAc,OAAO,WAAyB;EAClD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC;EACzE,OAAO;CACT;CAKA,MAAM,cAAc,OAAO,WAAyB;EAClD,MAAM,EAAE,SAAS,MAAM,cAAc,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC;EAExE,OAAO;CACT;CAEA,OAAO;EACL;EACA,aAAa,kBAAkB,MAAM;EACrC,iBAAiB,sBAAsB,MAAM;EAC7C,aAAa,kBAAkB,MAAM;EACrC,eAAe,oBAAoB,MAAM;EACzC,YAAY,iBAAiB,MAAM;EACnC,UAAU,eAAe,MAAM;EAC/B,aAAa,kBAAkB,MAAM;EACrC,UAAU,eAAe,MAAM;EAC/B,iBAAiB,sBAAsB,MAAM;EAC7C,QAAQ,aAAa,MAAM;EAC3B,OAAO,YAAY,MAAM;EACzB;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"management-Bp440RsV.js","names":[],"sources":["../src/clients/management/validateStatus.ts","../src/clients/management/authMiddleware.ts","../src/clients/management/currentUser/currentUser.ts","../src/clients/management/deletedProjects/deletedProjects.ts","../src/clients/management/features/features.ts","../src/clients/management/fileStorage/fileStorage.ts","../src/clients/management/maintainers/maintainers.ts","../src/clients/management/organizations/organizations.ts","../src/clients/management/payAsYouGo/payAsYouGo.ts","../src/clients/management/projects/projects.ts","../src/clients/management/storageBackends/storageBackends.ts","../src/clients/management/uiApps/uiApps.ts","../src/clients/management/users/users.ts","../src/clients/management/managementClient.ts"],"sourcesContent":["import { ManagementClientAuthError } from '../../errors';\nimport { defaultValidateStatus, type ValidateStatusFn } from '../../fetchClient';\nimport { isLoginPageRedirect } from '../isLoginPageRedirect';\n\n/**\n * Status validation for the Manage API, which answers an expired session with the login page.\n *\n * - A *successful* login page is the followed redirect, and becomes `ManagementClientAuthError`.\n * - HTML on a failed response is a real error page (a proxy's 502) and stays an `ApiError`: reading\n * it as session expiry would sign the user out over a transient upstream blip.\n */\nexport const validateManagementStatus: ValidateStatusFn = (apiResponse) => {\n const isValid = defaultValidateStatus(apiResponse);\n\n if (isValid && isLoginPageRedirect(apiResponse)) {\n return new ManagementClientAuthError(\n 'Your session expired',\n 'You will be logged out automatically.',\n apiResponse,\n );\n }\n\n return isValid;\n};\n","import { ManagementClientAuthError } from '../../errors';\nimport { createGenericFetchClient, type MiddlewareFn } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport { dedupe } from '../../utils';\n\nimport type { ManagementToken } from './tokenTypes';\nimport { validateManagementStatus } from './validateStatus';\n\ntype ManagementTokenWithStringToken = { token: string } & ManagementToken;\n\n// Long enough to amortize verify calls over a burst of parallel queries at app\n// startup; short enough that a remotely revoked token is re-checked within a minute.\nconst TOKEN_CACHE_TTL_MS = 60_000;\n\nexport const isManagementClientAuthError = (error: unknown): error is ManagementClientAuthError =>\n error instanceof ManagementClientAuthError;\n\nconst createAuth = (baseUrl: string) => {\n const fetchClient = createGenericFetchClient({\n baseUrl,\n validateStatus: validateManagementStatus,\n });\n\n // Raw token verify — deliberately does NOT go through this middleware (which would recurse).\n const verifyManagementToken = async (accessToken: string) => {\n const headers = new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: accessToken });\n const { data } = await fetchClient.get<ManagementToken>(\n '/manage/tokens/verify',\n {},\n { headers },\n );\n return data;\n };\n\n const createCurrentUserSessionToken = async (accessToken: string) => {\n const headers = new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: accessToken });\n const { data } = await fetchClient.post<ManagementTokenWithStringToken>(\n '/manage/current-user/session-token',\n {},\n { headers },\n );\n return data.token;\n };\n\n // A session-expired redirect lands here as `200 text/html`; `validateManagementStatus` (on the\n // client above) turns it into a `ManagementClientAuthError`.\n const createAdminAccountSessionToken = async () => {\n const { data } = await fetchClient.post<ManagementTokenWithStringToken>(\n '/admin/account/session-token',\n {},\n );\n return data.token;\n };\n\n return {\n verifyManagementToken,\n createCurrentUserSessionToken,\n createAdminAccountSessionToken,\n };\n};\n\nexport const createAuthMiddleware = ({\n accessToken,\n baseUrl,\n}: {\n baseUrl: string;\n accessToken?: string;\n}): MiddlewareFn => {\n const auth = createAuth(baseUrl);\n\n let token: string | undefined = accessToken;\n let tokenValidUntil = 0;\n // oxlint-disable-next-line turbo/no-undeclared-env-vars\n const isDevelopment = process.env.NODE_ENV === 'development';\n\n const ensureValidToken = async () => {\n if (token && Date.now() < tokenValidUntil) return token;\n\n if (token) {\n const tokenInfo = await auth.verifyManagementToken(token);\n const isTokenValid = !tokenInfo.isDisabled && !tokenInfo.isExpired;\n if (isTokenValid) {\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n }\n token = isDevelopment\n ? await auth.createCurrentUserSessionToken(token)\n : await auth.createAdminAccountSessionToken();\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n }\n\n token = await auth.createAdminAccountSessionToken();\n tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;\n return token;\n };\n\n // Deduplicate concurrent auth — all parallel requests share one inflight promise.\n const ensureValidTokenDeduped = dedupe(ensureValidToken);\n\n return (next) => async (request) => {\n const validToken = await ensureValidTokenDeduped();\n\n request.request.headers.set(KeboolaHttpHeader.MANAGEMENT_API_TOKEN, validToken);\n return next(request);\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nexport const createCurrentUser = (client: ManagementOpenApiFetchClient) => {\n const getMaintainerInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/maintainers-invitations',\n {},\n { signal },\n );\n return data;\n };\n\n const getMaintainerInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/maintainers-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptMaintainerInvitation = async (id: number) => {\n await client.put('/manage/current-user/maintainers-invitations/{id}', { path: { id } });\n };\n\n const rejectMaintainerInvitation = async (id: number) => {\n await client.delete('/manage/current-user/maintainers-invitations/{id}', { path: { id } });\n };\n\n const getOrganizationInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/organizations-invitations',\n {},\n { signal },\n );\n return data;\n };\n\n const getOrganizationInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/organizations-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptOrganizationInvitation = async (id: number) => {\n await client.put('/manage/current-user/organizations-invitations/{id}', { path: { id } });\n };\n\n const rejectOrganizationInvitation = async (id: number) => {\n await client.delete('/manage/current-user/organizations-invitations/{id}', { path: { id } });\n };\n\n const getProjectInvitations = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/current-user/projects-invitations', {}, { signal });\n return data;\n };\n\n const getProjectInvitation = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-invitations/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const acceptProjectInvitation = async (id: number) => {\n await client.put('/manage/current-user/projects-invitations/{id}', { path: { id } });\n };\n\n const rejectProjectInvitation = async (id: number) => {\n await client.delete('/manage/current-user/projects-invitations/{id}', { path: { id } });\n };\n\n const getProjectJoinRequests = async (signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-join-requests',\n {},\n { signal },\n );\n return data;\n };\n\n const getProjectJoinRequest = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/current-user/projects-join-requests/{id}',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const deleteProjectJoinRequest = async (id: number) => {\n await client.delete('/manage/current-user/projects-join-requests/{id}', { path: { id } });\n };\n\n return {\n getMaintainerInvitations,\n getMaintainerInvitation,\n acceptMaintainerInvitation,\n rejectMaintainerInvitation,\n getOrganizationInvitations,\n getOrganizationInvitation,\n acceptOrganizationInvitation,\n rejectOrganizationInvitation,\n getProjectInvitations,\n getProjectInvitation,\n acceptProjectInvitation,\n rejectProjectInvitation,\n getProjectJoinRequests,\n getProjectJoinRequest,\n deleteProjectJoinRequest,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { DeletedProjectsListQuery } from './types';\n\nexport const createDeletedProjects = (client: ManagementOpenApiFetchClient) => {\n const getDeletedProjects = async (query?: DeletedProjectsListQuery, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/deleted-projects',\n {\n query: {\n limit: query?.limit ?? undefined,\n offset: query?.offset ?? undefined,\n organizationId: query?.organizationId ?? undefined,\n name: query?.name ?? undefined,\n },\n },\n { signal },\n );\n return data;\n };\n\n const getDeletedProject = async (projectId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/deleted-projects/{projectId}',\n { path: { projectId } },\n { signal },\n );\n return data;\n };\n\n /** Restore a deleted project (cancels deletion). Maps to DELETE /manage/deleted-projects/{projectId}\n * — note: the RFC says POST but the live schema uses DELETE. */\n const restoreDeletedProject = async (projectId: number) => {\n await client.delete('/manage/deleted-projects/{projectId}', { path: { projectId } });\n };\n\n /** Permanently purge a deleted project (irreversible). Pass `ignoreBackendErrors: true` to purge\n * even if backend-storage cleanup fails. Returns the enqueued purge command. */\n const purgeDeletedProject = async (projectId: number, ignoreBackendErrors = false) => {\n const { data } = await client.post('/manage/deleted-projects/{projectId}/purge', {\n path: { projectId },\n body: { ignoreBackendErrors },\n });\n return data;\n };\n\n return {\n getDeletedProjects,\n getDeletedProject,\n restoreDeletedProject,\n purgeDeletedProject,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { Feature, FeatureAdmin, FeatureProject, GetAllFeaturesQuery } from './types';\n\n// Read-only on purpose. The three write endpoints the schema declares are not exposed:\n//\n// - `POST /manage/features` — deprecated upstream; features are provisioned by migration.\n// - `PATCH /manage/features/{id}` — edits a definition shared by every project on the stack.\n// - `DELETE /manage/features/{id}` — removes it from every project that has it.\n//\n// Add one only alongside a caller that genuinely needs it.\nexport const createFeatures = (client: ManagementOpenApiFetchClient) => {\n const getAllFeatures = async (query: GetAllFeaturesQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/manage/features', { query }, { signal });\n return data as Feature[];\n };\n\n // The schema names the path parameter `id`; the public argument stays `featureId`.\n const getFeature = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}',\n { path: { id: featureId } },\n { signal },\n );\n return data as Feature;\n };\n\n const getFeatureProjects = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}/projects',\n { path: { id: featureId } },\n { signal },\n );\n // Every field is present on the response; the swagger just declares none of them required.\n return data as FeatureProject[];\n };\n\n const getFeatureAdmins = async (featureId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/features/{id}/admins',\n { path: { id: featureId } },\n { signal },\n );\n return data as FeatureAdmin[];\n };\n\n return {\n getAllFeatures,\n getFeature,\n getFeatureProjects,\n getFeatureAdmins,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreateFileStorageAbsBody,\n CreateFileStorageGcsBody,\n CreateFileStorageS3Body,\n FileStorageGcs,\n RotateFileStorageAbsInput,\n RotateFileStorageGcsInput,\n RotateFileStorageS3Input,\n} from './types';\n\n// The GCS methods return `FileStorageGcs`, which widens `gcsCredentials` — the generated schema models\n// it as `Record<string, never>`, where every property access would be `never`.\nexport const createFileStorage = (client: ManagementOpenApiFetchClient) => {\n const getFileStoragesS3 = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-s3', {}, { signal });\n return data;\n };\n\n const getFileStoragesAbs = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-abs', {}, { signal });\n return data;\n };\n\n const getFileStoragesGcs = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/file-storage-gcs', {}, { signal });\n return data as FileStorageGcs[];\n };\n\n const createFileStorageS3 = async (body: CreateFileStorageS3Body) => {\n const { data } = await client.post('/manage/file-storage-s3', { body });\n return data;\n };\n\n const rotateFileStorageS3Credentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageS3Input) => {\n const { data } = await client.post('/manage/file-storage-s3/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data;\n };\n\n const setFileStorageS3Default = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-s3/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data;\n };\n\n const createFileStorageAbs = async (body: CreateFileStorageAbsBody) => {\n const { data } = await client.post('/manage/file-storage-abs', { body });\n return data;\n };\n\n const rotateFileStorageAbsCredentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageAbsInput) => {\n const { data } = await client.post('/manage/file-storage-abs/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data;\n };\n\n const setFileStorageAbsDefault = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-abs/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data;\n };\n\n const createFileStorageGcs = async (body: CreateFileStorageGcsBody) => {\n const { data } = await client.post('/manage/file-storage-gcs', { body });\n return data as FileStorageGcs;\n };\n\n const rotateFileStorageGcsCredentials = async ({\n fileStorageId,\n ...body\n }: RotateFileStorageGcsInput) => {\n const { data } = await client.post('/manage/file-storage-gcs/{fileStorageId}/credentials', {\n path: { fileStorageId },\n body,\n });\n return data as FileStorageGcs;\n };\n\n const setFileStorageGcsDefault = async (fileStorageId: number) => {\n const { data } = await client.post('/manage/file-storage-gcs/{fileStorageId}/default', {\n path: { fileStorageId },\n });\n return data as FileStorageGcs;\n };\n\n return {\n getFileStoragesS3,\n getFileStoragesAbs,\n getFileStoragesGcs,\n createFileStorageS3,\n createFileStorageAbs,\n createFileStorageGcs,\n rotateFileStorageS3Credentials,\n rotateFileStorageAbsCredentials,\n rotateFileStorageGcsCredentials,\n setFileStorageS3Default,\n setFileStorageAbsDefault,\n setFileStorageGcsDefault,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n AddMaintainerUserInput,\n CompleteSamlSetupInput,\n CreateMaintainerBody,\n CreateMaintainerInvitationInput,\n CreateMaintainerOrganizationInput,\n CreateSamlConfigInput,\n Maintainer,\n MaintainerDetail,\n MaintainerInvitationPath,\n MaintainerMetadataItemPath,\n MaintainerUser,\n MaintainerUserPath,\n MetadataItem,\n SamlConfigPath,\n SetMaintainerMetadataInput,\n UpdateMaintainerInput,\n UpdateSamlConfigInput,\n} from './types';\n\nexport const createMaintainers = (client: ManagementOpenApiFetchClient) => {\n const getMaintainers = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/maintainers', {}, { signal });\n // The schema types each maintainer's `organizations` as bare objects; `Maintainer` overrides them.\n return data as unknown as Maintainer[];\n };\n\n const getMaintainer = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}',\n { path: { id: maintainerId } },\n { signal },\n );\n // The schema under-models the detail's `organizations`; the backend returns full objects.\n return data as unknown as MaintainerDetail;\n };\n\n const createMaintainer = async (body: CreateMaintainerBody) => {\n const { data } = await client.post('/manage/maintainers', { body });\n return data;\n };\n\n const updateMaintainer = async ({ maintainerId, ...body }: UpdateMaintainerInput) => {\n const { data } = await client.patch('/manage/maintainers/{id}', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const deleteMaintainer = async (maintainerId: number) => {\n await client.delete('/manage/maintainers/{id}', { path: { id: maintainerId } });\n };\n\n const getMaintainerUsers = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/users',\n { path: { id: maintainerId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as MaintainerUser[];\n };\n\n const addMaintainerUser = async ({ maintainerId, ...body }: AddMaintainerUserInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/users', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const removeMaintainerUser = async ({ maintainerId, adminId }: MaintainerUserPath) => {\n await client.delete('/manage/maintainers/{id}/users/{adminId}', {\n path: { id: maintainerId, adminId },\n });\n };\n\n const getMaintainerInvitations = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/invitations',\n { path: { id: maintainerId } },\n { signal },\n );\n return data;\n };\n\n const getMaintainerInvitation = async (\n { maintainerId, invitationId }: MaintainerInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/invitations/{invitationId}',\n { path: { id: maintainerId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const createMaintainerInvitation = async ({\n maintainerId,\n ...body\n }: CreateMaintainerInvitationInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/invitations', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const deleteMaintainerInvitation = async ({\n maintainerId,\n invitationId,\n }: MaintainerInvitationPath) => {\n await client.delete('/manage/maintainers/{id}/invitations/{invitationId}', {\n path: { id: maintainerId, invitationId },\n });\n };\n\n const createMaintainerOrganization = async ({\n maintainerId,\n ...body\n }: CreateMaintainerOrganizationInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/organizations', {\n path: { id: maintainerId },\n body,\n });\n return data;\n };\n\n const getMaintainerMetadata = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/metadata',\n { path: { id: maintainerId } },\n { signal },\n );\n // The swagger marks no field of the metadata items required; the backend sends them all.\n return data as MetadataItem[];\n };\n\n const setMaintainerMetadata = async ({ maintainerId, ...body }: SetMaintainerMetadataInput) => {\n const { data } = await client.post('/manage/maintainers/{id}/metadata', {\n path: { id: maintainerId },\n body,\n });\n return data as MetadataItem[];\n };\n\n const deleteMaintainerMetadata = async ({\n maintainerId,\n metadataId,\n }: MaintainerMetadataItemPath) => {\n await client.delete('/manage/maintainers/{id}/metadata/{metadataId}', {\n path: { id: maintainerId, metadataId },\n });\n };\n\n const getMaintainerOrganizations = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{id}/organizations',\n { path: { id: maintainerId } },\n { signal },\n );\n return data;\n };\n\n const joinMaintainer = async (maintainerId: number) => {\n await client.post('/manage/maintainers/{id}/join-maintainer', { path: { id: maintainerId } });\n };\n\n const getMaintainerSamlConfigs = async (maintainerId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/maintainers/{maintainerId}/saml',\n { path: { maintainerId } },\n { signal },\n );\n return data;\n };\n\n const getMaintainerSamlConfig = async (\n { maintainerId, configId }: SamlConfigPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/maintainers/{maintainerId}/saml/{configId}',\n { path: { maintainerId, configId } },\n { signal },\n );\n return data;\n };\n\n const createMaintainerSamlConfig = async ({ maintainerId, ...body }: CreateSamlConfigInput) => {\n const { data } = await client.post('/manage/maintainers/{maintainerId}/saml', {\n path: { maintainerId },\n body,\n });\n return data;\n };\n\n const updateMaintainerSamlConfig = async ({\n maintainerId,\n configId,\n ...body\n }: UpdateSamlConfigInput) => {\n const { data } = await client.patch('/manage/maintainers/{maintainerId}/saml/{configId}', {\n path: { maintainerId, configId },\n body,\n });\n return data;\n };\n\n const completeMaintainerSamlSetup = async ({\n maintainerId,\n configId,\n ...body\n }: CompleteSamlSetupInput) => {\n const { data } = await client.post(\n '/manage/maintainers/{maintainerId}/saml/{configId}/complete-setup',\n { path: { maintainerId, configId }, body },\n );\n return data;\n };\n\n const deleteMaintainerSamlConfig = async ({ maintainerId, configId }: SamlConfigPath) => {\n await client.delete('/manage/maintainers/{maintainerId}/saml/{configId}', {\n path: { maintainerId, configId },\n });\n };\n\n return {\n getMaintainers,\n getMaintainer,\n createMaintainer,\n updateMaintainer,\n deleteMaintainer,\n getMaintainerUsers,\n addMaintainerUser,\n removeMaintainerUser,\n getMaintainerInvitations,\n getMaintainerInvitation,\n createMaintainerInvitation,\n deleteMaintainerInvitation,\n createMaintainerOrganization,\n getMaintainerMetadata,\n setMaintainerMetadata,\n deleteMaintainerMetadata,\n getMaintainerOrganizations,\n joinMaintainer,\n getMaintainerSamlConfigs,\n getMaintainerSamlConfig,\n createMaintainerSamlConfig,\n updateMaintainerSamlConfig,\n completeMaintainerSamlSetup,\n deleteMaintainerSamlConfig,\n };\n};\n","import type { MetadataItem } from '../maintainers/types';\nimport type { ManagementOpenApiFetchClient } from '../managementClient';\nimport type { Project } from '../projects/types';\n\nimport type {\n AddOrganizationUserInput,\n AdminUser,\n CreateOrganizationInvitationInput,\n CreateOrganizationProjectInput,\n OrganizationDetail,\n OrganizationInvitationPath,\n OrganizationMetadataItemPath,\n OrganizationUserPath,\n SetOrganizationMetadataInput,\n UpdateOrganizationInput,\n} from './types';\n\nexport const createOrganizations = (client: ManagementOpenApiFetchClient) => {\n const getOrganizations = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/organizations', {}, { signal });\n return data;\n };\n\n const getOrganization = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema's `projects` items carry only `{ id, name, created }`; the backend returns more.\n return data as unknown as OrganizationDetail;\n };\n\n const updateOrganization = async ({ organizationId, ...body }: UpdateOrganizationInput) => {\n const { data } = await client.patch('/manage/organizations/{id}', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const deleteOrganization = async (organizationId: number) => {\n await client.delete('/manage/organizations/{id}', { path: { id: organizationId } });\n };\n\n const forceMfa = async (organizationId: number) => {\n const { data } = await client.patch('/manage/organizations/{id}/force-mfa', {\n path: { id: organizationId },\n });\n return data;\n };\n\n const joinOrganization = async (organizationId: number) => {\n await client.post('/manage/organizations/{id}/join-organization', {\n path: { id: organizationId },\n });\n };\n\n const getOrganizationUsers = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/users',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as AdminUser[];\n };\n\n const addOrganizationUser = async ({ organizationId, ...body }: AddOrganizationUserInput) => {\n const { data } = await client.post('/manage/organizations/{id}/users', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const removeOrganizationUser = async ({ organizationId, userId }: OrganizationUserPath) => {\n await client.delete('/manage/organizations/{id}/users/{userId}', {\n path: { id: organizationId, userId },\n });\n };\n\n const getOrganizationProjectsUsers = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/projects-users',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema documents only `{ id, name, email }`; the backend also returns features and flags.\n return data as unknown as AdminUser[];\n };\n\n const getOrganizationInvitations = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/invitations',\n { path: { id: organizationId } },\n { signal },\n );\n return data;\n };\n\n const getOrganizationInvitation = async (\n { organizationId, invitationId }: OrganizationInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/invitations/{invitationId}',\n { path: { id: organizationId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const createOrganizationInvitation = async ({\n organizationId,\n ...body\n }: CreateOrganizationInvitationInput) => {\n const { data } = await client.post('/manage/organizations/{id}/invitations', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const deleteOrganizationInvitation = async ({\n organizationId,\n invitationId,\n }: OrganizationInvitationPath) => {\n await client.delete('/manage/organizations/{id}/invitations/{invitationId}', {\n path: { id: organizationId, invitationId },\n });\n };\n\n const getOrganizationProjects = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/projects',\n { path: { id: organizationId } },\n { signal },\n );\n // The schema types the items as a bare object; the backend returns full project objects.\n return data as unknown as Project[];\n };\n\n const createOrganizationProject = async ({\n organizationId,\n ...body\n }: CreateOrganizationProjectInput) => {\n const { data } = await client.post('/manage/organizations/{id}/projects', {\n path: { id: organizationId },\n body,\n });\n return data;\n };\n\n const getOrganizationMetadata = async (organizationId: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/organizations/{id}/metadata',\n { path: { id: organizationId } },\n { signal },\n );\n // The swagger marks no field of the metadata items required; the backend sends them all.\n return data as MetadataItem[];\n };\n\n const setOrganizationMetadata = async ({\n organizationId,\n ...body\n }: SetOrganizationMetadataInput) => {\n const { data } = await client.post('/manage/organizations/{id}/metadata', {\n path: { id: organizationId },\n body,\n });\n return data as MetadataItem[];\n };\n\n const deleteOrganizationMetadata = async ({\n organizationId,\n metadataId,\n }: OrganizationMetadataItemPath) => {\n await client.delete('/manage/organizations/{id}/metadata/{metadataId}', {\n path: { id: organizationId, metadataId },\n });\n };\n\n return {\n getOrganizations,\n getOrganization,\n updateOrganization,\n deleteOrganization,\n forceMfa,\n joinOrganization,\n getOrganizationUsers,\n addOrganizationUser,\n removeOrganizationUser,\n getOrganizationProjectsUsers,\n getOrganizationInvitations,\n getOrganizationInvitation,\n createOrganizationInvitation,\n deleteOrganizationInvitation,\n getOrganizationProjects,\n createOrganizationProject,\n getOrganizationMetadata,\n setOrganizationMetadata,\n deleteOrganizationMetadata,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreatePaymentRequestBody,\n CreditPaymentRequest,\n CreditPurchase,\n PayAsYouGoBillingConfiguration,\n StripeCustomer,\n TopUpSetting,\n UpdateStripeCustomerBody,\n UpdateTopUpSettingBody,\n} from './types';\n\nexport const createPayAsYouGo = (client: ManagementOpenApiFetchClient) => {\n const getBillingConfiguration = async (\n signal?: AbortSignal,\n ): Promise<PayAsYouGoBillingConfiguration> => {\n const { data } = await client.get('/pay-as-you-go/billing/configuration', {}, { signal });\n return data as PayAsYouGoBillingConfiguration;\n };\n\n const getCreditPurchases = async (\n idProject: number,\n signal?: AbortSignal,\n ): Promise<CreditPurchase[]> => {\n const { data } = await client.post(\n '/pay-as-you-go/billing/credits',\n { body: { idProject } },\n { signal },\n );\n return data as CreditPurchase[];\n };\n\n const getStripeCustomer = async (\n idProject: number,\n signal?: AbortSignal,\n ): Promise<StripeCustomer | null> => {\n const { data } = await client.get(\n '/pay-as-you-go/billing/stripe-customer',\n { query: { idProject } },\n { signal },\n );\n return data;\n };\n\n const updateStripeCustomer = async (body: UpdateStripeCustomerBody) => {\n const { data } = await client.put('/pay-as-you-go/billing/stripe-customer', { body });\n return data;\n };\n\n const getTopUpSetting = async (\n projectId: number,\n signal?: AbortSignal,\n ): Promise<TopUpSetting> => {\n const { data } = await client.get(\n '/pay-as-you-go/billing/top-up/{projectId}',\n { path: { projectId } },\n { signal },\n );\n return data as TopUpSetting;\n };\n\n const updateTopUpSetting = async (body: UpdateTopUpSettingBody) => {\n await client.put('/pay-as-you-go/billing/top-up', { body });\n };\n\n const createPaymentRequest = async (\n body: CreatePaymentRequestBody,\n ): Promise<CreditPaymentRequest> => {\n const { data } = await client.post('/pay-as-you-go/billing/create-payment-request', { body });\n return data as CreditPaymentRequest;\n };\n\n return {\n getBillingConfiguration,\n getCreditPurchases,\n getStripeCustomer,\n updateStripeCustomer,\n getTopUpSetting,\n updateTopUpSetting,\n createPaymentRequest,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\nimport type { User } from '../types';\n\nimport type {\n AddProjectUserBody,\n AddProjectUserPath,\n AssignProjectTemplateFeatureInput,\n ChangeProjectUserRoleInput,\n CreateProjectFeatureBody,\n CreateProjectFeaturePath,\n CreateProjectInvitationBody,\n CreateProjectInvitationPath,\n DeleteProjectInvitationPath,\n DeleteProjectMetadataPath,\n GetProjectMetadataPath,\n GetProjectPath,\n GetProjectReviewersPath,\n JoinProjectInput,\n ListProjectInvitationsPath,\n ListProjectJoinRequestsPath,\n ListProjectUsersPath,\n MoveProjectInput,\n Project,\n ProjectBase,\n ProjectInvitableRole,\n ProjectJoinRequestPath,\n ProjectMetadataItem,\n RemoveProjectFeaturePath,\n RemoveProjectLimitPath,\n RemoveProjectTemplateFeaturePath,\n RemoveProjectUserPath,\n RequestProjectAccessInput,\n Reviewer,\n SetProjectDisabledInput,\n SetProjectLimitsInput,\n SetProjectMetadataBody,\n SetProjectMetadataPath,\n SetProjectReviewersBody,\n SetProjectReviewersPath,\n UpdateProjectInput,\n} from './types';\n\n// The schema types every `projectId` path parameter as a number while these methods accept\n// `number | string`, since legacy call sites hold project ids as strings. Coercing keeps that input\n// contract without widening the schema — `Number('123')` and `123` build the same path.\n//\n// This client is scoped to a project's own settings and membership. Five write endpoints the schema\n// files under `/manage/projects/{projectId}/` reach past that, and are deliberately not exposed here —\n// the capability isn't denied, it just belongs to the namespace that owns it:\n//\n// - `POST …/tokens` — mints a Storage token. Storage tokens live in `api.storage.tokens`, where the\n// permission model is visible at the call site.\n// - `POST …/storage-backend` and its `DELETE`, and `POST …/file-storage` — attach or detach storage\n// infrastructure. `api.management.storageBackends` and `api.management.fileStorage` own that.\n// - `POST …/credits` — grants pay-as-you-go credits; a billing operation with no home here.\n//\n// Add one only alongside a caller that genuinely needs it.\nexport const createProjects = (client: ManagementOpenApiFetchClient) => {\n const getProject = async (projectId: GetProjectPath['projectId'], signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data as unknown as Project;\n };\n\n const getProjectTemplates = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/project-templates', {}, { signal });\n return data;\n };\n\n const addProjectFeature = async ({\n projectId,\n feature,\n }: CreateProjectFeaturePath & CreateProjectFeatureBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/features', {\n path: { projectId },\n body: { feature },\n });\n return data as ProjectBase;\n };\n\n const removeProjectFeature = async ({ projectId, feature }: RemoveProjectFeaturePath) => {\n await client.delete('/manage/projects/{projectId}/features/{feature}', {\n path: { projectId, feature },\n });\n return null;\n };\n\n const changeProjectUserRole = async ({ projectId, userId, role }: ChangeProjectUserRoleInput) => {\n const { data } = await client.patch('/manage/projects/{projectId}/users/{userId}', {\n path: { projectId, userId },\n // The schema's role enum lists only the four non-SOX roles; a project with a protected default\n // branch really does accept `productionManager` / `developer` / `reviewer` here.\n body: { role: role as ProjectInvitableRole },\n });\n\n return data as User;\n };\n\n const getProjectUsers = async (\n projectId: ListProjectUsersPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/users',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n // The schema types the items as a bare object; the backend returns full user objects.\n return data as unknown as User[];\n };\n\n const getProjectInvitations = async (\n projectId: ListProjectInvitationsPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/invitations',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data;\n };\n\n const createProjectInvitation = async ({\n projectId,\n ...body\n }: CreateProjectInvitationPath & CreateProjectInvitationBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/invitations', {\n path: { projectId },\n // Same schema gap as `changeProjectUserRole` — the SOX roles are accepted but undocumented.\n body: { ...body, role: body.role as ProjectInvitableRole },\n });\n return data;\n };\n\n const deleteProjectInvitation = async ({\n projectId,\n invitationId,\n }: DeleteProjectInvitationPath) => {\n await client.delete('/manage/projects/{projectId}/invitations/{invitationId}', {\n path: { projectId, invitationId },\n });\n return null;\n };\n\n const addProjectUser = async ({\n projectId,\n ...body\n }: AddProjectUserPath & AddProjectUserBody) => {\n // 204 No Content — the endpoint answers with an empty body, not the created user.\n await client.post('/manage/projects/{projectId}/users', { path: { projectId }, body });\n return null;\n };\n\n const removeProjectUser = async ({ projectId, idOrEmail }: RemoveProjectUserPath) => {\n await client.delete('/manage/projects/{projectId}/users/{idOrEmail}', {\n path: { projectId, idOrEmail: String(idOrEmail) },\n });\n return null;\n };\n\n const getProjectJoinRequests = async (\n projectId: ListProjectJoinRequestsPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/join-requests',\n { path: { projectId: Number(projectId) } },\n { signal },\n );\n return data;\n };\n\n const approveProjectJoinRequest = async ({\n projectId,\n joinRequestId,\n }: ProjectJoinRequestPath) => {\n await client.put('/manage/projects/{projectId}/join-requests/{joinRequestId}', {\n path: { projectId, joinRequestId },\n });\n return null;\n };\n\n const rejectProjectJoinRequest = async ({ projectId, joinRequestId }: ProjectJoinRequestPath) => {\n await client.delete('/manage/projects/{projectId}/join-requests/{joinRequestId}', {\n path: { projectId, joinRequestId },\n });\n return null;\n };\n\n const getProjectMetadata = async (\n projectId: GetProjectMetadataPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/metadata',\n { path: { projectId } },\n { signal },\n );\n // Every field is present on the response; the swagger just declares none of them required.\n return data as ProjectMetadataItem[];\n };\n\n const setProjectMetadata = async ({\n projectId,\n provider,\n metadata,\n }: SetProjectMetadataPath & SetProjectMetadataBody) => {\n const { data } = await client.post('/manage/projects/{projectId}/metadata', {\n path: { projectId },\n body: { provider, metadata },\n });\n return data as ProjectMetadataItem[];\n };\n\n const getProjectReviewers = async (\n projectId: GetProjectReviewersPath['projectId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/reviewers',\n { path: { projectId } },\n { signal },\n );\n return data as Reviewer[];\n };\n\n const setProjectReviewers = async ({\n projectId,\n adminIds,\n }: SetProjectReviewersPath & SetProjectReviewersBody) => {\n await client.put('/manage/projects/{projectId}/reviewers', {\n path: { projectId },\n body: { adminIds },\n });\n };\n\n const updateProject = async ({ projectId, ...body }: UpdateProjectInput) => {\n const { data } = await client.put('/manage/projects/{projectId}', {\n path: { projectId },\n body,\n });\n return data as ProjectBase;\n };\n\n const deleteProject = async (projectId: number) => {\n await client.delete('/manage/projects/{projectId}', { path: { projectId } });\n return null;\n };\n\n const moveProject = async ({ projectId, organizationId }: MoveProjectInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/organizations', {\n path: { projectId },\n body: { organizationId },\n });\n return data as ProjectBase;\n };\n\n const setProjectDisabled = async ({ projectId, ...body }: SetProjectDisabledInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/disabled', {\n path: { projectId },\n body,\n });\n return data as ProjectBase;\n };\n\n const setProjectLimits = async ({ projectId, ...body }: SetProjectLimitsInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/limits', {\n path: { projectId },\n body,\n });\n return data as unknown as Project;\n };\n\n const getProjectTemplate = async (templateId: string, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/project-templates/{templateId}',\n { path: { templateId } },\n { signal },\n );\n return data;\n };\n\n const getProjectTemplateFeatures = async (templateId: string, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/project-templates/{templateId}/features',\n { path: { templateId } },\n { signal },\n );\n return data;\n };\n\n const addProjectTemplateFeature = async ({\n templateId,\n ...body\n }: AssignProjectTemplateFeatureInput) => {\n await client.post('/manage/project-templates/{templateId}/features', {\n path: { templateId },\n body,\n });\n };\n\n const removeProjectTemplateFeature = async ({\n templateId,\n featureName,\n }: RemoveProjectTemplateFeaturePath) => {\n await client.delete('/manage/project-templates/{templateId}/features/{featureName}', {\n path: { templateId, featureName },\n });\n };\n\n const getProjectInvitation = async (\n { projectId, invitationId }: DeleteProjectInvitationPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/invitations/{invitationId}',\n { path: { projectId, invitationId } },\n { signal },\n );\n return data;\n };\n\n const getProjectJoinRequest = async (\n { projectId, joinRequestId }: ProjectJoinRequestPath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/projects/{projectId}/join-requests/{joinRequestId}',\n { path: { projectId, joinRequestId } },\n { signal },\n );\n return data;\n };\n\n const joinProject = async ({ projectId, ...body }: JoinProjectInput) => {\n await client.post('/manage/projects/{projectId}/join-project', { path: { projectId }, body });\n };\n\n const requestProjectAccess = async ({ projectId, ...body }: RequestProjectAccessInput) => {\n const { data } = await client.post('/manage/projects/{projectId}/request-access', {\n path: { projectId },\n body,\n });\n return data;\n };\n\n const removeProjectLimit = async ({ projectId, limitName }: RemoveProjectLimitPath) => {\n await client.delete('/manage/projects/{projectId}/limits/{limitName}', {\n path: { projectId, limitName },\n });\n };\n\n const deleteProjectMetadata = async ({ projectId, metadataId }: DeleteProjectMetadataPath) => {\n await client.delete('/manage/projects/{projectId}/metadata/{metadataId}', {\n path: { projectId, metadataId },\n });\n };\n\n return {\n getProject,\n getProjectTemplates,\n addProjectFeature,\n removeProjectFeature,\n changeProjectUserRole,\n getProjectUsers,\n getProjectInvitations,\n createProjectInvitation,\n deleteProjectInvitation,\n addProjectUser,\n removeProjectUser,\n getProjectJoinRequests,\n approveProjectJoinRequest,\n rejectProjectJoinRequest,\n getProjectMetadata,\n setProjectMetadata,\n getProjectReviewers,\n setProjectReviewers,\n updateProject,\n deleteProject,\n moveProject,\n setProjectDisabled,\n setProjectLimits,\n getProjectTemplate,\n getProjectTemplateFeatures,\n addProjectTemplateFeature,\n removeProjectTemplateFeature,\n getProjectInvitation,\n getProjectJoinRequest,\n joinProject,\n requestProjectAccess,\n removeProjectLimit,\n deleteProjectMetadata,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n CreateBigqueryStorageBackendBody,\n CreateSnowflakeStorageBackendBody,\n GetStorageBackendProjectsQuery,\n StorageBackend,\n UpdateBigqueryStorageBackendInput,\n UpdateStorageBackendInput,\n} from './types';\n\nexport const createStorageBackends = (client: ManagementOpenApiFetchClient) => {\n // `StorageBackend` weakens three fields the schema marks required — see its doc comment.\n const getStorageBackend = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get('/manage/storage-backend/{id}', { path: { id } }, { signal });\n return data as StorageBackend;\n };\n\n const getStorageBackends = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/storage-backend', {}, { signal });\n return data as StorageBackend[];\n };\n\n /** Projects assigned to this backend, paginated via `limit`/`offset`. */\n const getStorageBackendProjects = async (\n id: number,\n query?: GetStorageBackendProjectsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/manage/storage-backend/{id}/projects',\n { path: { id }, query: { limit: query?.limit, offset: query?.offset } },\n { signal },\n );\n return data;\n };\n\n /** Maintainers assigned to this backend — small, unpaginated list. */\n const getStorageBackendMaintainers = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/storage-backend/{id}/maintainers',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const createSnowflakeStorageBackend = async (body: CreateSnowflakeStorageBackendBody) => {\n const { data } = await client.post('/manage/storage-backend/snowflake', { body });\n return data;\n };\n\n const createBigqueryStorageBackend = async (body: CreateBigqueryStorageBackendBody) => {\n const { data } = await client.post('/manage/storage-backend/bigquery', { body });\n return data;\n };\n\n const updateStorageBackend = async ({ id, ...body }: UpdateStorageBackendInput) => {\n const { data } = await client.patch('/manage/storage-backend/{id}', { path: { id }, body });\n return data;\n };\n\n const updateBigqueryStorageBackend = async ({\n id,\n ...body\n }: UpdateBigqueryStorageBackendInput) => {\n const { data } = await client.patch('/manage/storage-backend/{id}/bigquery', {\n path: { id },\n body,\n });\n return data;\n };\n\n const activateStorageBackend = async (backendId: number) => {\n const { data } = await client.post('/manage/storage-backend/{backendId}/activate', {\n path: { backendId },\n });\n return data;\n };\n\n const deleteStorageBackend = async (id: number) => {\n await client.delete('/manage/storage-backend/{id}', { path: { id } });\n };\n\n return {\n getStorageBackend,\n getStorageBackends,\n getStorageBackendProjects,\n getStorageBackendMaintainers,\n createSnowflakeStorageBackend,\n createBigqueryStorageBackend,\n updateStorageBackend,\n updateBigqueryStorageBackend,\n activateStorageBackend,\n deleteStorageBackend,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type { ActivateUiAppVersionPath, RegisterUiAppBody } from './types';\n\nexport const createUiApps = (client: ManagementOpenApiFetchClient) => {\n const getUiApps = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/ui-apps', {}, { signal });\n return data;\n };\n\n const registerUiApp = async (body: RegisterUiAppBody) => {\n const { data } = await client.post('/manage/ui-apps', { body });\n return data;\n };\n\n const activateUiAppVersion = async ({ id, version }: ActivateUiAppVersionPath) => {\n await client.post('/manage/ui-apps/{id}/activate/{version}', { path: { id, version } });\n };\n\n const deleteUiApp = async (id: string) => {\n await client.delete('/manage/ui-apps/{id}', { path: { id } });\n };\n\n return {\n getUiApps,\n registerUiApp,\n activateUiAppVersion,\n deleteUiApp,\n };\n};\n","import type { ManagementOpenApiFetchClient } from '../managementClient';\n\nimport type {\n AddUserFeatureBody,\n AddUserFeaturePath,\n DeleteUserMetadataPath,\n GetUsersQuery,\n RemoveUserFeaturePath,\n SetUserMetadataInput,\n UpdateUserInput,\n UserDetail,\n UserListItem,\n UserMaintainerMembership,\n UserOrganizationMembership,\n UserProjectMembership,\n} from './types';\n\n// The schema names the path parameters `idOrEmail` / `featureName`; the public arguments keep the\n// names call sites already use. `createPath` percent-encodes every path parameter, so an email must\n// NOT be encoded here as well — doing so double-encodes it (`a@b.com` → `a%2540b.com`).\nexport const createUsers = (client: ManagementOpenApiFetchClient) => {\n const addUserAdminFeature = async (\n { feature, userIdOrMail }: AddUserFeatureBody & AddUserFeaturePath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/manage/users/{idOrEmail}/features',\n { path: { idOrEmail: userIdOrMail }, body: { feature } },\n { signal },\n );\n return data;\n };\n\n const removeUserAdminFeature = async (\n { userIdOrMail, feature }: RemoveUserFeaturePath,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.delete(\n '/manage/users/{idOrEmail}/features/{featureName}',\n { path: { idOrEmail: userIdOrMail, featureName: feature } },\n { signal },\n );\n return data;\n };\n\n /** Paginated list of all users, filterable via `q` (name/email substring). */\n const getUsers = async (query?: GetUsersQuery, signal?: AbortSignal): Promise<UserListItem[]> => {\n const { data } = await client.get(\n '/manage/users',\n { query: { q: query?.q, limit: query?.limit, offset: query?.offset } },\n { signal },\n );\n return data;\n };\n\n const getUser = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.get(\n '/manage/users/{idOrEmail}',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const getUserOrganizations = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserOrganizationMembership[]> => {\n const { data } = await client.get(\n '/manage/users/{id}/organizations',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const getUserProjects = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserProjectMembership[]> => {\n const { data } = await client.get('/manage/users/{id}/projects', { path: { id } }, { signal });\n return data;\n };\n\n const getUserMaintainers = async (\n id: number,\n signal?: AbortSignal,\n ): Promise<UserMaintainerMembership[]> => {\n const { data } = await client.get(\n '/manage/users/{id}/maintainers',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n /** Requires the target user to have MFA enabled (422 otherwise). Superadmin-only. */\n const grantSuperAdmin = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.post(\n '/manage/users/{id}/super-admin',\n { path: { id } },\n { signal },\n );\n return data;\n };\n\n const removeSuperAdmin = async (id: number, signal?: AbortSignal): Promise<UserDetail> => {\n const { data } = await client.delete(\n '/manage/users/{idOrEmail}/super-admin',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const disableUserMfa = async (id: number, signal?: AbortSignal): Promise<void> => {\n await client.delete(\n '/manage/users/{idOrEmail}/mfa',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n };\n\n const deleteUser = async (id: number, signal?: AbortSignal): Promise<void> => {\n await client.delete(\n '/manage/users/{idOrEmail}',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n };\n\n const updateUser = async ({ id, ...body }: UpdateUserInput) => {\n const { data } = await client.put('/manage/users/{idOrEmail}', {\n path: { idOrEmail: String(id) },\n body,\n });\n return data;\n };\n\n const getUserMetadata = async (id: number, signal?: AbortSignal) => {\n const { data } = await client.get(\n '/manage/users/{idOrEmail}/metadata',\n { path: { idOrEmail: String(id) } },\n { signal },\n );\n return data;\n };\n\n const setUserMetadata = async ({ id, ...body }: SetUserMetadataInput) => {\n const { data } = await client.post('/manage/users/{idOrEmail}/metadata', {\n path: { idOrEmail: String(id) },\n body,\n });\n return data;\n };\n\n const deleteUserMetadata = async ({ id, metadataId }: DeleteUserMetadataPath) => {\n await client.delete('/manage/users/{idOrEmail}/metadata/{metadataId}', {\n path: { idOrEmail: String(id), metadataId },\n });\n };\n\n return {\n addUserAdminFeature,\n removeUserAdminFeature,\n getUsers,\n getUser,\n getUserOrganizations,\n getUserProjects,\n getUserMaintainers,\n grantSuperAdmin,\n removeSuperAdmin,\n disableUserMfa,\n deleteUser,\n updateUser,\n getUserMetadata,\n setUserMetadata,\n deleteUserMetadata,\n };\n};\n","import {\n createGenericFetchClient,\n createOpenapiFetchClient,\n HttpHeader,\n type MiddlewareFn,\n} from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport { createAuthMiddleware } from './authMiddleware';\nimport { createCurrentUser } from './currentUser';\nimport { createDeletedProjects } from './deletedProjects';\nimport { createFeatures } from './features';\nimport { createFileStorage } from './fileStorage';\nimport { createMaintainers } from './maintainers';\nimport { createOrganizations } from './organizations';\nimport { createPayAsYouGo } from './payAsYouGo';\nimport { createProjects } from './projects';\nimport { createStorageBackends } from './storageBackends';\nimport { createUiApps } from './uiApps';\nimport { createUsers } from './users';\nimport { validateManagementStatus } from './validateStatus';\n\nexport type ManagementOpenApiFetchClient = ReturnType<typeof createOpenapiFetchClient<paths>>;\n\nexport type AuthStrategy =\n | { type: 'management-token'; token?: string }\n | { type: 'bearer'; token: string };\n\n// Only invoked on the raw (no-auth-middleware) path — otherwise the auth middleware\n// owns the Manage API token header.\nconst createAuthHeaders = (auth: AuthStrategy): Record<string, string> => {\n if (auth.type === 'management-token')\n return auth.token ? { [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: auth.token } : {};\n\n return { [HttpHeader.AUTHORIZATION]: `Bearer ${auth.token}` };\n};\n\ntype ManagementClientInitOptions = Omit<ClientInitOptions, 'auth' | 'middlewares'> & {\n auth: AuthStrategy;\n middlewares?: MiddlewareFn[];\n withAuthMiddleware?: boolean;\n};\n\nexport const createManagementClient = ({\n baseUrl,\n middlewares = [],\n auth,\n withAuthMiddleware = true,\n}: ManagementClientInitOptions) => {\n // The auth middleware keeps a long-lived management session alive: it verifies the\n // token and, when it's invalid/expired, mints/refreshes a session token. That self-healing\n // is wrong for a plain \"is this token valid?\" check (it would recurse when used to verify,\n // and mint a session instead of reporting invalid). Pass `withAuthMiddleware: false` to get\n // a raw client that just attaches the token — used for token verification.\n const allMiddlewares =\n withAuthMiddleware && auth.type === 'management-token'\n ? [\n ...middlewares,\n createAuthMiddleware({ baseUrl, accessToken: auth.token }), // 👈 order of middlewares always matters\n ]\n : middlewares;\n\n const headers = withAuthMiddleware ? undefined : createAuthHeaders(auth);\n\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares: allMiddlewares,\n headers,\n validateStatus: validateManagementStatus,\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const verifyToken = async (signal?: AbortSignal) => {\n const { data } = await client.get('/manage/tokens/verify', {}, { signal });\n return data;\n };\n\n // Host-level: Connection serves the storage, management and auth APIs off one baseUrl, so this\n // probes the host, not this API's prefix — `/v2/storage/health-check`, `/manage/health-check`\n // and `/v1/auth/health-check` all 404.\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 currentUser: createCurrentUser(client),\n deletedProjects: createDeletedProjects(client),\n maintainers: createMaintainers(client),\n organizations: createOrganizations(client),\n payAsYouGo: createPayAsYouGo(client),\n features: createFeatures(client),\n fileStorage: createFileStorage(client),\n projects: createProjects(client),\n storageBackends: createStorageBackends(client),\n uiApps: createUiApps(client),\n users: createUsers(client),\n verifyToken,\n };\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"semanticLayer-CSqmtHRo.js","names":[],"sources":["../src/sdks/semanticLayer/errorMessage.ts","../src/sdks/semanticLayer/vocabulary.ts","../src/sdks/semanticLayer/schemas.ts","../src/sdks/semanticLayer/readSchemas.ts","../src/sdks/semanticLayer/semanticLayerSdk.ts"],"sourcesContent":["/**\n * The message out of a metastore error body.\n *\n * - The metastore reports what is actually wrong with a write only inside `errors[].message`\n * (`missing property 'fqn'`). The HTTP status and the response's own message say no more than\n * \"Validation failed\", so a caller that renders those alone tells a user nothing actionable.\n * - Every shape that is not that envelope returns `undefined` rather than a placeholder, so the\n * caller keeps its own fallback (`?? error.message`) instead of rendering a stand-in for one.\n * - Only the first error: the metastore reports fields one at a time, so a list would be a list\n * of one.\n */\nexport const metastoreErrorMessage = (data: unknown): string | undefined => {\n if (typeof data !== 'object' || data === null) return undefined;\n const errors = (data as { errors?: unknown }).errors;\n if (!Array.isArray(errors)) return undefined;\n const first = errors[0];\n if (typeof first !== 'object' || first === null) return undefined;\n const message = (first as { message?: unknown }).message;\n return typeof message === 'string' && message ? message : undefined;\n};\n","/**\n * The closed value sets the metastore accepts inside a semantic object's `data`.\n *\n * - Each one is the single runtime source for a union in `./types`, which derives the type from\n * the array here. A value cannot exist in the type and be missing from the list a dropdown or\n * a validator is built from.\n * - The addressing vocabulary (`SEMANTIC_OBJECT_TYPE`, `MODEL_CHILD_OBJECT_TYPES`) is a\n * different axis — which object a call targets, not what may sit inside one — and stays beside\n * the SDK methods that take it.\n * - This file imports nothing: `./types` reads it, never the reverse.\n */\n\n/**\n * The dialects the metastore accepts, exactly as it spells them. A lowercase value is\n * rejected with `422 value must be one of 'Snowflake', 'BigQuery'`, which surfaces only as a\n * generic \"Validation failed\" — so callers need the real set rather than a bare `string`.\n *\n * `SemanticModelData.sql_dialect` stays `string` for now: narrowing it would break any caller\n * passing a `string` variable, which is a major bump. Validate against this instead.\n */\nexport const SQL_DIALECTS = ['Snowflake', 'BigQuery'] as const;\n\n/** The metastore's constraint kinds. */\nexport const CONSTRAINT_TYPES = [\n 'inequality',\n 'equality',\n 'range',\n 'composition',\n 'exclusion',\n 'temporal',\n 'conditional',\n] as const;\n\n/**\n * What a dataset field is for.\n *\n * - Enumerated, unlike a field's `type`: the metastore takes any type string, but only these\n * four roles.\n */\nexport const FIELD_ROLES = ['key', 'dimension', 'measure', 'timestamp'] as const;\n\n/**\n * How loudly a violated constraint reports.\n *\n * - An unset severity is stored as `warning`, so a reader renders that rather than nothing.\n */\nexport const CONSTRAINT_SEVERITIES = ['error', 'warning', 'info'] as const;\n\n/**\n * What a constraint's rule is evaluated per.\n *\n * - An unset scope is stored as `global`.\n */\nexport const CONSTRAINT_SCOPES = ['global', 'per_location', 'per_date', 'per_category'] as const;\n\n/** The comparisons a constraint's `ruleExpression` can make. */\nexport const RULE_OPERATORS = [\n '<',\n '<=',\n '=',\n '>=',\n '>',\n '!=',\n 'between',\n 'in',\n 'sum_equals',\n 'ratio_between',\n] as const;\n\n/** The join a relationship stands for. */\nexport const RELATIONSHIP_JOIN_TYPES = ['left', 'inner'] as const;\n","import { z } from 'zod';\n\nimport { CONSTRAINT_TYPES, SQL_DIALECTS } from './vocabulary';\n\n/**\n * Runtime validators for the semantic-layer payload shapes.\n *\n * These exist because the metastore's validation errors are opaque — a missing or misspelled\n * field surfaces only as a generic \"Validation failed\", and a wrong `sql_dialect` casing as a\n * 422 that names neither the field nor the accepted values. Parsing first turns those into a\n * message that says what is wrong.\n *\n * **Only the fields the SDK types mark as required are declared.** The metastore owns each\n * object type's full schema, so every schema is a `looseObject`: unknown fields pass through\n * untouched rather than being stripped or rejected. Re-declaring the optional fields here\n * would create a second source of truth that silently drops whatever the metastore adds next.\n *\n * The SDK does **not** parse on its own writes — these are for callers that accept untrusted\n * or hand-authored input (an agent's tool call, a form submission) and want to fail early.\n * `modelUUID` is omitted throughout: the SDK injects it, so callers never supply it.\n */\n\nexport const semanticModelSchema = z.looseObject({\n name: z.string().min(1),\n sql_dialect: z.enum(SQL_DIALECTS),\n});\n\nexport const semanticDatasetSchema = z.looseObject({\n name: z.string().min(1),\n tableId: z.string().min(1),\n fqn: z.string().min(1),\n});\n\nexport const semanticMetricSchema = z.looseObject({\n name: z.string().min(1),\n sql: z.string().min(1),\n});\n\nexport const semanticRelationshipSchema = z.looseObject({\n from: z.string().min(1),\n to: z.string().min(1),\n on: z.string().min(1),\n});\n\nexport const semanticGlossarySchema = z.looseObject({\n term: z.string().min(1),\n definition: z.string().min(1),\n});\n\nexport const semanticConstraintSchema = z.looseObject({\n name: z.string().min(1),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n rule: z.string().min(1),\n});\n\n/** Keyed by object type so a caller can pick the schema from a `SemanticChildObjectType`. */\nexport const SEMANTIC_CHILD_OBJECT_SCHEMAS = {\n 'semantic-dataset': semanticDatasetSchema,\n 'semantic-metric': semanticMetricSchema,\n 'semantic-relationship': semanticRelationshipSchema,\n 'semantic-glossary': semanticGlossarySchema,\n 'semantic-constraint': semanticConstraintSchema,\n} as const;\n","import { z } from 'zod';\n\nimport { formatValidationIssues } from '../../errors';\n\nimport type {\n SemanticAiMetadata,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticConstraintData,\n SemanticDatasetData,\n SemanticFieldData,\n SemanticGlossaryData,\n SemanticMetricData,\n SemanticModelData,\n SemanticObjectMeta,\n SemanticRelationshipData,\n SemanticRuleExpression,\n SemanticValidationQuery,\n} from './types';\nimport {\n CONSTRAINT_SCOPES,\n CONSTRAINT_SEVERITIES,\n CONSTRAINT_TYPES,\n FIELD_ROLES,\n RELATIONSHIP_JOIN_TYPES,\n RULE_OPERATORS,\n} from './vocabulary';\n\n/**\n * What a read of the metastore is allowed to hand back, per object type.\n *\n * - Every schema is annotated with the type it must produce, so the compiler rejects a schema that\n * omits a field `./types` declares or makes a required one optional. The declared type and the\n * parser cannot drift apart.\n * - `looseObject` throughout: a field the metastore adds still reaches a caller at runtime, exactly\n * as it did when this boundary asserted instead of parsing.\n * - The metastore validates each object type on write — that is where its opaque \"Validation\n * failed\" and `sql_dialect` 422s come from — so a stored object already satisfies these. Parsing\n * is the net under that, for an object written before a schema version tightened and for the\n * day the two schemas disagree.\n * - An **optional** enum that arrives with a value outside the list reads as absent rather than\n * taking its object down: a new `role` the metastore starts issuing must not delete the dataset\n * carrying it. A **required** enum has no such reading — `constraintType` decides what a\n * constraint means — so an unknown value drops the object.\n */\n\nconst aiMetadataSchema: z.ZodType<SemanticAiMetadata, unknown> = z.looseObject({\n synonyms: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n antiKeywords: z.array(z.string()).optional(),\n hints: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n});\n\nconst fieldSchema: z.ZodType<SemanticFieldData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n type: z.string().optional(),\n role: z.enum(FIELD_ROLES).optional().catch(undefined),\n values: z.array(z.string()).optional(),\n ai: aiMetadataSchema.optional(),\n});\n\n/**\n * A dataset's `fields`, where a malformed column is dropped rather than the whole dataset.\n *\n * - `name` is required and `schemas.ts` does not validate `fields` on write, so this SDK can\n * store a nameless column that a strict read would then hide the entire table over.\n * - The same rule as the collection one level up: a drop never takes its container with it.\n */\nconst datasetFieldsSchema = z.array(z.unknown()).transform((items) =>\n items.flatMap((element, index) => {\n const result = fieldSchema.safeParse(element);\n if (result.success) return [result.data];\n\n console.warn(\n `semanticLayerSdk: dropped field #${index} from a semantic-dataset, it does not match ` +\n `its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n return [];\n }),\n);\n\nconst ruleExpressionSchema: z.ZodType<SemanticRuleExpression, unknown> = z.looseObject({\n operator: z.enum(RULE_OPERATORS).optional().catch(undefined),\n left: z.string().optional(),\n right: z.string().optional(),\n bounds: z\n .looseObject({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n});\n\nconst validationQuerySchema: z.ZodType<SemanticValidationQuery, unknown> = z.looseObject({\n default: z.string().optional(),\n snowflake: z.string().optional(),\n bigquery: z.string().optional(),\n});\n\nexport const semanticModelReadSchema: z.ZodType<SemanticModelData, unknown> = z.looseObject({\n name: z.string(),\n description: z.string().optional(),\n sql_dialect: z.string(),\n});\n\nconst semanticDatasetReadSchema: z.ZodType<SemanticDatasetData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n tableId: z.string(),\n fqn: z.string(),\n description: z.string().optional(),\n grain: z.string().optional(),\n primaryKey: z.array(z.string()).optional(),\n fields: datasetFieldsSchema.optional(),\n ai: aiMetadataSchema.optional(),\n});\n\nconst semanticMetricReadSchema: z.ZodType<SemanticMetricData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n sql: z.string(),\n dataset: z.string().optional(),\n description: z.string().optional(),\n});\n\nconst semanticRelationshipReadSchema: z.ZodType<SemanticRelationshipData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string().optional(),\n from: z.string(),\n to: z.string(),\n on: z.string(),\n type: z.enum(RELATIONSHIP_JOIN_TYPES).optional().catch(undefined),\n});\n\nconst semanticGlossaryReadSchema: z.ZodType<SemanticGlossaryData, unknown> = z.looseObject({\n modelUUID: z.string(),\n term: z.string(),\n definition: z.string(),\n seeAlso: z.array(z.string()).optional(),\n});\n\nconst semanticConstraintReadSchema: z.ZodType<SemanticConstraintData, unknown> = z.looseObject({\n modelUUID: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n description: z.string().optional(),\n constraintType: z.enum(CONSTRAINT_TYPES),\n metrics: z.array(z.string()),\n datasets: z.array(z.string()).optional(),\n rule: z.string(),\n ruleExpression: ruleExpressionSchema.optional(),\n validationQuery: validationQuerySchema.optional(),\n severity: z.enum(CONSTRAINT_SEVERITIES).optional().catch(undefined),\n errorMessage: z.string().optional(),\n remediation: z.string().optional(),\n isActive: z.boolean().optional(),\n scope: z.enum(CONSTRAINT_SCOPES).optional().catch(undefined),\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n/** Keyed by object type so a read can pick the schema from a `SemanticChildObjectType`. */\nexport const SEMANTIC_CHILD_OBJECT_READ_SCHEMAS: {\n [T in SemanticChildObjectType]: z.ZodType<SemanticChildObjectDataMap[T], unknown>;\n} = {\n 'semantic-dataset': semanticDatasetReadSchema,\n 'semantic-metric': semanticMetricReadSchema,\n 'semantic-relationship': semanticRelationshipReadSchema,\n 'semantic-glossary': semanticGlossaryReadSchema,\n 'semantic-constraint': semanticConstraintReadSchema,\n};\n\nconst semanticObjectMetaSchema: z.ZodType<SemanticObjectMeta, unknown> = z.looseObject({\n name: z.string().optional(),\n branch: z.string().optional(),\n projectId: z.number().optional(),\n organizationId: z.string().optional(),\n revision: z.number().optional(),\n schemaVersion: z.string().optional(),\n createdAt: z.string().optional(),\n lastUpdated: z.string().optional(),\n revisionCreatedAt: z.string().optional(),\n});\n\n/**\n * The envelope every read comes wrapped in, mapped to the `SemanticObject` the SDK returns.\n *\n * `meta` is absent on nothing we have seen, but every field inside it is optional, so an envelope\n * that omits it is a normalization rather than a failure — the alternative is dropping an object\n * over audit fields no caller requires. `null` normalizes the same way: a serializer that writes\n * an absent object as `null` must not be a different outcome from one that omits the key.\n */\nexport const semanticObjectReadSchema = <TData>(dataSchema: z.ZodType<TData, unknown>) =>\n z\n .object({\n id: z.string(),\n attributes: dataSchema,\n meta: semanticObjectMetaSchema.nullish(),\n })\n .transform(({ id, attributes, meta }) => ({ uuid: id, data: attributes, meta: meta ?? {} }));\n","import { z } from 'zod';\n\nimport { formatValidationIssues, parseOrThrow } from '../../errors';\nimport { concurrent, generateUUID } from '../../utils';\n\nimport {\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS,\n semanticModelReadSchema,\n semanticObjectReadSchema,\n} from './readSchemas';\nimport type {\n CreateSemanticObjectMeta,\n MetastoreClient,\n SemanticChildObjectDataMap,\n SemanticChildObjectType,\n SemanticModelChildDeleteFailure,\n SemanticModelChildRef,\n SemanticModelData,\n SemanticObject,\n SemanticObjectMeta,\n SemanticObjectType,\n SemanticUnreadableObjectRef,\n UpdateSemanticObjectMeta,\n} from './types';\n\n/**\n * Thrown by `deleteModel` when the child cascade partially fails. Every child delete has\n * settled by the time this is thrown — nothing keeps deleting in the background — and the\n * model itself was kept, so the exact remaining state is knowable: `deletedChildren` are gone,\n * `failedChildren` (and the model) still exist. `errors` carries the per-child rejection\n * reasons, AggregateError-style.\n */\nexport class SemanticLayerCascadeDeleteError extends AggregateError {\n readonly modelUUID: string;\n readonly deletedChildren: SemanticModelChildRef[];\n readonly failedChildren: SemanticModelChildDeleteFailure[];\n\n constructor({\n modelUUID,\n deletedChildren,\n failedChildren,\n }: {\n modelUUID: string;\n deletedChildren: SemanticModelChildRef[];\n failedChildren: SemanticModelChildDeleteFailure[];\n }) {\n const total = deletedChildren.length + failedChildren.length;\n super(\n failedChildren.map((failure) => failure.error),\n `The model was kept because ${failedChildren.length} of its ${total} child objects ` +\n `could not be deleted (${deletedChildren.length} deleted).`,\n );\n this.name = 'SemanticLayerCascadeDeleteError';\n this.modelUUID = modelUUID;\n this.deletedChildren = deletedChildren;\n this.failedChildren = failedChildren;\n }\n}\n\n/**\n * Thrown by `listModelChildren` when a read that has to be complete was not.\n *\n * - A dropped object is invisible to the caller, and two of this SDK's answers cannot survive\n * that: what a delete would destroy, and whether a model still has children.\n * - So this one read fails closed where a display read degrades. `deleteModel` calls it before\n * the cascade starts, so nothing is deleted when it throws.\n * - `unreadable` lists what could not be parsed. `modelUUID` is `null` when that field is itself\n * part of what failed — an object that cannot name its model is counted against every model,\n * because the alternative is deleting the model it turns out to belong to.\n */\nexport class SemanticLayerUnreadableChildrenError extends Error {\n readonly modelUUID: string;\n readonly unreadable: SemanticUnreadableObjectRef[];\n\n constructor({\n modelUUID,\n unreadable,\n }: {\n modelUUID: string;\n unreadable: SemanticUnreadableObjectRef[];\n }) {\n super(\n `${unreadable.length} child object(s) of the model could not be read, so what it holds ` +\n `is unknown and nothing was deleted.`,\n );\n this.name = 'SemanticLayerUnreadableChildrenError';\n this.modelUUID = modelUUID;\n this.unreadable = unreadable;\n }\n}\n\nexport const SEMANTIC_OBJECT_TYPE = {\n MODEL: 'semantic-model',\n DATASET: 'semantic-dataset',\n METRIC: 'semantic-metric',\n RELATIONSHIP: 'semantic-relationship',\n GLOSSARY: 'semantic-glossary',\n CONSTRAINT: 'semantic-constraint',\n} as const satisfies Record<string, SemanticObjectType>;\n\n/**\n * `readonly` because this drives `createModelTree`, `listModelChildren` and `deleteModel` —\n * a consumer-side `.push()` would silently change what a cascade delete touches.\n */\nexport const MODEL_CHILD_OBJECT_TYPES: readonly SemanticChildObjectType[] = [\n SEMANTIC_OBJECT_TYPE.DATASET,\n SEMANTIC_OBJECT_TYPE.METRIC,\n SEMANTIC_OBJECT_TYPE.RELATIONSHIP,\n SEMANTIC_OBJECT_TYPE.GLOSSARY,\n SEMANTIC_OBJECT_TYPE.CONSTRAINT,\n] as const;\n\nconst DEFAULT_BRANCH = 'main';\n\n// The metastore has no bulk endpoint; large semantic-layer inits are written as\n// concurrent single POSTs (the same approach the ai-kit sl-toolkit importer uses).\nconst WRITE_CONCURRENCY = 5;\n\n/**\n * The live metastore envelope.\n *\n * - `attributes` carries the object's data payload directly, the UUID is the top-level `id`, and\n * revision/branch/audit fields live in `meta`.\n * - The legacy wrapper types in clients/metastore/repository/types.ts do not match this shape.\n * - Reads parse into it (`./readSchemas`); this type is what a **write** asserts, where the\n * metastore is echoing back the object it has just validated and stored.\n */\ntype RawSemanticObject<TData> = {\n type: string;\n id: string;\n attributes: TData;\n meta: SemanticObjectMeta;\n};\n\nconst mapObject = <TData>(item: RawSemanticObject<TData>): SemanticObject<TData> => ({\n uuid: item.id,\n data: item.attributes,\n meta: item.meta,\n});\n\n/**\n * The UUID of an envelope that failed to parse, read off the raw value.\n *\n * There is no parse result to read it from. `null` — no `id`, not a string, or not an object at\n * all — means the object is unaddressable: nothing can fetch, fix or delete it by UUID.\n */\nconst envelopeId = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { id } = value as { id?: unknown };\n return typeof id === 'string' && id !== '' ? id : null;\n};\n\n/**\n * The model a *dropped* envelope claims, read off the raw value.\n *\n * `listObjects` scopes a collection by the parsed `data.modelUUID`, which an object that failed\n * to parse has none of. `null` — the field is missing, not a string, or the envelope is not an\n * object — means \"cannot be attributed\", and every caller here treats that as \"could be this\n * model's\".\n */\nconst envelopeModelUUID = (value: unknown): string | null => {\n if (typeof value !== 'object' || value === null) return null;\n const { attributes } = value as { attributes?: unknown };\n if (typeof attributes !== 'object' || attributes === null) return null;\n const { modelUUID } = attributes as { modelUUID?: unknown };\n return typeof modelUUID === 'string' && modelUUID !== '' ? modelUUID : null;\n};\n\nconst deriveOptionalObjectName = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.name === 'string') return data.name;\n if (typeof data.term === 'string') return data.term;\n return undefined;\n};\n\nconst deriveObjectName = (data: Record<string, unknown>) =>\n deriveOptionalObjectName(data) ?? generateUUID();\n\n/**\n * The label a UI shows for an object, as opposed to the identifier it is addressed by.\n *\n * Constraints carry an optional `displayName`; kbc-ui's constraint tables already render\n * `displayName ?? name`, so a confirmation listing what a cascade delete would destroy has to\n * agree with them or it names objects the user can't find on screen.\n *\n * Deliberately **not** used for lookup: `displayName` is optional and not unique, so matching on\n * it would make `findObjectsByName` ambiguous for callers that resolve a write target by name.\n */\nconst deriveObjectLabel = (data: Record<string, unknown>): string | undefined => {\n if (typeof data.displayName === 'string' && data.displayName !== '') return data.displayName;\n return deriveOptionalObjectName(data);\n};\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createSemanticLayerSdk = ({ metastoreClient }: Options) => {\n /**\n * Every object of one type, parsed rather than asserted.\n *\n * - Each element is validated against the shape `./types` declares for it, so a caller that\n * reads a field the type marks required gets a string and not a `TypeError` in render.\n * - An element that does not match is dropped and the reason logged — the metastore validates\n * these on write, so one that fails here is genuinely broken, and a half-formed object is\n * worse to hand a caller than no object.\n * - A drop never takes the collection with it: a model with one malformed metric still lists\n * the other nine.\n * - A response that is not a collection at all is a different failure and throws, because\n * reading it as an empty list would render \"this project has no metrics\".\n */\n const _listObjects = async <TData>(\n objectType: SemanticObjectType,\n dataSchema: z.ZodType<TData, unknown>,\n signal?: AbortSignal,\n ): Promise<{ objects: SemanticObject<TData>[]; unreadable: SemanticUnreadableObjectRef[] }> => {\n const response = await metastoreClient.repository.getMetaObjects({ objectType }, signal);\n const items = parseOrThrow(z.array(z.unknown()), response.data);\n const schema = semanticObjectReadSchema(dataSchema);\n\n const objects: SemanticObject<TData>[] = [];\n const unreadable: SemanticUnreadableObjectRef[] = [];\n\n for (const item of items) {\n const result = schema.safeParse(item);\n if (result.success) {\n objects.push(result.data);\n continue;\n }\n\n unreadable.push({\n objectType,\n objectUUID: envelopeId(item),\n modelUUID: envelopeModelUUID(item),\n });\n\n // The object type, the UUID and the failing field, never the payload: a model's\n // vocabulary and its SQL are the customer's and do not belong in a console.\n console.warn(\n `semanticLayerSdk: dropped ${objectType} \"${envelopeId(item) ?? '<no id>'}\" from the ` +\n `metastore response, it does not match its declared shape`,\n formatValidationIssues(result.error.issues),\n );\n }\n\n return { objects, unreadable };\n };\n\n const listModels = async (signal?: AbortSignal) =>\n (await _listObjects(SEMANTIC_OBJECT_TYPE.MODEL, semanticModelReadSchema, signal)).objects;\n\n const createModel = async (data: SemanticModelData, meta: CreateSemanticObjectMeta = {}) => {\n const response = await metastoreClient.repository.createMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta so the metastore name stays in sync with the payload.\n name: data.name,\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n const updateModel = async (\n modelUUID: string,\n data: Partial<SemanticModelData>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.updateMetaObject<SemanticModelData>({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n data,\n ...meta,\n // Derived rename wins over meta so the metastore name stays in sync with the payload.\n ...(data.name ? { name: data.name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticModelData>);\n };\n\n /**\n * One child collection, scoped to a model, with what the scoping could not account for.\n *\n * - An object that parsed is this model's when its `modelUUID` matches.\n * - An object that did not parse is this model's when the raw envelope says so — and also when\n * the envelope cannot say, since a dropped object that names no model could be anyone's.\n */\n const _listChildObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n const { objects, unreadable } = await _listObjects(\n objectType,\n SEMANTIC_CHILD_OBJECT_READ_SCHEMAS[objectType],\n signal,\n );\n\n return {\n objects: objects.filter((object) => object.data.modelUUID === modelUUID),\n unreadable: unreadable.filter((ref) => ref.modelUUID === null || ref.modelUUID === modelUUID),\n };\n };\n\n const listObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n modelUUID: string,\n signal?: AbortSignal,\n ) => (await _listChildObjects(objectType, modelUUID, signal)).objects;\n\n /**\n * Find a model's child objects by their user-facing name.\n *\n * Returns every match rather than resolving to one, because a name is not unique: the caller\n * decides whether that's an error (an agent needs an unambiguous target) or a choice to offer\n * (a UI can render a picker). Glossary entries key on `term`, so both are matched.\n */\n const findObjectsByName = async <T extends SemanticChildObjectType>(\n objectType: T,\n name: string,\n modelUUID: string,\n signal?: AbortSignal,\n ) => {\n const objects = await listObjects(objectType, modelUUID, signal);\n return objects.filter((object) => deriveOptionalObjectName(object.data) === name);\n };\n\n const createObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n data: SemanticChildObjectDataMap[T],\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const response = await metastoreClient.repository.createMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n data,\n branch: DEFAULT_BRANCH,\n ...meta,\n // Derived name wins over meta so the metastore name stays in sync with the payload.\n name: deriveObjectName(data),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const createObjects = async <T extends SemanticChildObjectType>(\n objectType: T,\n items: SemanticChildObjectDataMap[T][],\n meta: CreateSemanticObjectMeta = {},\n ) =>\n concurrent({\n items,\n process: async (data) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n // Create a model and all its child objects in one call: the model first (so its\n // UUID exists), then every child concurrently with the modelUUID injected.\n const createModelTree = async (\n model: SemanticModelData,\n children: Partial<{\n [T in SemanticChildObjectType]: Omit<SemanticChildObjectDataMap[T], 'modelUUID'>[];\n }>,\n meta: CreateSemanticObjectMeta = {},\n ) => {\n const createdModel = await createModel(model, meta);\n\n const items = MODEL_CHILD_OBJECT_TYPES.flatMap((objectType) =>\n (children[objectType] ?? []).map((data) => ({\n objectType,\n data: {\n ...data,\n modelUUID: createdModel.uuid,\n } satisfies SemanticChildObjectDataMap[typeof objectType],\n })),\n );\n\n const createdChildren = await concurrent({\n items,\n process: async ({ objectType, data }) => createObject(objectType, data, meta),\n concurrency: WRITE_CONCURRENCY,\n });\n\n return { model: createdModel, children: createdChildren };\n };\n\n const updateObject = async <T extends SemanticChildObjectType>(\n objectType: T,\n objectUUID: string,\n data: Partial<SemanticChildObjectDataMap[T]>,\n meta: UpdateSemanticObjectMeta = {},\n ) => {\n const name = deriveOptionalObjectName(data);\n const response = await metastoreClient.repository.updateMetaObject<\n SemanticChildObjectDataMap[T]\n >({\n objectType,\n UUID: objectUUID,\n data,\n ...meta,\n // Derived rename wins over meta so the metastore name stays in sync with the payload.\n ...(name ? { name } : {}),\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<SemanticChildObjectDataMap[T]>);\n };\n\n const deleteObject = async (objectType: SemanticChildObjectType, objectUUID: string) => {\n await metastoreClient.repository.deleteMetaObject({\n objectType,\n UUID: objectUUID,\n });\n };\n\n /**\n * Every child object of a model, across all five types, flattened.\n *\n * `deleteModel` uses this to find what to remove; callers can use it to say what a delete\n * would destroy *before* asking the user to confirm. Each entry's `name` is the object's\n * display label (a constraint's `displayName` in preference to its `name`, matching what the\n * SL tables render), so a confirmation lists objects as the user sees them on screen.\n *\n * Costs five list requests: the metastore has no per-model filter, so the collections are\n * fetched whole and filtered client-side.\n *\n * **Throws `SemanticLayerUnreadableChildrenError` rather than degrading.** The list reads\n * degrade — one malformed metric does not hide the other nine — but this answer is what\n * `deleteModel` and every \"what would this destroy?\" confirmation is built on, and a short\n * list there deletes the object it left out. An unreadable child is counted against the model\n * whenever the raw envelope names it, and against every model when it cannot.\n */\n const listModelChildren = async (\n modelUUID: string,\n signal?: AbortSignal,\n ): Promise<SemanticModelChildRef[]> => {\n const perType = await Promise.all(\n MODEL_CHILD_OBJECT_TYPES.map(async (objectType) => {\n const { objects, unreadable } = await _listChildObjects(objectType, modelUUID, signal);\n return {\n children: objects.map((object) => ({\n objectType,\n objectUUID: object.uuid,\n name: deriveObjectLabel(object.data),\n })),\n unreadable,\n };\n }),\n );\n\n const unreadable = perType.flatMap((result) => result.unreadable);\n if (unreadable.length > 0) {\n throw new SemanticLayerUnreadableChildrenError({ modelUUID, unreadable });\n }\n\n return perType.flatMap((result) => result.children);\n };\n\n /**\n * Cascade delete: every child object first, the model itself only once its whole tree is\n * gone. Child deletes all settle — a failing child never aborts the others, so no delete\n * runs on detached after this rejects — and a partial failure surfaces as\n * `SemanticLayerCascadeDeleteError`, which says exactly which children were deleted and\n * which survived. The model is kept on any child failure so it never orphans children.\n *\n * The same holds for a child that could not be *read*: `listModelChildren` throws before the\n * cascade starts, so an object the read boundary dropped keeps the model alive rather than\n * being silently left behind pointing at a model that no longer exists.\n */\n const deleteModel = async (modelUUID: string) => {\n const children = await listModelChildren(modelUUID);\n\n const outcomes = await concurrent({\n items: children,\n process: async (child) => {\n try {\n await deleteObject(child.objectType, child.objectUUID);\n return { ok: true as const, child };\n } catch (error) {\n return { ok: false as const, child, error };\n }\n },\n concurrency: WRITE_CONCURRENCY,\n });\n\n const deletedChildren: SemanticModelChildRef[] = [];\n const failedChildren: SemanticModelChildDeleteFailure[] = [];\n for (const outcome of outcomes) {\n if (outcome.ok) deletedChildren.push(outcome.child);\n else failedChildren.push({ ...outcome.child, error: outcome.error });\n }\n\n if (failedChildren.length > 0) {\n throw new SemanticLayerCascadeDeleteError({ modelUUID, deletedChildren, failedChildren });\n }\n\n await metastoreClient.repository.deleteMetaObject({\n objectType: SEMANTIC_OBJECT_TYPE.MODEL,\n UUID: modelUUID,\n });\n };\n\n /**\n * Replace the sibling projects granted GET/consumption access to a `targeted`-scope object.\n *\n * Passing an empty array clears every grant, leaving the object visible to its owning project\n * only. A grant conveys read access alone — the target projects can consume the definition but\n * never edit it, which is enforced metastore-side rather than here.\n */\n const replaceTargetProjects = async (\n objectType: SemanticObjectType,\n objectUUID: string,\n targetProjectIds: number[],\n ) => {\n await metastoreClient.repository.replaceTargetProjects({\n objectType,\n UUID: objectUUID,\n targetProjectIds,\n });\n };\n\n /**\n * Step a project-scoped object up to the organization scope, in place.\n *\n * The object keeps its UUID and revision history; the step-up writes a new revision whose\n * `project_id` is null. Requires the caller to hold the organization-admin role for the target\n * organization — a project-admin gets 403 from the metastore, which callers should surface\n * rather than pre-empt (the same person is often both).\n */\n const promoteToOrganizationScope = async (objectType: SemanticObjectType, objectUUID: string) => {\n // Scope ONLY. No `data`, not even `{}`: the metastore's step-up guard rejects a PATCH that\n // also carries name or data, and `Data *JSONData` treats `{}` as present — which 400s with\n // \"A scope change cannot be combined with name or data changes\".\n const response = await metastoreClient.repository.updateMetaObject({\n objectType,\n UUID: objectUUID,\n scope: 'organization',\n });\n\n return mapObject(response.data as unknown as RawSemanticObject<Record<string, unknown>>);\n };\n\n return {\n // models\n listModels,\n createModel,\n updateModel,\n deleteModel,\n listModelChildren,\n\n // child objects (datasets, metrics, relationships, glossary, constraints)\n listObjects,\n findObjectsByName,\n createObject,\n createObjects,\n createModelTree,\n updateObject,\n deleteObject,\n\n // scoping / sharing\n replaceTargetProjects,\n promoteToOrganizationScope,\n };\n};\n"],"mappings":"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"}