@keboola/api-client 21.0.0 → 23.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.
- package/API-SURFACE.md +26 -1
- package/dist/ai/index.cjs +4 -4
- package/dist/ai/index.d.cts +3 -2
- package/dist/ai/index.d.ts +3 -2
- package/dist/ai/index.js +3 -3
- package/dist/ai/types.d.cts +2 -2
- package/dist/ai/types.d.ts +2 -2
- package/dist/assets/index.cjs +12 -3
- package/dist/assets/index.cjs.map +1 -1
- package/dist/assets/index.d.cts +1 -0
- package/dist/assets/index.d.ts +1 -0
- package/dist/assets/index.js +11 -2
- package/dist/assets/index.js.map +1 -1
- package/dist/auth/index.cjs +22 -10
- package/dist/auth/index.d.cts +39 -4
- package/dist/auth/index.d.ts +39 -4
- package/dist/auth/index.js +2 -2
- package/dist/auth/types.d.cts +4 -8
- package/dist/auth/types.d.ts +4 -8
- package/dist/chat/index.cjs +4 -4
- package/dist/chat/index.d.cts +3 -7
- package/dist/chat/index.d.ts +3 -7
- package/dist/chat/index.js +3 -3
- package/dist/chat/types.d.cts +2 -2
- package/dist/chat/types.d.ts +2 -2
- package/dist/{chunk-YHMW7CZF.cjs → chunk-22D55AHX.cjs} +98 -19
- package/dist/chunk-22D55AHX.cjs.map +1 -0
- package/dist/chunk-22E6IGXR.js +6 -0
- package/dist/chunk-22E6IGXR.js.map +1 -0
- package/dist/{chunk-NV3P6XBU.js → chunk-33NQB34X.js} +4 -4
- package/dist/{chunk-NV3P6XBU.js.map → chunk-33NQB34X.js.map} +1 -1
- package/dist/{chunk-CBVGOANJ.cjs → chunk-35MODDCL.cjs} +6 -7
- package/dist/chunk-35MODDCL.cjs.map +1 -0
- package/dist/{chunk-RK2VGHJE.js → chunk-3B3GOGAL.js} +3 -3
- package/dist/chunk-3B3GOGAL.js.map +1 -0
- package/dist/chunk-43CGBOVT.cjs +16 -0
- package/dist/{chunk-UQWVZTEA.cjs.map → chunk-43CGBOVT.cjs.map} +1 -1
- package/dist/{chunk-C5R6ITYD.cjs → chunk-4GUUSO5O.cjs} +24 -7
- package/dist/chunk-4GUUSO5O.cjs.map +1 -0
- package/dist/{chunk-R2FAPJMZ.js → chunk-4Z5W2F6Q.js} +86 -7
- package/dist/chunk-4Z5W2F6Q.js.map +1 -0
- package/dist/{chunk-SB7AVZQU.cjs → chunk-556U6PFA.cjs} +6 -6
- package/dist/{chunk-SB7AVZQU.cjs.map → chunk-556U6PFA.cjs.map} +1 -1
- package/dist/{chunk-U7CANHDD.js → chunk-5Z6M32UE.js} +16 -5
- package/dist/chunk-5Z6M32UE.js.map +1 -0
- package/dist/{chunk-DAAHTUXU.cjs → chunk-5ZOWA7DA.cjs} +6 -6
- package/dist/{chunk-DAAHTUXU.cjs.map → chunk-5ZOWA7DA.cjs.map} +1 -1
- package/dist/{chunk-IWNJ47CV.js → chunk-6LBMZAPF.js} +14 -5
- package/dist/chunk-6LBMZAPF.js.map +1 -0
- package/dist/{chunk-AFIQYB2O.cjs → chunk-BWBTNAVL.cjs} +9 -9
- package/dist/{chunk-AFIQYB2O.cjs.map → chunk-BWBTNAVL.cjs.map} +1 -1
- package/dist/{chunk-NRJTA5P3.cjs → chunk-CCC6I32C.cjs} +4 -4
- package/dist/{chunk-NRJTA5P3.cjs.map → chunk-CCC6I32C.cjs.map} +1 -1
- package/dist/{chunk-LGWRJM5X.cjs → chunk-CN5GAKRO.cjs} +6 -6
- package/dist/{chunk-LGWRJM5X.cjs.map → chunk-CN5GAKRO.cjs.map} +1 -1
- package/dist/{chunk-IUN2ZSU3.cjs → chunk-DMNWPVVT.cjs} +3 -2
- package/dist/chunk-DMNWPVVT.cjs.map +1 -0
- package/dist/{chunk-4WX5W7YU.js → chunk-F43HBNKD.js} +4 -4
- package/dist/{chunk-4WX5W7YU.js.map → chunk-F43HBNKD.js.map} +1 -1
- package/dist/{chunk-HUNYAVJJ.cjs → chunk-FDTWXXI4.cjs} +7 -7
- package/dist/{chunk-HUNYAVJJ.cjs.map → chunk-FDTWXXI4.cjs.map} +1 -1
- package/dist/{chunk-ZHNOZHJG.js → chunk-FQK3YM7U.js} +3 -3
- package/dist/{chunk-ZHNOZHJG.js.map → chunk-FQK3YM7U.js.map} +1 -1
- package/dist/{chunk-DAS5UQN6.cjs → chunk-FVJC2GJY.cjs} +19 -8
- package/dist/chunk-FVJC2GJY.cjs.map +1 -0
- package/dist/{chunk-5FDQYOJD.js → chunk-G5JMZI2L.js} +22 -5
- package/dist/chunk-G5JMZI2L.js.map +1 -0
- package/dist/{chunk-KF5EI2IB.js → chunk-HFZCZ7PZ.js} +57 -7
- package/dist/chunk-HFZCZ7PZ.js.map +1 -0
- package/dist/{chunk-S5XEXK36.cjs → chunk-HZSZQFEO.cjs} +9 -9
- package/dist/{chunk-S5XEXK36.cjs.map → chunk-HZSZQFEO.cjs.map} +1 -1
- package/dist/{chunk-WWICQYOY.cjs → chunk-IYGHWPCR.cjs} +4 -4
- package/dist/{chunk-WWICQYOY.cjs.map → chunk-IYGHWPCR.cjs.map} +1 -1
- package/dist/{chunk-CWD66KRM.js → chunk-J2MBTBE2.js} +4 -4
- package/dist/{chunk-CWD66KRM.js.map → chunk-J2MBTBE2.js.map} +1 -1
- package/dist/{chunk-DJ5LXAG3.js → chunk-JQSMJ64B.js} +4 -4
- package/dist/{chunk-DJ5LXAG3.js.map → chunk-JQSMJ64B.js.map} +1 -1
- package/dist/{chunk-X6BQTEIT.cjs → chunk-K6EZ3USU.cjs} +7 -7
- package/dist/{chunk-X6BQTEIT.cjs.map → chunk-K6EZ3USU.cjs.map} +1 -1
- package/dist/{chunk-6BYHD5DG.js → chunk-KH6BHTXN.js} +3 -4
- package/dist/chunk-KH6BHTXN.js.map +1 -0
- package/dist/{chunk-4HBUVR57.cjs → chunk-KUYVBCUM.cjs} +82 -6
- package/dist/chunk-KUYVBCUM.cjs.map +1 -0
- package/dist/{chunk-OZMUKLXN.cjs → chunk-KY4EYQ6I.cjs} +6 -6
- package/dist/{chunk-OZMUKLXN.cjs.map → chunk-KY4EYQ6I.cjs.map} +1 -1
- package/dist/{chunk-6JXSO3AR.js → chunk-L4R66Q6S.js} +3 -3
- package/dist/{chunk-6JXSO3AR.js.map → chunk-L4R66Q6S.js.map} +1 -1
- package/dist/{chunk-P6OWDUN7.js → chunk-L63UYWJG.js} +4 -4
- package/dist/{chunk-P6OWDUN7.js.map → chunk-L63UYWJG.js.map} +1 -1
- package/dist/{chunk-EXNR4FGV.js → chunk-MIUULCML.js} +3 -3
- package/dist/{chunk-EXNR4FGV.js.map → chunk-MIUULCML.js.map} +1 -1
- package/dist/{chunk-MUC6XWII.js → chunk-PEC3BYFA.js} +4 -4
- package/dist/{chunk-MUC6XWII.js.map → chunk-PEC3BYFA.js.map} +1 -1
- package/dist/{chunk-ZCODWFCC.js → chunk-PHP2NND7.js} +4 -4
- package/dist/{chunk-ZCODWFCC.js.map → chunk-PHP2NND7.js.map} +1 -1
- package/dist/{chunk-HJQYMALV.cjs → chunk-Q7C2IRF2.cjs} +6 -6
- package/dist/{chunk-HJQYMALV.cjs.map → chunk-Q7C2IRF2.cjs.map} +1 -1
- package/dist/chunk-QHD4LPAQ.cjs +8 -0
- package/dist/chunk-QHD4LPAQ.cjs.map +1 -0
- package/dist/{chunk-LFLFNQMQ.js → chunk-R3NW5LAB.js} +4 -4
- package/dist/{chunk-LFLFNQMQ.js.map → chunk-R3NW5LAB.js.map} +1 -1
- package/dist/{chunk-FDISA5KO.cjs → chunk-T7SEZMQ7.cjs} +16 -7
- package/dist/chunk-T7SEZMQ7.cjs.map +1 -0
- package/dist/{chunk-YVC4NGW2.js → chunk-TCGHVOIJ.js} +4 -4
- package/dist/{chunk-YVC4NGW2.js.map → chunk-TCGHVOIJ.js.map} +1 -1
- package/dist/{chunk-WXGYFLFX.js → chunk-TF3JWA7J.js} +4 -4
- package/dist/{chunk-WXGYFLFX.js.map → chunk-TF3JWA7J.js.map} +1 -1
- package/dist/{chunk-VTC3FL4B.js → chunk-UH5JOSEE.js} +4 -4
- package/dist/{chunk-VTC3FL4B.js.map → chunk-UH5JOSEE.js.map} +1 -1
- package/dist/{chunk-M2LJZXVR.js → chunk-UP5SEEYZ.js} +73 -7
- package/dist/chunk-UP5SEEYZ.js.map +1 -0
- package/dist/{chunk-HHULC5GT.cjs → chunk-VPNWX7YM.cjs} +6 -6
- package/dist/{chunk-HHULC5GT.cjs.map → chunk-VPNWX7YM.cjs.map} +1 -1
- package/dist/{chunk-V6QQZLEU.js → chunk-WJEAGAWB.js} +4 -4
- package/dist/{chunk-V6QQZLEU.js.map → chunk-WJEAGAWB.js.map} +1 -1
- package/dist/{chunk-3GTRQFWA.cjs → chunk-WZGBE4XH.cjs} +9 -9
- package/dist/{chunk-3GTRQFWA.cjs.map → chunk-WZGBE4XH.cjs.map} +1 -1
- package/dist/chunk-X4HEWMPU.cjs +113 -0
- package/dist/chunk-X4HEWMPU.cjs.map +1 -0
- package/dist/{chunk-XPQBE77T.cjs → chunk-YEF46DYF.cjs} +61 -8
- package/dist/chunk-YEF46DYF.cjs.map +1 -0
- package/dist/{chunk-RTQEMQIC.cjs → chunk-YQEBJG5H.cjs} +6 -6
- package/dist/{chunk-RTQEMQIC.cjs.map → chunk-YQEBJG5H.cjs.map} +1 -1
- package/dist/chunk-ZDCEKJAL.js +110 -0
- package/dist/chunk-ZDCEKJAL.js.map +1 -0
- package/dist/constants/index.cjs +15 -1
- package/dist/constants/index.cjs.map +1 -1
- package/dist/constants/index.d.cts +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +15 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/{createOpenapiFetchClient-BMaILWyq.d.ts → createOpenapiFetchClient-BX7_szVZ.d.ts} +1 -1
- package/dist/{createOpenapiFetchClient-DQL2ZYNb.d.cts → createOpenapiFetchClient-pguVgT7R.d.cts} +1 -1
- package/dist/dataScience/index.cjs +5 -5
- package/dist/dataScience/index.d.cts +3 -8
- package/dist/dataScience/index.d.ts +3 -8
- package/dist/dataScience/index.js +3 -3
- package/dist/dataScience/types.d.cts +2 -2
- package/dist/dataScience/types.d.ts +2 -2
- package/dist/domain/permissions/index.cjs +23 -0
- package/dist/domain/permissions/index.cjs.map +1 -1
- package/dist/domain/permissions/index.d.cts +39 -4
- package/dist/domain/permissions/index.d.ts +39 -4
- package/dist/domain/permissions/index.js +20 -1
- package/dist/domain/permissions/index.js.map +1 -1
- package/dist/editor/index.cjs +4 -4
- package/dist/editor/index.d.cts +2 -2
- package/dist/editor/index.d.ts +2 -2
- package/dist/editor/index.js +3 -3
- package/dist/editor/types.d.cts +2 -2
- package/dist/editor/types.d.ts +2 -2
- package/dist/encryption/index.cjs +3 -3
- package/dist/encryption/index.d.cts +2 -2
- package/dist/encryption/index.d.ts +2 -2
- package/dist/encryption/index.js +2 -2
- package/dist/encryption/types.d.cts +2 -2
- package/dist/encryption/types.d.ts +2 -2
- package/dist/import/index.cjs +4 -4
- package/dist/import/index.js +3 -3
- package/dist/index.cjs +129 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +395 -47
- package/dist/index.d.ts +395 -47
- package/dist/index.js +59 -31
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +5 -5
- package/dist/management/index.d.cts +12 -3
- package/dist/management/index.d.ts +12 -3
- package/dist/management/index.js +3 -3
- package/dist/management/types.d.cts +2 -2
- package/dist/management/types.d.ts +2 -2
- package/dist/metastore/index.cjs +4 -4
- package/dist/metastore/index.d.cts +3 -3
- package/dist/metastore/index.d.ts +3 -3
- package/dist/metastore/index.js +3 -3
- package/dist/metastore/types.d.cts +2 -2
- package/dist/metastore/types.d.ts +2 -2
- package/dist/notifications/index.cjs +5 -4
- package/dist/notifications/index.d.cts +29 -16
- package/dist/notifications/index.d.ts +29 -16
- package/dist/notifications/index.js +4 -3
- package/dist/notifications/types.d.cts +2 -2
- package/dist/notifications/types.d.ts +2 -2
- package/dist/oauth/index.cjs +4 -4
- package/dist/oauth/index.js +3 -3
- package/dist/{project-BpTHlKfO.d.ts → project-BV-vseKc.d.ts} +1 -1
- package/dist/{project-DEFMKeAm.d.cts → project-CbJCjkdt.d.cts} +1 -1
- package/dist/queryService/index.cjs +4 -4
- package/dist/queryService/index.d.cts +2 -2
- package/dist/queryService/index.d.ts +2 -2
- package/dist/queryService/index.js +3 -3
- package/dist/queryService/types.d.cts +2 -2
- package/dist/queryService/types.d.ts +2 -2
- package/dist/queue/index.cjs +5 -4
- package/dist/queue/index.d.cts +206 -2
- package/dist/queue/index.d.ts +206 -2
- package/dist/queue/index.js +4 -3
- package/dist/queue/types.d.cts +2 -2
- package/dist/queue/types.d.ts +2 -2
- package/dist/scheduler/index.cjs +5 -4
- package/dist/scheduler/index.d.cts +2 -1
- package/dist/scheduler/index.d.ts +2 -1
- package/dist/scheduler/index.js +4 -3
- package/dist/scheduler/types.d.cts +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/sdk/configurations/index.d.cts +5 -5
- package/dist/sdk/configurations/index.d.ts +5 -5
- package/dist/sdk/semanticLayer/index.cjs +43 -3
- package/dist/sdk/semanticLayer/index.d.cts +120 -5
- package/dist/sdk/semanticLayer/index.d.ts +120 -5
- package/dist/sdk/semanticLayer/index.js +1 -1
- package/dist/sdk/semanticLayer/types.d.cts +3 -3
- package/dist/sdk/semanticLayer/types.d.ts +3 -3
- package/dist/sdk/storage/index.cjs +12 -11
- package/dist/sdk/storage/index.d.cts +5 -5
- package/dist/sdk/storage/index.d.ts +5 -5
- package/dist/sdk/storage/index.js +2 -1
- package/dist/sdk/tag/index.d.cts +3 -3
- package/dist/sdk/tag/index.d.ts +3 -3
- package/dist/sdk/tag/types.d.cts +3 -3
- package/dist/sdk/tag/types.d.ts +3 -3
- package/dist/sdk/vault/index.d.cts +3 -3
- package/dist/sdk/vault/index.d.ts +3 -3
- package/dist/status/index.cjs +2 -2
- package/dist/status/index.js +1 -1
- package/dist/storage/index.cjs +12 -12
- package/dist/storage/index.d.cts +4 -4
- package/dist/storage/index.d.ts +4 -4
- package/dist/storage/index.js +5 -5
- package/dist/storage/types.d.cts +3 -3
- package/dist/storage/types.d.ts +3 -3
- package/dist/{storageClient-BxgbulPW.d.cts → storageClient-Dlu7OJgJ.d.cts} +2 -2
- package/dist/{storageClient-BONJnuhr.d.ts → storageClient-Dz4tTWOc.d.ts} +2 -2
- package/dist/{storageSdk-uCojVKkr.d.cts → storageSdk-DxbSjnHh.d.cts} +1 -1
- package/dist/{storageSdk-CUnp67LN.d.ts → storageSdk-PRaSLkD6.d.ts} +1 -1
- package/dist/stream/index.cjs +4 -4
- package/dist/stream/index.d.cts +2 -2
- package/dist/stream/index.d.ts +2 -2
- package/dist/stream/index.js +3 -3
- package/dist/stream/types.d.cts +2 -2
- package/dist/stream/types.d.ts +2 -2
- package/dist/syncActions/index.cjs +4 -4
- package/dist/syncActions/index.d.cts +2 -2
- package/dist/syncActions/index.d.ts +2 -2
- package/dist/syncActions/index.js +3 -3
- package/dist/syncActions/types.d.cts +1 -10
- package/dist/syncActions/types.d.ts +1 -10
- package/dist/telemetry/index.cjs +4 -4
- package/dist/telemetry/index.js +3 -3
- package/dist/{types-VK3k4Z6R.d.cts → types-22LtuLPM.d.cts} +1 -1
- package/dist/{types-BVldT2vs.d.cts → types-B-3bBl2q.d.ts} +21 -17
- package/dist/{types-C6gjiVpQ.d.cts → types-B3hgDuaG.d.cts} +1 -1
- package/dist/{types-jKnx7Tm_.d.ts → types-BbM5WDSR.d.cts} +1 -1
- package/dist/{types-jKnx7Tm_.d.cts → types-BbM5WDSR.d.ts} +1 -1
- package/dist/{types-Dv3vN7M9.d.ts → types-Bj3fLP0h.d.ts} +1 -1
- package/dist/{types-D3Kkh6yW.d.ts → types-BjNd012m.d.ts} +3 -545
- package/dist/{types-yKV1EX6f.d.ts → types-BjdcqqvT.d.ts} +10 -1
- package/dist/{types-BogOtZre.d.ts → types-CJ0RgA57.d.ts} +500 -44
- package/dist/{types-DFWnAftN.d.cts → types-CUzRu6Z8.d.cts} +1 -1
- package/dist/{types-B9SJ0cIc.d.cts → types-CfIKhNMg.d.cts} +500 -44
- package/dist/{types-D9cNOf-3.d.cts → types-CkQXSDqo.d.cts} +10 -1
- package/dist/{types-CWebeQXy.d.cts → types-CmdRXxqa.d.cts} +1 -1
- package/dist/{types-BM3xJvzM.d.ts → types-Cnsa5tWp.d.ts} +1 -1
- package/dist/{types-DacFMc6L.d.ts → types-D6p5VsOx.d.cts} +27 -4
- package/dist/{types-CbEJaobw.d.ts → types-DNEuJ-tb.d.cts} +585 -6
- package/dist/{types-BbeZapCu.d.ts → types-DXFcF3_c.d.ts} +2 -2
- package/dist/{types-GRfGXouy.d.cts → types-DgU_wy4q.d.cts} +2 -2
- package/dist/{types-BxjcUj-y.d.cts → types-Dq5jIMye.d.ts} +27 -4
- package/dist/{types-Do0nBZbY.d.ts → types-Dz4Yc-Mu.d.ts} +1 -1
- package/dist/{types-DJLceKR0.d.ts → types-GecGaYgv.d.cts} +516 -14
- package/dist/{types-DJLceKR0.d.cts → types-GecGaYgv.d.ts} +516 -14
- package/dist/{types-CFd7q2ed.d.ts → types-PG_v0QyH.d.ts} +1 -1
- package/dist/{types-CS8MYc2k.d.ts → types-mQtL3f4D.d.cts} +21 -17
- package/dist/{types-BjcRP8q1.d.cts → types-qCMu5X9I.d.ts} +585 -6
- package/dist/{types-CvHPHNH0.d.cts → types-y3pEpGrH.d.cts} +3 -545
- package/dist/{utils-DDERw8dM.d.cts → utils-CuiDsDxz.d.cts} +997 -168
- package/dist/{utils-C7eSJKtG.d.ts → utils-zcz60drL.d.ts} +997 -168
- package/dist/vault/index.cjs +4 -4
- package/dist/vault/index.d.cts +1 -1
- package/dist/vault/index.d.ts +1 -1
- package/dist/vault/index.js +3 -3
- package/dist/vault/types.d.cts +4 -10
- package/dist/vault/types.d.ts +4 -10
- package/package.json +3 -3
- package/surface/ai.md +2 -2
- package/surface/auth.md +13 -1
- package/surface/dataScience.md +5 -5
- package/surface/kaiAgent.md +3 -3
- package/surface/management.md +9 -0
- package/surface/notifications.md +6 -4
- package/surface/queue.md +6 -1
- package/surface/scheduler.md +1 -0
- package/surface/sdk.md +2 -0
- package/surface/storage.md +1 -1
- package/dist/chunk-4HBUVR57.cjs.map +0 -1
- package/dist/chunk-5FDQYOJD.js.map +0 -1
- package/dist/chunk-6BYHD5DG.js.map +0 -1
- package/dist/chunk-C5R6ITYD.cjs.map +0 -1
- package/dist/chunk-CBVGOANJ.cjs.map +0 -1
- package/dist/chunk-DAS5UQN6.cjs.map +0 -1
- package/dist/chunk-FDISA5KO.cjs.map +0 -1
- package/dist/chunk-IUN2ZSU3.cjs.map +0 -1
- package/dist/chunk-IWNJ47CV.js.map +0 -1
- package/dist/chunk-KF5EI2IB.js.map +0 -1
- package/dist/chunk-M2LJZXVR.js.map +0 -1
- package/dist/chunk-NZN6OX4H.cjs +0 -38
- package/dist/chunk-NZN6OX4H.cjs.map +0 -1
- package/dist/chunk-QNDU44PQ.js +0 -36
- package/dist/chunk-QNDU44PQ.js.map +0 -1
- package/dist/chunk-R2FAPJMZ.js.map +0 -1
- package/dist/chunk-RK2VGHJE.js.map +0 -1
- package/dist/chunk-U7CANHDD.js.map +0 -1
- package/dist/chunk-UQWVZTEA.cjs +0 -16
- package/dist/chunk-XPQBE77T.cjs.map +0 -1
- package/dist/chunk-YHMW7CZF.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { C as ClientInitOptions, A as ApiResponse } from '../types-DqxZDbM1.cjs';
|
|
2
|
-
import { G as GetDataAppRunsPath, a as GetDataAppRunsQuery, b as GetDataAppRunPath, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, L as LogEntry, f as GetAppsQuery, g as GetDataAppPath, C as CreateDataAppBody, P as PatchDataAppPath, h as PatchDataAppBody, D as DeleteDataAppPath, i as GetDataAppPasswordPath, R as ResetDataAppPasswordPath, j as GetSandboxPath, k as DeleteSandboxPath } from '../utils-
|
|
3
|
-
export { p as parseLogLines } from '../utils-
|
|
2
|
+
import { G as GetDataAppRunsPath, a as GetDataAppRunsQuery, b as GetDataAppRunPath, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, L as LogEntry, f as GetAppsQuery, g as GetDataAppPath, C as CreateDataAppBody, P as PatchDataAppPath, h as PatchDataAppBody, D as DeleteDataAppPath, i as GetDataAppPasswordPath, R as ResetDataAppPasswordPath, j as GetSandboxPath, k as DeleteSandboxPath } from '../utils-CuiDsDxz.cjs';
|
|
3
|
+
export { p as parseLogLines } from '../utils-CuiDsDxz.cjs';
|
|
4
4
|
import 'qs';
|
|
5
|
-
import '../types-
|
|
5
|
+
import '../types-BbM5WDSR.cjs';
|
|
6
6
|
|
|
7
7
|
declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
|
|
8
8
|
getAppRuns: (appId: GetDataAppRunsPath["appId"], query?: GetDataAppRunsQuery, signal?: AbortSignal) => Promise<{
|
|
@@ -65,7 +65,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
65
65
|
autoSuspendAfterSeconds?: number;
|
|
66
66
|
autoRestartEnabled?: boolean;
|
|
67
67
|
size?: string | null;
|
|
68
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
69
68
|
hasManagedGitRepo?: boolean;
|
|
70
69
|
}[]>;
|
|
71
70
|
getApp: (appId: GetDataAppPath["appId"], signal?: AbortSignal) => Promise<{
|
|
@@ -85,7 +84,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
85
84
|
autoSuspendAfterSeconds?: number;
|
|
86
85
|
autoRestartEnabled?: boolean;
|
|
87
86
|
size?: string | null;
|
|
88
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
89
87
|
hasManagedGitRepo?: boolean;
|
|
90
88
|
}>;
|
|
91
89
|
createApp: (body: CreateDataAppBody, signal?: AbortSignal) => Promise<{
|
|
@@ -105,7 +103,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
105
103
|
autoSuspendAfterSeconds?: number;
|
|
106
104
|
autoRestartEnabled?: boolean;
|
|
107
105
|
size?: string | null;
|
|
108
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
109
106
|
hasManagedGitRepo?: boolean;
|
|
110
107
|
}>;
|
|
111
108
|
patchApp: (appId: PatchDataAppPath["appId"], body: PatchDataAppBody, signal?: AbortSignal) => Promise<{
|
|
@@ -125,7 +122,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
125
122
|
autoSuspendAfterSeconds?: number;
|
|
126
123
|
autoRestartEnabled?: boolean;
|
|
127
124
|
size?: string | null;
|
|
128
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
129
125
|
hasManagedGitRepo?: boolean;
|
|
130
126
|
}>;
|
|
131
127
|
deleteApp: (appId: DeleteDataAppPath["appId"], signal?: AbortSignal) => Promise<ApiResponse<never>>;
|
|
@@ -149,7 +145,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
149
145
|
autoSuspendAfterSeconds?: number;
|
|
150
146
|
autoRestartEnabled?: boolean;
|
|
151
147
|
size?: string | null;
|
|
152
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
153
148
|
hasManagedGitRepo?: boolean;
|
|
154
149
|
}>;
|
|
155
150
|
getRuntimes: (signal?: AbortSignal) => Promise<{
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { C as ClientInitOptions, A as ApiResponse } from '../types-DqxZDbM1.js';
|
|
2
|
-
import { G as GetDataAppRunsPath, a as GetDataAppRunsQuery, b as GetDataAppRunPath, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, L as LogEntry, f as GetAppsQuery, g as GetDataAppPath, C as CreateDataAppBody, P as PatchDataAppPath, h as PatchDataAppBody, D as DeleteDataAppPath, i as GetDataAppPasswordPath, R as ResetDataAppPasswordPath, j as GetSandboxPath, k as DeleteSandboxPath } from '../utils-
|
|
3
|
-
export { p as parseLogLines } from '../utils-
|
|
2
|
+
import { G as GetDataAppRunsPath, a as GetDataAppRunsQuery, b as GetDataAppRunPath, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, L as LogEntry, f as GetAppsQuery, g as GetDataAppPath, C as CreateDataAppBody, P as PatchDataAppPath, h as PatchDataAppBody, D as DeleteDataAppPath, i as GetDataAppPasswordPath, R as ResetDataAppPasswordPath, j as GetSandboxPath, k as DeleteSandboxPath } from '../utils-zcz60drL.js';
|
|
3
|
+
export { p as parseLogLines } from '../utils-zcz60drL.js';
|
|
4
4
|
import 'qs';
|
|
5
|
-
import '../types-
|
|
5
|
+
import '../types-BbM5WDSR.js';
|
|
6
6
|
|
|
7
7
|
declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
|
|
8
8
|
getAppRuns: (appId: GetDataAppRunsPath["appId"], query?: GetDataAppRunsQuery, signal?: AbortSignal) => Promise<{
|
|
@@ -65,7 +65,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
65
65
|
autoSuspendAfterSeconds?: number;
|
|
66
66
|
autoRestartEnabled?: boolean;
|
|
67
67
|
size?: string | null;
|
|
68
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
69
68
|
hasManagedGitRepo?: boolean;
|
|
70
69
|
}[]>;
|
|
71
70
|
getApp: (appId: GetDataAppPath["appId"], signal?: AbortSignal) => Promise<{
|
|
@@ -85,7 +84,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
85
84
|
autoSuspendAfterSeconds?: number;
|
|
86
85
|
autoRestartEnabled?: boolean;
|
|
87
86
|
size?: string | null;
|
|
88
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
89
87
|
hasManagedGitRepo?: boolean;
|
|
90
88
|
}>;
|
|
91
89
|
createApp: (body: CreateDataAppBody, signal?: AbortSignal) => Promise<{
|
|
@@ -105,7 +103,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
105
103
|
autoSuspendAfterSeconds?: number;
|
|
106
104
|
autoRestartEnabled?: boolean;
|
|
107
105
|
size?: string | null;
|
|
108
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
109
106
|
hasManagedGitRepo?: boolean;
|
|
110
107
|
}>;
|
|
111
108
|
patchApp: (appId: PatchDataAppPath["appId"], body: PatchDataAppBody, signal?: AbortSignal) => Promise<{
|
|
@@ -125,7 +122,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
125
122
|
autoSuspendAfterSeconds?: number;
|
|
126
123
|
autoRestartEnabled?: boolean;
|
|
127
124
|
size?: string | null;
|
|
128
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
129
125
|
hasManagedGitRepo?: boolean;
|
|
130
126
|
}>;
|
|
131
127
|
deleteApp: (appId: DeleteDataAppPath["appId"], signal?: AbortSignal) => Promise<ApiResponse<never>>;
|
|
@@ -149,7 +145,6 @@ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientIn
|
|
|
149
145
|
autoSuspendAfterSeconds?: number;
|
|
150
146
|
autoRestartEnabled?: boolean;
|
|
151
147
|
size?: string | null;
|
|
152
|
-
provisioningStrategy: "jobQueue" | "operator";
|
|
153
148
|
hasManagedGitRepo?: boolean;
|
|
154
149
|
}>;
|
|
155
150
|
getRuntimes: (signal?: AbortSignal) => Promise<{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createDataScienceClient, parseLogLines } from '../chunk-
|
|
1
|
+
export { createDataScienceClient, parseLogLines } from '../chunk-F43HBNKD.js';
|
|
2
2
|
import '../chunk-MSI6FVGG.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-L4R66Q6S.js';
|
|
4
|
+
import '../chunk-3B3GOGAL.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import '../types-
|
|
2
|
-
export { C as CreateDataAppBody, l as DataApp, m as DataAppRun, D as DeleteDataAppPath, k as DeleteSandboxPath, f as GetAppsQuery, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, i as GetDataAppPasswordPath, g as GetDataAppPath, b as GetDataAppRunPath, G as GetDataAppRunsPath, a as GetDataAppRunsQuery, j as GetSandboxPath, L as LogEntry, h as PatchDataAppBody, P as PatchDataAppPath, n as RawAppRun, R as ResetDataAppPasswordPath, o as Runtime, q as RuntimeImageKey, S as Sandbox } from '../utils-
|
|
1
|
+
import '../types-BbM5WDSR.cjs';
|
|
2
|
+
export { C as CreateDataAppBody, l as DataApp, m as DataAppRun, D as DeleteDataAppPath, k as DeleteSandboxPath, f as GetAppsQuery, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, i as GetDataAppPasswordPath, g as GetDataAppPath, b as GetDataAppRunPath, G as GetDataAppRunsPath, a as GetDataAppRunsQuery, j as GetSandboxPath, L as LogEntry, h as PatchDataAppBody, P as PatchDataAppPath, n as RawAppRun, R as ResetDataAppPasswordPath, o as Runtime, q as RuntimeImageKey, S as Sandbox } from '../utils-CuiDsDxz.cjs';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import '../types-
|
|
2
|
-
export { C as CreateDataAppBody, l as DataApp, m as DataAppRun, D as DeleteDataAppPath, k as DeleteSandboxPath, f as GetAppsQuery, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, i as GetDataAppPasswordPath, g as GetDataAppPath, b as GetDataAppRunPath, G as GetDataAppRunsPath, a as GetDataAppRunsQuery, j as GetSandboxPath, L as LogEntry, h as PatchDataAppBody, P as PatchDataAppPath, n as RawAppRun, R as ResetDataAppPasswordPath, o as Runtime, q as RuntimeImageKey, S as Sandbox } from '../utils-
|
|
1
|
+
import '../types-BbM5WDSR.js';
|
|
2
|
+
export { C as CreateDataAppBody, l as DataApp, m as DataAppRun, D as DeleteDataAppPath, k as DeleteSandboxPath, f as GetAppsQuery, c as GetDataAppLogsDownloadPath, d as GetDataAppLogsTailPath, e as GetDataAppLogsTailQuery, i as GetDataAppPasswordPath, g as GetDataAppPath, b as GetDataAppRunPath, G as GetDataAppRunsPath, a as GetDataAppRunsQuery, j as GetSandboxPath, L as LogEntry, h as PatchDataAppBody, P as PatchDataAppPath, n as RawAppRun, R as ResetDataAppPasswordPath, o as Runtime, q as RuntimeImageKey, S as Sandbox } from '../utils-zcz60drL.js';
|
|
@@ -24,6 +24,25 @@ var isAdminOrShare = (token) => role(token) === chunkYXGBD4WP_cjs.AdminRole.Admi
|
|
|
24
24
|
var isProductionManager = (token) => role(token) === chunkYXGBD4WP_cjs.AdminRole.ProductionManager;
|
|
25
25
|
var isDeveloperOrReviewer = (token) => role(token) === chunkYXGBD4WP_cjs.AdminRole.Developer || role(token) === chunkYXGBD4WP_cjs.AdminRole.Reviewer;
|
|
26
26
|
var isReadOnlyRole = (token) => role(token) === chunkYXGBD4WP_cjs.AdminRole.ReadOnly;
|
|
27
|
+
var isKnownAdminRole = (adminRole) => Object.values(chunkYXGBD4WP_cjs.AdminRole).includes(adminRole ?? "");
|
|
28
|
+
var isKaiSettingsWriterRole = (adminRole) => {
|
|
29
|
+
switch (adminRole) {
|
|
30
|
+
case chunkYXGBD4WP_cjs.AdminRole.Admin:
|
|
31
|
+
case chunkYXGBD4WP_cjs.AdminRole.Share:
|
|
32
|
+
return true;
|
|
33
|
+
default:
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var canWriteKaiSettings = (token) => token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);
|
|
38
|
+
var assertCanWriteKaiSettings = (token) => {
|
|
39
|
+
if (!canWriteKaiSettings(token)) {
|
|
40
|
+
throw new PermissionDeniedError({
|
|
41
|
+
action: "write-kai-settings",
|
|
42
|
+
reason: token.isMasterToken ? `role '${token.admin?.role ?? "none"}' may not write Kai settings` : "a limited (non-master) token may not write Kai settings"
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
};
|
|
27
46
|
var assertCanAdmin = (token) => {
|
|
28
47
|
if (!isAdmin(token)) {
|
|
29
48
|
throw new PermissionDeniedError({
|
|
@@ -124,14 +143,18 @@ exports.assertCanDevelopOrReview = assertCanDevelopOrReview;
|
|
|
124
143
|
exports.assertCanMigrateFromTemplate = assertCanMigrateFromTemplate;
|
|
125
144
|
exports.assertCanProductionManage = assertCanProductionManage;
|
|
126
145
|
exports.assertCanPurgeConfiguration = assertCanPurgeConfiguration;
|
|
146
|
+
exports.assertCanWriteKaiSettings = assertCanWriteKaiSettings;
|
|
127
147
|
exports.canAssignFolder = canAssignFolder;
|
|
128
148
|
exports.canCopyConfiguration = canCopyConfiguration;
|
|
129
149
|
exports.canCreateConfiguration = canCreateConfiguration;
|
|
130
150
|
exports.canMigrateFromTemplate = canMigrateFromTemplate;
|
|
131
151
|
exports.canPurgeConfiguration = canPurgeConfiguration;
|
|
152
|
+
exports.canWriteKaiSettings = canWriteKaiSettings;
|
|
132
153
|
exports.isAdmin = isAdmin;
|
|
133
154
|
exports.isAdminOrShare = isAdminOrShare;
|
|
134
155
|
exports.isDeveloperOrReviewer = isDeveloperOrReviewer;
|
|
156
|
+
exports.isKaiSettingsWriterRole = isKaiSettingsWriterRole;
|
|
157
|
+
exports.isKnownAdminRole = isKnownAdminRole;
|
|
135
158
|
exports.isProductionManager = isProductionManager;
|
|
136
159
|
exports.isReadOnlyRole = isReadOnlyRole;
|
|
137
160
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":["AdminRole"],"mappings":";;;;;;AAgBO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EAEhB,WAAA,CAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAQ,EAA0D;AAC9F,IAAA,KAAA,CAAM,MAAA,GAAS,sBAAsB,MAAM,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAA,GAAM,CAAA,mBAAA,EAAsB,MAAM,CAAA,CAAE,CAAA;AAC1F,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;;;ACfA,IAAM,IAAA,GAAO,CAAC,KAAA,KAAgC,KAAA,CAAM,KAAA,CAAM,IAAA;AAEnD,IAAM,UAAU,CAAC,KAAA,KAAiC,IAAA,CAAK,KAAK,MAAMA,2BAAA,CAAU;AAE5E,IAAM,cAAA,GAAiB,CAAC,KAAA,KAC7B,IAAA,CAAK,KAAK,CAAA,KAAMA,2BAAA,CAAU,KAAA,IAAS,IAAA,CAAK,KAAK,CAAA,KAAMA,2BAAA,CAAU;AAExD,IAAM,sBAAsB,CAAC,KAAA,KAClC,IAAA,CAAK,KAAK,MAAMA,2BAAA,CAAU;AAErB,IAAM,qBAAA,GAAwB,CAAC,KAAA,KACpC,IAAA,CAAK,KAAK,CAAA,KAAMA,2BAAA,CAAU,SAAA,IAAa,IAAA,CAAK,KAAK,CAAA,KAAMA,2BAAA,CAAU;AAE5D,IAAM,iBAAiB,CAAC,KAAA,KAAiC,IAAA,CAAK,KAAK,MAAMA,2BAAA,CAAU;AAEnF,IAAM,cAAA,GAAiB,CAAC,KAAA,KAA8B;AAC3D,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,cAAA;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAA8B;AAClE,EAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,uBAAA;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAA8B;AACtE,EAAA,IAAI,CAAC,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,mBAAA;AAAA,MACR,MAAA,EAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,0BAAA;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,wBAAA,GAA2B,CAAC,KAAA,KAA8B;AACrE,EAAA,IAAI,CAAC,qBAAA,CAAsB,KAAK,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,mBAAA;AAAA,MACR,MAAA,EAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAC,CAAA,8BAAA;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;;;ACNA,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAqB,GAAA,KAC1C,GAAA,CAAI,kBAAkB,qBAAA,CAAsB,KAAK,CAAA,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAEhF,IAAM,gBAAA,GAAmB,CAAC,GAAA,KACxB,GAAA,CAAI,kBACA,gDAAA,GACA,4CAAA;AAEC,IAAM,yBAAyB,CAAC,KAAA,EAAqB,GAAA,KAC1D,aAAA,CAAc,OAAO,GAAG;AAEnB,IAAM,uBAAuB,CAAC,KAAA,EAAqB,GAAA,KACxD,aAAA,CAAc,OAAO,GAAG;AAEnB,IAAM,yBAAyB,CAAC,KAAA,EAAqB,GAAA,KAC1D,aAAA,CAAc,OAAO,GAAG;AAEnB,IAAM,qBAAA,GAAiF,CAC5F,KAAA,KACG,OAAA,CAAQ,KAAK;AAEX,IAAM,kBAAkB,CAAC,KAAA,EAAqB,GAAA,KACnD,aAAA,CAAc,OAAO,GAAG;AAEnB,IAAM,4BAAA,GAA+B,CAAC,KAAA,EAAqB,GAAA,KAAgC;AAChG,EAAA,IAAI,CAAC,sBAAA,CAAuB,KAAA,EAAO,GAAG,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,sBAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAG;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,0BAAA,GAA6B,CAAC,KAAA,EAAqB,GAAA,KAAgC;AAC9F,EAAA,IAAI,CAAC,oBAAA,CAAqB,KAAA,EAAO,GAAG,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAG;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,4BAAA,GAA+B,CAAC,KAAA,EAAqB,GAAA,KAAgC;AAChG,EAAA,IAAI,CAAC,sBAAA,CAAuB,KAAA,EAAO,GAAG,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,uBAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAG;AAAA,KAC7B,CAAA;AAAA,EACH;AACF;AAEO,IAAM,2BAAA,GAA8B,CAAC,KAAA,EAAqB,GAAA,KAAgC;AAC/F,EAAA,IAAI,CAAC,qBAAA,CAAsB,KAAU,CAAA,EAAG;AACtC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACF;AAEO,IAAM,qBAAA,GAAwB,CAAC,KAAA,EAAqB,GAAA,KAAgC;AACzF,EAAA,IAAI,CAAC,eAAA,CAAgB,KAAA,EAAO,GAAG,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,MAC9B,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAG;AAAA,KAC7B,CAAA;AAAA,EACH;AACF","file":"index.cjs","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":["AdminRole"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\n/**\n * Whether a role string is a member of `AdminRole` at all — distinct from\n * whether it may do any particular thing. A role failing this check is not\n * \"denied\", it's *unrecognized*: either Storage started returning a role this\n * client has never heard of, or something upstream is sending garbage. Callers\n * that deny-by-default on every predicate here (the common case) still want to\n * know about this distinction, because it never shows up as a failed request —\n * a caller should log it loudly rather than treat it as routine.\n */\nexport const isKnownAdminRole = (adminRole: string | null | undefined): boolean =>\n (Object.values(AdminRole) as string[]).includes(adminRole ?? '');\n\n/**\n * Whether an admin role may write Kai's **project-wide** settings (custom\n * instructions injected into every project member's system prompt).\n *\n * `admin` and `share` only. The value is a shared prompt-injection surface, so\n * changing it counts as project administration rather than project work:\n * `productionManager` and `guest` are read-only for project management in kbc-ui,\n * and `developer`/`reviewer` are denied because `agent_settings` is keyed by\n * `project_id` alone — editing it \"inside a dev branch\" writes production-visible\n * global config.\n *\n * An allowlist, deliberately: `AdminRole` gains members upstream, and a denylist\n * would admit each new one silently with no test failing. Takes the raw role\n * string so a caller holding an unparsed `tokens.verify()` response can use it\n * without fabricating a `StorageToken`. AI-3671.\n */\nexport const isKaiSettingsWriterRole = (adminRole: string | null | undefined): boolean => {\n switch (adminRole) {\n case AdminRole.Admin:\n case AdminRole.Share:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Whether this token may write Kai's project-wide settings. A limited\n * (non-master) token never may: it carries no project role at all, and its\n * `admin` block is absent despite the hand-authored type declaring it required\n * (AI-3593) — hence the optional chain.\n */\nexport const canWriteKaiSettings = (token: StorageToken): boolean =>\n token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);\n\nexport const assertCanWriteKaiSettings = (token: StorageToken): void => {\n if (!canWriteKaiSettings(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-settings',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' may not write Kai settings`\n : 'a limited (non-master) token may not write Kai settings',\n });\n }\n};\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { S as StorageToken } from '../../types-
|
|
2
|
-
export { h as hasAdminFeature, a as hasFeature } from '../../project-
|
|
1
|
+
import { S as StorageToken } from '../../types-CfIKhNMg.cjs';
|
|
2
|
+
export { h as hasAdminFeature, a as hasFeature } from '../../project-CbJCjkdt.cjs';
|
|
3
3
|
import '../../adminRoles-Cil1lavB.cjs';
|
|
4
|
-
import '../../types-
|
|
4
|
+
import '../../types-BbM5WDSR.cjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @module domain/permissions/errors
|
|
@@ -44,6 +44,41 @@ declare const isAdminOrShare: (token: StorageToken) => boolean;
|
|
|
44
44
|
declare const isProductionManager: (token: StorageToken) => boolean;
|
|
45
45
|
declare const isDeveloperOrReviewer: (token: StorageToken) => boolean;
|
|
46
46
|
declare const isReadOnlyRole: (token: StorageToken) => boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether a role string is a member of `AdminRole` at all — distinct from
|
|
49
|
+
* whether it may do any particular thing. A role failing this check is not
|
|
50
|
+
* "denied", it's *unrecognized*: either Storage started returning a role this
|
|
51
|
+
* client has never heard of, or something upstream is sending garbage. Callers
|
|
52
|
+
* that deny-by-default on every predicate here (the common case) still want to
|
|
53
|
+
* know about this distinction, because it never shows up as a failed request —
|
|
54
|
+
* a caller should log it loudly rather than treat it as routine.
|
|
55
|
+
*/
|
|
56
|
+
declare const isKnownAdminRole: (adminRole: string | null | undefined) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether an admin role may write Kai's **project-wide** settings (custom
|
|
59
|
+
* instructions injected into every project member's system prompt).
|
|
60
|
+
*
|
|
61
|
+
* `admin` and `share` only. The value is a shared prompt-injection surface, so
|
|
62
|
+
* changing it counts as project administration rather than project work:
|
|
63
|
+
* `productionManager` and `guest` are read-only for project management in kbc-ui,
|
|
64
|
+
* and `developer`/`reviewer` are denied because `agent_settings` is keyed by
|
|
65
|
+
* `project_id` alone — editing it "inside a dev branch" writes production-visible
|
|
66
|
+
* global config.
|
|
67
|
+
*
|
|
68
|
+
* An allowlist, deliberately: `AdminRole` gains members upstream, and a denylist
|
|
69
|
+
* would admit each new one silently with no test failing. Takes the raw role
|
|
70
|
+
* string so a caller holding an unparsed `tokens.verify()` response can use it
|
|
71
|
+
* without fabricating a `StorageToken`. AI-3671.
|
|
72
|
+
*/
|
|
73
|
+
declare const isKaiSettingsWriterRole: (adminRole: string | null | undefined) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Whether this token may write Kai's project-wide settings. A limited
|
|
76
|
+
* (non-master) token never may: it carries no project role at all, and its
|
|
77
|
+
* `admin` block is absent despite the hand-authored type declaring it required
|
|
78
|
+
* (AI-3593) — hence the optional chain.
|
|
79
|
+
*/
|
|
80
|
+
declare const canWriteKaiSettings: (token: StorageToken) => boolean;
|
|
81
|
+
declare const assertCanWriteKaiSettings: (token: StorageToken) => void;
|
|
47
82
|
declare const assertCanAdmin: (token: StorageToken) => void;
|
|
48
83
|
declare const assertCanAdminOrShare: (token: StorageToken) => void;
|
|
49
84
|
declare const assertCanProductionManage: (token: StorageToken) => void;
|
|
@@ -111,4 +146,4 @@ declare const assertCanMigrateFromTemplate: (token: StorageToken, ctx: Configura
|
|
|
111
146
|
declare const assertCanPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => void;
|
|
112
147
|
declare const assertCanAssignFolder: (token: StorageToken, ctx: ConfigurationCtx) => void;
|
|
113
148
|
|
|
114
|
-
export { type ConfigurationCtx, PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isProductionManager, isReadOnlyRole };
|
|
149
|
+
export { type ConfigurationCtx, PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, assertCanWriteKaiSettings, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, canWriteKaiSettings, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isKaiSettingsWriterRole, isKnownAdminRole, isProductionManager, isReadOnlyRole };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { S as StorageToken } from '../../types-
|
|
2
|
-
export { h as hasAdminFeature, a as hasFeature } from '../../project-
|
|
1
|
+
import { S as StorageToken } from '../../types-CJ0RgA57.js';
|
|
2
|
+
export { h as hasAdminFeature, a as hasFeature } from '../../project-BV-vseKc.js';
|
|
3
3
|
import '../../adminRoles-Cil1lavB.js';
|
|
4
|
-
import '../../types-
|
|
4
|
+
import '../../types-BbM5WDSR.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @module domain/permissions/errors
|
|
@@ -44,6 +44,41 @@ declare const isAdminOrShare: (token: StorageToken) => boolean;
|
|
|
44
44
|
declare const isProductionManager: (token: StorageToken) => boolean;
|
|
45
45
|
declare const isDeveloperOrReviewer: (token: StorageToken) => boolean;
|
|
46
46
|
declare const isReadOnlyRole: (token: StorageToken) => boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether a role string is a member of `AdminRole` at all — distinct from
|
|
49
|
+
* whether it may do any particular thing. A role failing this check is not
|
|
50
|
+
* "denied", it's *unrecognized*: either Storage started returning a role this
|
|
51
|
+
* client has never heard of, or something upstream is sending garbage. Callers
|
|
52
|
+
* that deny-by-default on every predicate here (the common case) still want to
|
|
53
|
+
* know about this distinction, because it never shows up as a failed request —
|
|
54
|
+
* a caller should log it loudly rather than treat it as routine.
|
|
55
|
+
*/
|
|
56
|
+
declare const isKnownAdminRole: (adminRole: string | null | undefined) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether an admin role may write Kai's **project-wide** settings (custom
|
|
59
|
+
* instructions injected into every project member's system prompt).
|
|
60
|
+
*
|
|
61
|
+
* `admin` and `share` only. The value is a shared prompt-injection surface, so
|
|
62
|
+
* changing it counts as project administration rather than project work:
|
|
63
|
+
* `productionManager` and `guest` are read-only for project management in kbc-ui,
|
|
64
|
+
* and `developer`/`reviewer` are denied because `agent_settings` is keyed by
|
|
65
|
+
* `project_id` alone — editing it "inside a dev branch" writes production-visible
|
|
66
|
+
* global config.
|
|
67
|
+
*
|
|
68
|
+
* An allowlist, deliberately: `AdminRole` gains members upstream, and a denylist
|
|
69
|
+
* would admit each new one silently with no test failing. Takes the raw role
|
|
70
|
+
* string so a caller holding an unparsed `tokens.verify()` response can use it
|
|
71
|
+
* without fabricating a `StorageToken`. AI-3671.
|
|
72
|
+
*/
|
|
73
|
+
declare const isKaiSettingsWriterRole: (adminRole: string | null | undefined) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Whether this token may write Kai's project-wide settings. A limited
|
|
76
|
+
* (non-master) token never may: it carries no project role at all, and its
|
|
77
|
+
* `admin` block is absent despite the hand-authored type declaring it required
|
|
78
|
+
* (AI-3593) — hence the optional chain.
|
|
79
|
+
*/
|
|
80
|
+
declare const canWriteKaiSettings: (token: StorageToken) => boolean;
|
|
81
|
+
declare const assertCanWriteKaiSettings: (token: StorageToken) => void;
|
|
47
82
|
declare const assertCanAdmin: (token: StorageToken) => void;
|
|
48
83
|
declare const assertCanAdminOrShare: (token: StorageToken) => void;
|
|
49
84
|
declare const assertCanProductionManage: (token: StorageToken) => void;
|
|
@@ -111,4 +146,4 @@ declare const assertCanMigrateFromTemplate: (token: StorageToken, ctx: Configura
|
|
|
111
146
|
declare const assertCanPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => void;
|
|
112
147
|
declare const assertCanAssignFolder: (token: StorageToken, ctx: ConfigurationCtx) => void;
|
|
113
148
|
|
|
114
|
-
export { type ConfigurationCtx, PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isProductionManager, isReadOnlyRole };
|
|
149
|
+
export { type ConfigurationCtx, PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, assertCanWriteKaiSettings, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, canWriteKaiSettings, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isKaiSettingsWriterRole, isKnownAdminRole, isProductionManager, isReadOnlyRole };
|
|
@@ -22,6 +22,25 @@ var isAdminOrShare = (token) => role(token) === AdminRole.Admin || role(token) =
|
|
|
22
22
|
var isProductionManager = (token) => role(token) === AdminRole.ProductionManager;
|
|
23
23
|
var isDeveloperOrReviewer = (token) => role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;
|
|
24
24
|
var isReadOnlyRole = (token) => role(token) === AdminRole.ReadOnly;
|
|
25
|
+
var isKnownAdminRole = (adminRole) => Object.values(AdminRole).includes(adminRole ?? "");
|
|
26
|
+
var isKaiSettingsWriterRole = (adminRole) => {
|
|
27
|
+
switch (adminRole) {
|
|
28
|
+
case AdminRole.Admin:
|
|
29
|
+
case AdminRole.Share:
|
|
30
|
+
return true;
|
|
31
|
+
default:
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var canWriteKaiSettings = (token) => token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);
|
|
36
|
+
var assertCanWriteKaiSettings = (token) => {
|
|
37
|
+
if (!canWriteKaiSettings(token)) {
|
|
38
|
+
throw new PermissionDeniedError({
|
|
39
|
+
action: "write-kai-settings",
|
|
40
|
+
reason: token.isMasterToken ? `role '${token.admin?.role ?? "none"}' may not write Kai settings` : "a limited (non-master) token may not write Kai settings"
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
};
|
|
25
44
|
var assertCanAdmin = (token) => {
|
|
26
45
|
if (!isAdmin(token)) {
|
|
27
46
|
throw new PermissionDeniedError({
|
|
@@ -104,6 +123,6 @@ var assertCanAssignFolder = (token, ctx) => {
|
|
|
104
123
|
}
|
|
105
124
|
};
|
|
106
125
|
|
|
107
|
-
export { PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isProductionManager, isReadOnlyRole };
|
|
126
|
+
export { PermissionDeniedError, assertCanAdmin, assertCanAdminOrShare, assertCanAssignFolder, assertCanCopyConfiguration, assertCanCreateConfiguration, assertCanDevelopOrReview, assertCanMigrateFromTemplate, assertCanProductionManage, assertCanPurgeConfiguration, assertCanWriteKaiSettings, canAssignFolder, canCopyConfiguration, canCreateConfiguration, canMigrateFromTemplate, canPurgeConfiguration, canWriteKaiSettings, isAdmin, isAdminOrShare, isDeveloperOrReviewer, isKaiSettingsWriterRole, isKnownAdminRole, isProductionManager, isReadOnlyRole };
|
|
108
127
|
//# sourceMappingURL=index.js.map
|
|
109
128
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRole.Admin;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRole.Admin || role(token) === AdminRole.Share;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRole.ProductionManager;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRole.Developer || role(token) === AdminRole.Reviewer;\n\nexport const isReadOnlyRole = (token: StorageToken): boolean => role(token) === AdminRole.ReadOnly;\n\n/**\n * Whether a role string is a member of `AdminRole` at all — distinct from\n * whether it may do any particular thing. A role failing this check is not\n * \"denied\", it's *unrecognized*: either Storage started returning a role this\n * client has never heard of, or something upstream is sending garbage. Callers\n * that deny-by-default on every predicate here (the common case) still want to\n * know about this distinction, because it never shows up as a failed request —\n * a caller should log it loudly rather than treat it as routine.\n */\nexport const isKnownAdminRole = (adminRole: string | null | undefined): boolean =>\n (Object.values(AdminRole) as string[]).includes(adminRole ?? '');\n\n/**\n * Whether an admin role may write Kai's **project-wide** settings (custom\n * instructions injected into every project member's system prompt).\n *\n * `admin` and `share` only. The value is a shared prompt-injection surface, so\n * changing it counts as project administration rather than project work:\n * `productionManager` and `guest` are read-only for project management in kbc-ui,\n * and `developer`/`reviewer` are denied because `agent_settings` is keyed by\n * `project_id` alone — editing it \"inside a dev branch\" writes production-visible\n * global config.\n *\n * An allowlist, deliberately: `AdminRole` gains members upstream, and a denylist\n * would admit each new one silently with no test failing. Takes the raw role\n * string so a caller holding an unparsed `tokens.verify()` response can use it\n * without fabricating a `StorageToken`. AI-3671.\n */\nexport const isKaiSettingsWriterRole = (adminRole: string | null | undefined): boolean => {\n switch (adminRole) {\n case AdminRole.Admin:\n case AdminRole.Share:\n return true;\n default:\n return false;\n }\n};\n\n/**\n * Whether this token may write Kai's project-wide settings. A limited\n * (non-master) token never may: it carries no project role at all, and its\n * `admin` block is absent despite the hand-authored type declaring it required\n * (AI-3593) — hence the optional chain.\n */\nexport const canWriteKaiSettings = (token: StorageToken): boolean =>\n token.isMasterToken && isKaiSettingsWriterRole(token.admin?.role);\n\nexport const assertCanWriteKaiSettings = (token: StorageToken): void => {\n if (!canWriteKaiSettings(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-settings',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' may not write Kai settings`\n : 'a limited (non-master) token may not write Kai settings',\n });\n }\n};\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
|
package/dist/editor/index.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
3
|
+
var chunkYQEBJG5H_cjs = require('../chunk-YQEBJG5H.cjs');
|
|
4
|
+
require('../chunk-43CGBOVT.cjs');
|
|
5
|
+
require('../chunk-DMNWPVVT.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "createEditorClient", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkYQEBJG5H_cjs.createEditorClient; }
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
|
14
14
|
//# sourceMappingURL=index.cjs.map
|
package/dist/editor/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as CreateSqlSessionBody, G as GetSqlSessionPath, a as GetSqlSessionsQuery, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, d as components, P as PostSqlRunQueryPath, e as PostSqlRunQueryBody, f as PostSqlTablePreviewPath, g as PostSqlTablePreviewBody, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, j as PostSqlSessionLoadPath, k as PostSqlSessionLoadBody, l as PostSqlSessionUnloadPath, m as PostSqlSessionUnloadBody } from '../types-
|
|
1
|
+
import { C as CreateSqlSessionBody, G as GetSqlSessionPath, a as GetSqlSessionsQuery, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, d as components, P as PostSqlRunQueryPath, e as PostSqlRunQueryBody, f as PostSqlTablePreviewPath, g as PostSqlTablePreviewBody, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, j as PostSqlSessionLoadPath, k as PostSqlSessionLoadBody, l as PostSqlSessionUnloadPath, m as PostSqlSessionUnloadBody } from '../types-CmdRXxqa.cjs';
|
|
2
2
|
import { C as ClientInitOptions } from '../types-DqxZDbM1.cjs';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-BbM5WDSR.cjs';
|
|
4
4
|
import 'qs';
|
|
5
5
|
|
|
6
6
|
declare const createEditorClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
|
package/dist/editor/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as CreateSqlSessionBody, G as GetSqlSessionPath, a as GetSqlSessionsQuery, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, d as components, P as PostSqlRunQueryPath, e as PostSqlRunQueryBody, f as PostSqlTablePreviewPath, g as PostSqlTablePreviewBody, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, j as PostSqlSessionLoadPath, k as PostSqlSessionLoadBody, l as PostSqlSessionUnloadPath, m as PostSqlSessionUnloadBody } from '../types-
|
|
1
|
+
import { C as CreateSqlSessionBody, G as GetSqlSessionPath, a as GetSqlSessionsQuery, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, d as components, P as PostSqlRunQueryPath, e as PostSqlRunQueryBody, f as PostSqlTablePreviewPath, g as PostSqlTablePreviewBody, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, j as PostSqlSessionLoadPath, k as PostSqlSessionLoadBody, l as PostSqlSessionUnloadPath, m as PostSqlSessionUnloadBody } from '../types-PG_v0QyH.js';
|
|
2
2
|
import { C as ClientInitOptions } from '../types-DqxZDbM1.js';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-BbM5WDSR.js';
|
|
4
4
|
import 'qs';
|
|
5
5
|
|
|
6
6
|
declare const createEditorClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
|
package/dist/editor/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { createEditorClient } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { createEditorClient } from '../chunk-L63UYWJG.js';
|
|
2
|
+
import '../chunk-L4R66Q6S.js';
|
|
3
|
+
import '../chunk-3B3GOGAL.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/editor/types.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import '../types-
|
|
2
|
-
export { C as CreateSqlSessionBody, G as GetSqlSessionPath, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, a as GetSqlSessionsQuery, e as PostSqlRunQueryBody, P as PostSqlRunQueryPath, k as PostSqlSessionLoadBody, j as PostSqlSessionLoadPath, m as PostSqlSessionUnloadBody, l as PostSqlSessionUnloadPath, g as PostSqlTablePreviewBody, f as PostSqlTablePreviewPath, S as Session, n as SessionSchema, o as SessionSchemaBucket, p as SessionSchemaColumn, q as SessionSchemaDatabase, r as SessionSchemaTable, s as SqlSession } from '../types-
|
|
1
|
+
import '../types-BbM5WDSR.cjs';
|
|
2
|
+
export { C as CreateSqlSessionBody, G as GetSqlSessionPath, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, a as GetSqlSessionsQuery, e as PostSqlRunQueryBody, P as PostSqlRunQueryPath, k as PostSqlSessionLoadBody, j as PostSqlSessionLoadPath, m as PostSqlSessionUnloadBody, l as PostSqlSessionUnloadPath, g as PostSqlTablePreviewBody, f as PostSqlTablePreviewPath, S as Session, n as SessionSchema, o as SessionSchemaBucket, p as SessionSchemaColumn, q as SessionSchemaDatabase, r as SessionSchemaTable, s as SqlSession } from '../types-CmdRXxqa.cjs';
|
package/dist/editor/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import '../types-
|
|
2
|
-
export { C as CreateSqlSessionBody, G as GetSqlSessionPath, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, a as GetSqlSessionsQuery, e as PostSqlRunQueryBody, P as PostSqlRunQueryPath, k as PostSqlSessionLoadBody, j as PostSqlSessionLoadPath, m as PostSqlSessionUnloadBody, l as PostSqlSessionUnloadPath, g as PostSqlTablePreviewBody, f as PostSqlTablePreviewPath, S as Session, n as SessionSchema, o as SessionSchemaBucket, p as SessionSchemaColumn, q as SessionSchemaDatabase, r as SessionSchemaTable, s as SqlSession } from '../types-
|
|
1
|
+
import '../types-BbM5WDSR.js';
|
|
2
|
+
export { C as CreateSqlSessionBody, G as GetSqlSessionPath, b as GetSqlSessionSchemaPath, c as GetSqlSessionSchemaQuery, h as GetSqlSessionTableDdlPath, i as GetSqlSessionTableDdlQuery, a as GetSqlSessionsQuery, e as PostSqlRunQueryBody, P as PostSqlRunQueryPath, k as PostSqlSessionLoadBody, j as PostSqlSessionLoadPath, m as PostSqlSessionUnloadBody, l as PostSqlSessionUnloadPath, g as PostSqlTablePreviewBody, f as PostSqlTablePreviewPath, S as Session, n as SessionSchema, o as SessionSchemaBucket, p as SessionSchemaColumn, q as SessionSchemaDatabase, r as SessionSchemaTable, s as SqlSession } from '../types-PG_v0QyH.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var chunkCCC6I32C_cjs = require('../chunk-CCC6I32C.cjs');
|
|
4
|
+
require('../chunk-DMNWPVVT.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "createEncryptionClient", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkCCC6I32C_cjs.createEncryptionClient; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { C as ClientInitOptions } from '../types-DqxZDbM1.cjs';
|
|
2
2
|
import { EncryptQuery, ScopedSecrets } from './types.cjs';
|
|
3
3
|
import 'qs';
|
|
4
|
-
import '../types-
|
|
4
|
+
import '../types-CfIKhNMg.cjs';
|
|
5
5
|
import '../adminRoles-Cil1lavB.cjs';
|
|
6
|
-
import '../types-
|
|
6
|
+
import '../types-BbM5WDSR.cjs';
|
|
7
7
|
|
|
8
8
|
declare const createEncryptionClient: ({ baseUrl, middlewares, }: Omit<ClientInitOptions, "auth">) => {
|
|
9
9
|
encryptSecrets: <T extends Record<string, unknown>>(data: EncryptQuery & {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { C as ClientInitOptions } from '../types-DqxZDbM1.js';
|
|
2
2
|
import { EncryptQuery, ScopedSecrets } from './types.js';
|
|
3
3
|
import 'qs';
|
|
4
|
-
import '../types-
|
|
4
|
+
import '../types-CJ0RgA57.js';
|
|
5
5
|
import '../adminRoles-Cil1lavB.js';
|
|
6
|
-
import '../types-
|
|
6
|
+
import '../types-BbM5WDSR.js';
|
|
7
7
|
|
|
8
8
|
declare const createEncryptionClient: ({ baseUrl, middlewares, }: Omit<ClientInitOptions, "auth">) => {
|
|
9
9
|
encryptSecrets: <T extends Record<string, unknown>>(data: EncryptQuery & {
|
package/dist/encryption/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProjectId } from '../types-
|
|
1
|
+
import { P as ProjectId } from '../types-CfIKhNMg.cjs';
|
|
2
2
|
import '../adminRoles-Cil1lavB.cjs';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-BbM5WDSR.cjs';
|
|
4
4
|
|
|
5
5
|
type BranchType = 'default' | 'dev';
|
|
6
6
|
type EncryptParamsByScope = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProjectId } from '../types-
|
|
1
|
+
import { P as ProjectId } from '../types-CJ0RgA57.js';
|
|
2
2
|
import '../adminRoles-Cil1lavB.js';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-BbM5WDSR.js';
|
|
4
4
|
|
|
5
5
|
type BranchType = 'default' | 'dev';
|
|
6
6
|
type EncryptParamsByScope = {
|