@keboola/api-client 47.0.0 → 49.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/AGENTS.md +10 -4
- package/API-SURFACE.md +6 -3
- package/CHANGELOG.md +65 -0
- package/README.md +1 -1
- package/dist/{adminRoles-CvdIUkiC.d.ts → adminRoles-BX1gk3At.d.ts} +2 -2
- package/dist/{adminRoles-DGM8SuuF.d.cts → adminRoles-BbxFgfX-.d.cts} +2 -2
- package/dist/ai/index.cjs +0 -5
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +2 -3
- package/dist/ai/index.d.ts +2 -3
- package/dist/ai/index.js +0 -5
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/types.d.cts +2 -2
- package/dist/ai/types.d.ts +2 -2
- package/dist/{appLogs-xW0-JQXg.d.ts → appLogs-DI2Y4imY.d.ts} +2 -2
- package/dist/{appLogs-Cxhm2Rkn.d.cts → appLogs-IhRA3xyv.d.cts} +2 -2
- package/dist/apps/index.cjs +3 -3
- package/dist/apps/index.cjs.map +1 -1
- package/dist/apps/index.d.cts +6 -3
- package/dist/apps/index.d.ts +6 -3
- package/dist/apps/index.js +3 -3
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/types.d.cts +2 -2
- package/dist/apps/types.d.ts +2 -2
- package/dist/assets/index.d.cts +1 -1
- package/dist/assets/index.d.ts +1 -1
- package/dist/auth/index.d.cts +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/types.d.cts +1 -1
- package/dist/auth/types.d.ts +1 -1
- package/dist/{authClient-Bso5UaXS.d.ts → authClient-6Aau_4Zt.d.ts} +4 -4
- package/dist/{authClient-aud2dUZd.d.cts → authClient-B3P6WtWW.d.cts} +4 -4
- package/dist/billing/index.cjs +0 -1
- package/dist/billing/index.cjs.map +1 -1
- package/dist/billing/index.d.cts +27 -27
- package/dist/billing/index.d.ts +27 -27
- package/dist/billing/index.js +0 -1
- package/dist/billing/index.js.map +1 -1
- package/dist/billing/types.d.cts +26 -22
- package/dist/billing/types.d.ts +26 -22
- package/dist/chat/index.d.cts +2 -2
- package/dist/chat/index.d.ts +2 -2
- package/dist/chat/types.d.cts +1 -1
- package/dist/chat/types.d.ts +1 -1
- package/dist/componentsMcp/index.d.cts +1 -1
- package/dist/componentsMcp/index.d.ts +1 -1
- package/dist/componentsMcp/types.d.cts +1 -1
- package/dist/componentsMcp/types.d.ts +1 -1
- package/dist/{configurations-DcpUlC8I.js → configurations-B44z6BSO.js} +2 -2
- package/dist/{configurations-DcpUlC8I.js.map → configurations-B44z6BSO.js.map} +1 -1
- package/dist/{configurations-Chg_JwJ1.js → configurations-CL0ouUMa.js} +3 -3
- package/dist/configurations-CL0ouUMa.js.map +1 -0
- package/dist/{configurations-BTRHVSRq.cjs → configurations-D9J3jh3g.cjs} +3 -3
- package/dist/configurations-D9J3jh3g.cjs.map +1 -0
- package/dist/{configurations-D_Rbs0Wl.cjs → configurations-Dkxsa3Uf.cjs} +2 -2
- package/dist/{configurations-D_Rbs0Wl.cjs.map → configurations-Dkxsa3Uf.cjs.map} +1 -1
- package/dist/constants/index.cjs +4 -1
- package/dist/constants/index.d.cts +4 -3
- package/dist/constants/index.d.ts +4 -3
- package/dist/constants/index.js +2 -2
- package/dist/{constants-a0jswUeK.cjs → constants-DErcRkWl.cjs} +95 -2
- package/dist/constants-DErcRkWl.cjs.map +1 -0
- package/dist/{constants-CA4UN2Xv.js → constants-VpSwBtCb.js} +78 -3
- package/dist/constants-VpSwBtCb.js.map +1 -0
- package/dist/dataScience/index.d.cts +2 -2
- package/dist/dataScience/index.d.ts +2 -2
- package/dist/dataScience/types.d.cts +2 -2
- package/dist/dataScience/types.d.ts +2 -2
- package/dist/developerPortal/index.d.cts +2 -2
- package/dist/developerPortal/index.d.ts +2 -2
- package/dist/developerPortal/types.d.cts +1 -1
- package/dist/developerPortal/types.d.ts +1 -1
- package/dist/domain/permissions/index.cjs +8 -43
- package/dist/domain/permissions/index.d.cts +7 -3
- package/dist/domain/permissions/index.d.ts +7 -3
- package/dist/domain/permissions/index.js +3 -39
- package/dist/domain/storageTable/index.d.cts +1 -1
- package/dist/domain/storageTable/index.d.ts +1 -1
- package/dist/editor/index.d.cts +2 -2
- package/dist/editor/index.d.ts +2 -2
- package/dist/editor/types.d.cts +1 -1
- package/dist/editor/types.d.ts +1 -1
- package/dist/encryption/index.d.cts +1 -1
- package/dist/encryption/index.d.ts +1 -1
- package/dist/encryption/types.d.cts +1 -1
- package/dist/encryption/types.d.ts +1 -1
- package/dist/import/index.d.cts +3 -3
- package/dist/import/index.d.ts +3 -3
- package/dist/{index-DTysQ_yn.d.cts → index-BM_fXKq5.d.cts} +5 -5
- package/dist/{index-XaPb6unB.d.cts → index-BPMr8PQJ.d.ts} +271 -35
- package/dist/{index-BnPmXDVP.d.ts → index-BT88-GpA.d.ts} +73 -3
- package/dist/{index-x_kS_5x_.d.cts → index-BVjhAkXW.d.cts} +4 -4
- package/dist/{index-CkwZ5x7E.d.cts → index-Be2dNJ_N.d.cts} +336 -169
- package/dist/{index-C2OAOK0s.d.ts → index-BiZR9BjN.d.ts} +4 -4
- package/dist/{index-B_MzjCeE.d.ts → index-C6oPUTWZ.d.ts} +3 -3
- package/dist/{index-r6YSe8B-.d.ts → index-CL4iKFic.d.cts} +271 -35
- package/dist/{index-URgNfi5L.d.cts → index-CbZQCDkD.d.cts} +3 -3
- package/dist/{index-XG5cO-4H.d.cts → index-CrrHvDiX.d.cts} +18 -13
- package/dist/{index-ZYvgoqgW.d.cts → index-CtQl-Iqw.d.cts} +4 -4
- package/dist/{index-BIP0PoMW.d.ts → index-D6JMbJ9b.d.ts} +18 -13
- package/dist/{index-Ds0tViQS.d.cts → index-DGKCTQkb.d.cts} +3 -3
- package/dist/{index-BeOd45XE.d.ts → index-DReKz9Zt.d.ts} +4 -4
- package/dist/{index-DUB0BwQv.d.cts → index-DYNVbgm8.d.cts} +4 -4
- package/dist/{index-DloFSSj3.d.ts → index-DhZTIejy.d.ts} +3 -3
- package/dist/{index-BGEuaZqI.d.cts → index-Dkb8CynB.d.cts} +21 -5
- package/dist/{index-_Va9wynk.d.ts → index-DorowSay.d.ts} +21 -5
- package/dist/{index-8ZjY7YD8.d.cts → index-PqJGDHHl.d.cts} +73 -3
- package/dist/{index-HSkjm3QW.d.ts → index-XcnkRVb0.d.ts} +5 -5
- package/dist/{index-Dp-a2DdI.d.ts → index-dgu6udMy.d.ts} +4 -4
- package/dist/{index-P1vR966i.d.ts → index-fMoM8SeH.d.cts} +4 -4
- package/dist/{index-P1vR966i.d.cts → index-fMoM8SeH.d.ts} +4 -4
- package/dist/{index-CAWy1qjR.d.ts → index-uGRdAORl.d.ts} +336 -169
- package/dist/index.cjs +458 -259
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +455 -260
- package/dist/index.js.map +1 -1
- package/dist/kaiAgent/index.cjs +1 -1
- package/dist/kaiAgent/index.d.cts +3 -3
- package/dist/kaiAgent/index.d.ts +3 -3
- package/dist/kaiAgent/index.js +1 -1
- package/dist/kaiAgent/types.d.cts +1 -1
- package/dist/kaiAgent/types.d.ts +1 -1
- package/dist/{kaiAgent-CBPbMwBh.js → kaiAgent-CYvrS8oZ.js} +12 -3
- package/dist/kaiAgent-CYvrS8oZ.js.map +1 -0
- package/dist/{kaiAgent-BmfUG8bB.cjs → kaiAgent-N2qbUFZm.cjs} +12 -3
- package/dist/kaiAgent-N2qbUFZm.cjs.map +1 -0
- package/dist/management/index.cjs +1 -1
- package/dist/management/index.d.cts +1 -1
- package/dist/management/index.d.ts +1 -1
- package/dist/management/index.js +1 -1
- package/dist/management/types.cjs +14 -0
- package/dist/management/types.cjs.map +1 -0
- package/dist/management/types.d.cts +2 -2
- package/dist/management/types.d.ts +2 -2
- package/dist/management/types.js +12 -1
- package/dist/management/types.js.map +1 -0
- package/dist/{management-BUGPJ1Bu.cjs → management-B1o6RpKF.cjs} +15 -14
- package/dist/management-B1o6RpKF.cjs.map +1 -0
- package/dist/{management-DAg2obYt.js → management-C9w3DNhs.js} +15 -14
- package/dist/management-C9w3DNhs.js.map +1 -0
- package/dist/metastore/index.d.cts +1 -1
- package/dist/metastore/index.d.ts +1 -1
- package/dist/metastore/types.d.cts +1 -1
- package/dist/metastore/types.d.ts +1 -1
- package/dist/microsoftGraph/index.d.cts +2 -2
- package/dist/microsoftGraph/index.d.ts +2 -2
- package/dist/microsoftGraph/types.d.cts +1 -1
- package/dist/microsoftGraph/types.d.ts +1 -1
- package/dist/{middleware-DU_5pFDW.cjs → middleware-CEP6uu_D.cjs} +4 -4
- package/dist/middleware-CEP6uu_D.cjs.map +1 -0
- package/dist/{middleware-CWaLMlG1.js → middleware-GOfx8Apu.js} +4 -4
- package/dist/middleware-GOfx8Apu.js.map +1 -0
- package/dist/notifications/index.d.cts +2 -2
- package/dist/notifications/index.d.ts +2 -2
- package/dist/notifications/types.d.cts +1 -1
- package/dist/notifications/types.d.ts +1 -1
- package/dist/oauth/index.d.cts +2 -2
- package/dist/oauth/index.d.ts +2 -2
- package/dist/oauth/types.d.cts +1 -1
- package/dist/oauth/types.d.ts +1 -1
- package/dist/omnisearch/index.d.cts +2 -2
- package/dist/omnisearch/index.d.ts +2 -2
- package/dist/omnisearch/types.d.cts +1 -1
- package/dist/omnisearch/types.d.ts +1 -1
- package/dist/project-ClH22nzH.js +86 -0
- package/dist/project-ClH22nzH.js.map +1 -0
- package/dist/{project-BMmfPhXg.d.ts → project-DTfBtIJs.d.ts} +4 -3
- package/dist/project-Rh4nXiWh.cjs +139 -0
- package/dist/project-Rh4nXiWh.cjs.map +1 -0
- package/dist/{project-dxCJbFay.d.cts → project-vOnvjo80.d.cts} +4 -3
- package/dist/queryService/index.d.cts +1 -1
- package/dist/queryService/index.d.ts +1 -1
- package/dist/queryService/types.d.cts +1 -1
- package/dist/queryService/types.d.ts +1 -1
- package/dist/queue/index.d.cts +3 -3
- package/dist/queue/index.d.ts +3 -3
- package/dist/queue/types.d.cts +1 -1
- package/dist/queue/types.d.ts +1 -1
- package/dist/scheduler/index.d.cts +2 -2
- package/dist/scheduler/index.d.ts +2 -2
- package/dist/scheduler/types.d.cts +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/sdk/configurations/index.cjs +1 -1
- package/dist/sdk/configurations/index.d.cts +2 -2
- package/dist/sdk/configurations/index.d.ts +2 -2
- package/dist/sdk/configurations/index.js +1 -1
- package/dist/sdk/developerPortal/index.cjs +1 -1
- package/dist/sdk/developerPortal/index.d.cts +3 -3
- package/dist/sdk/developerPortal/index.d.ts +3 -3
- package/dist/sdk/developerPortal/index.js +1 -1
- package/dist/sdk/kaiMemory/index.d.cts +1 -1
- package/dist/sdk/kaiMemory/index.d.ts +1 -1
- package/dist/sdk/kaiMemory/types.d.cts +1 -1
- package/dist/sdk/kaiMemory/types.d.ts +1 -1
- package/dist/sdk/queryService/index.d.cts +1 -1
- package/dist/sdk/queryService/index.d.ts +1 -1
- package/dist/sdk/semanticLayer/index.d.cts +1 -1
- package/dist/sdk/semanticLayer/index.d.ts +1 -1
- package/dist/sdk/semanticLayer/types.d.cts +1 -1
- package/dist/sdk/semanticLayer/types.d.ts +1 -1
- package/dist/sdk/tag/index.d.cts +2 -2
- package/dist/sdk/tag/index.d.ts +2 -2
- package/dist/sdk/tag/types.d.cts +1 -1
- package/dist/sdk/tag/types.d.ts +1 -1
- package/dist/sdk/vault/index.d.cts +1 -1
- package/dist/sdk/vault/index.d.ts +1 -1
- package/dist/status/index.d.cts +1 -1
- package/dist/status/index.d.ts +1 -1
- package/dist/storage/index.cjs +4 -1
- package/dist/storage/index.d.cts +3 -3
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +2 -2
- package/dist/storage/types.d.cts +6 -6
- package/dist/storage/types.d.ts +6 -6
- package/dist/{storage-DyR7hDdv.js → storage-CChfKlrb.js} +31 -3
- package/dist/storage-CChfKlrb.js.map +1 -0
- package/dist/{storage-yovv11k6.cjs → storage-Ci9gXgcw.cjs} +48 -2
- package/dist/storage-Ci9gXgcw.cjs.map +1 -0
- package/dist/stream/index.d.cts +2 -2
- package/dist/stream/index.d.ts +2 -2
- package/dist/stream/types.d.cts +1 -1
- package/dist/stream/types.d.ts +1 -1
- package/dist/syncActions/index.d.cts +2 -2
- package/dist/syncActions/index.d.ts +2 -2
- package/dist/syncActions/types.d.cts +1 -1
- package/dist/syncActions/types.d.ts +1 -1
- package/dist/telemetry/index.d.cts +2 -2
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/types.d.cts +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/{types-DHlXKVEM.d.ts → types-0R9-osUJ.d.ts} +3 -3
- package/dist/{types-CBrNIgEy.d.ts → types-302-NBaU.d.ts} +3 -3
- package/dist/{types-4HmtNuJf.d.ts → types-45O2dU2w.d.ts} +2 -2
- package/dist/{types-CZCPdPqv.d.cts → types-BAsYMltG.d.cts} +3 -3
- package/dist/{types-BiBBKcin.d.ts → types-BM6rri7-.d.ts} +3 -3
- package/dist/{types-BNPvFLgC.d.ts → types-BOT6TgOS.d.ts} +3 -4
- package/dist/{types-BiTn_JVW.d.cts → types-BT5e9TSQ.d.ts} +117 -37
- package/dist/{types-C2j6Jsie.d.ts → types-BUirSne-.d.ts} +3 -3
- package/dist/{types-BoH7NFCh.d.ts → types-BWzt1ju_.d.ts} +3 -3
- package/dist/{types-BjEiUOL6.d.ts → types-BXybSjn-.d.ts} +2 -2
- package/dist/{types-BIDKSQdc.d.ts → types-BZ--6pIt.d.ts} +169 -31
- package/dist/{types-B2ZLjagf.d.ts → types-BjwbzqJd.d.ts} +2 -2
- package/dist/{types-B6ozaDkl.d.cts → types-BnmsuDfH.d.cts} +2 -2
- package/dist/{types-Bx0TSdwF.d.cts → types-BrpIEj_N.d.ts} +2 -2
- package/dist/{types-BG0oWq8u.d.cts → types-C614wC5h.d.cts} +2 -2
- package/dist/{types-4CjbcUdD.d.cts → types-CTS2NSIb.d.cts} +2 -2
- package/dist/{types-BZBU3mwz.d.cts → types-CY8X39qv.d.cts} +3 -3
- package/dist/{types-Cw9UISvM.d.ts → types-CeqZuOEC.d.ts} +2 -2
- package/dist/{types-C3IQu1gV.d.ts → types-CfXqFz2e.d.ts} +5 -3
- package/dist/{types-BKIcow3B.d.cts → types-ChLWY8aU.d.cts} +2 -2
- package/dist/{types-B_3zoXA1.d.cts → types-CjNl7O7f.d.cts} +3 -3
- package/dist/{types-BwsE-pFo.d.cts → types-CkJxMoTk.d.cts} +2 -2
- package/dist/{types--qQPfxWt.d.cts → types-CpJhWBmH.d.cts} +2 -2
- package/dist/{types-DgIzXY-Y.d.ts → types-D2Pb_4FA.d.cts} +2 -2
- package/dist/{types-7DBpH7Rf.d.ts → types-D53zBV25.d.ts} +2 -2
- package/dist/{types-Dg8a7m7f.d.ts → types-D9ZKJYZk.d.ts} +2 -2
- package/dist/{types-BXgINefw.d.ts → types-DODAZKEm.d.ts} +2 -2
- package/dist/{types-BBbzWczQ.d.cts → types-DV7K07oX.d.cts} +3 -4
- package/dist/{types-TRJiPqJr.d.cts → types-DbXV0g8U.d.cts} +2 -2
- package/dist/{types-BcQ3j8xK.d.ts → types-DjadPty5.d.ts} +2 -2
- package/dist/{types-DWJVbskE.d.ts → types-DlhNay1n.d.ts} +2 -2
- package/dist/{types-DBJ8c3hN.d.cts → types-DmzSFOhK.d.cts} +2 -2
- package/dist/{types-B_1plf0y.d.cts → types-DpbrGDRf.d.cts} +2 -2
- package/dist/{types-ituiCs8g.d.ts → types-DqOxIujY.d.ts} +2 -2
- package/dist/{types-D8w9lyb8.d.cts → types-Duurgaqk.d.cts} +7 -3
- package/dist/{types-C7t_6FLh.d.ts → types-Dy6EdWPG.d.ts} +2 -2
- package/dist/{types-kbyIaA7p.d.cts → types-HmK8iKp5.d.cts} +3 -3
- package/dist/{types-BdF6NDvo.d.cts → types-JZ0Bdlpk.d.cts} +2 -2
- package/dist/{types-OkQWmonU.d.cts → types-O6XM48J8.d.cts} +2 -2
- package/dist/{types-CEw2IzWk.d.ts → types-RogkWzOu.d.ts} +2 -2
- package/dist/{types-C2JMisvL.d.ts → types-TmrPVMhy.d.cts} +117 -37
- package/dist/{types-ij6BpTzR.d.ts → types-_zKX6JmD.d.ts} +2 -2
- package/dist/{types-L50Y6ATu.d.cts → types-dn6MHur3.d.cts} +5 -3
- package/dist/{types-4bSZLxq3.d.cts → types-jN2KmMet.d.cts} +169 -31
- package/dist/{types-D51g4h9w.d.cts → types-jfPoUlO8.d.cts} +2 -2
- package/dist/{types-CMKIdreQ.d.cts → types-ptynVnkv.d.cts} +3 -3
- package/dist/{types-COQOzyac.d.ts → types-tdIo5FpR.d.ts} +7 -3
- package/dist/{types-DPDq8C4q.d.cts → types-vvw_H7wp.d.cts} +2 -2
- package/dist/vault/index.d.cts +1 -1
- package/dist/vault/index.d.ts +1 -1
- package/dist/vault/types.d.cts +1 -1
- package/dist/vault/types.d.ts +1 -1
- package/package.json +1 -1
- package/surface/ai.md +0 -1
- package/surface/apps.md +7 -7
- package/surface/billing.md +2 -2
- package/surface/kaiAgent.md +5 -4
- package/surface/management.md +3 -1
- package/surface/storage.md +3 -2
- package/dist/configurations-BTRHVSRq.cjs.map +0 -1
- package/dist/configurations-Chg_JwJ1.js.map +0 -1
- package/dist/constants-CA4UN2Xv.js.map +0 -1
- package/dist/constants-a0jswUeK.cjs.map +0 -1
- package/dist/domain/permissions/index.cjs.map +0 -1
- package/dist/domain/permissions/index.js.map +0 -1
- package/dist/kaiAgent-BmfUG8bB.cjs.map +0 -1
- package/dist/kaiAgent-CBPbMwBh.js.map +0 -1
- package/dist/management-BUGPJ1Bu.cjs.map +0 -1
- package/dist/management-DAg2obYt.js.map +0 -1
- package/dist/middleware-CWaLMlG1.js.map +0 -1
- package/dist/middleware-DU_5pFDW.cjs.map +0 -1
- package/dist/project-BXLFrWJ6.js +0 -45
- package/dist/project-BXLFrWJ6.js.map +0 -1
- package/dist/project-CpgplgCr.cjs +0 -62
- package/dist/project-CpgplgCr.cjs.map +0 -1
- package/dist/storage-DyR7hDdv.js.map +0 -1
- package/dist/storage-yovv11k6.cjs.map +0 -1
package/surface/apps.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
6
6
|
|
|
7
|
-
- `api.apps.createApp(body: { branchId: string | null; name: string; type: "streamlit" | "python-js"; description?: string | null | undefined; config?: { [key: string]: unknown; } | undefined; useManagedGitRepo: boolean; }, options?: WriteOptions): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
7
|
+
- `api.apps.createApp(body: { branchId: string | null; name: string; type: "streamlit" | "python-js"; description?: string | null | undefined; config?: { [key: string]: unknown; } | undefined; useManagedGitRepo: boolean; }, options?: WriteOptions): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
8
8
|
- `api.apps.createAppGitRepoCredential(appId: string, body: { type: "ssh_key" | "http_token"; publicKey?: string | undefined; name: string; permissions: "readOnly" | "readWrite"; }, options?: WriteOptions): Promise<{ id: string; type: "ssh_key" | "http_token"; name: string; permissions: "readOnly" | "readWrite"; ownerAdminId: string; createdAt: string; } & { secret?: string | undefined; }>`
|
|
9
9
|
- `api.apps.createDeployment(appId: string, body?: { promote: boolean; configVersion?: string | null | undefined; } | undefined, options?: WriteOptions): Promise<{ id: string; configVersion: string; gitCommitSha: string | null; runtimeSize?: "small" | "external" | "micro" | "tiny" | "medium" | "large" | null | undefined; buildState: "pending" | "failed" | "building" | "ready"; runState: "pending" | "starting" | "running" | "failed" | "stopping" | "stopped" | "neverRun"; archived: boolean; archivedAt: string | null; createdAt: string; }>`
|
|
10
10
|
- `api.apps.deleteApp(appId: string, signal?: AbortSignal | undefined): Promise<void>`
|
|
11
11
|
- `api.apps.deleteAppGitRepoCredential(appId: string, credentialId: string, signal?: AbortSignal | undefined): Promise<void>`
|
|
12
12
|
- `api.apps.deleteDeployment(appId: string, deploymentId: string, signal?: AbortSignal | undefined): Promise<void>`
|
|
13
|
-
- `api.apps.getApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
13
|
+
- `api.apps.getApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
14
14
|
- `api.apps.getAppGitRepo(appId: string, signal?: AbortSignal | undefined): Promise<{ sshUrl: string | null; httpsUrl: string | null; isManagedGitRepo: boolean; }>`
|
|
15
15
|
- `api.apps.getAppGitRepoCredential(appId: string, credentialId: string, signal?: AbortSignal | undefined): Promise<{ id: string; type: "ssh_key" | "http_token"; name: string; permissions: "readOnly" | "readWrite"; ownerAdminId: string; createdAt: string; }>`
|
|
16
16
|
- `api.apps.getAppGitRepoCredentials(appId: string, signal?: AbortSignal | undefined): Promise<{ credentials: { id: string; type: "ssh_key" | "http_token"; name: string; permissions: "readOnly" | "readWrite"; ownerAdminId: string; createdAt: string; }[]; }>`
|
|
@@ -19,14 +19,14 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
19
19
|
- `api.apps.getAppPassword(appId: string, signal?: AbortSignal | undefined): Promise<{ password?: string | null | undefined; }>`
|
|
20
20
|
- `api.apps.getAppRun(appId: string, runId: string, signal?: AbortSignal | undefined): Promise<{ id: string; appId: string; deploymentId: string | null; state?: "starting" | "running" | "failed" | "finished" | null | undefined; createdAt?: string | null | undefined; startedAt?: string | null | undefined; stoppedAt?: string | null | undefined; startupLogs?: string | null | undefined; runtimeSize?: string | null | undefined; runtimeBackendType?: string | null | undefined; configVersion?: string | null | undefined; imageVersion?: string | null | undefined; failureReason?: { reason?: string | null | undefined; message?: string | null | undefined; } | null | undefined; mode?: string | undefined; }>`
|
|
21
21
|
- `api.apps.getAppRuns(appId: string, query?: { deploymentId?: string | undefined; since?: string | undefined; until?: string | undefined; offset?: number | undefined; limit?: number | undefined; }, signal?: AbortSignal | undefined): Promise<{ id: string; appId: string; deploymentId: string | null; state?: "starting" | "running" | "failed" | "finished" | null | undefined; createdAt?: string | null | undefined; startedAt?: string | null | undefined; stoppedAt?: string | null | undefined; startupLogs?: string | null | undefined; runtimeSize?: string | null | undefined; runtimeBackendType?: string | null | undefined; configVersion?: string | null | undefined; imageVersion?: string | null | undefined; failureReason?: { reason?: string | null | undefined; message?: string | null | undefined; } | null | undefined; mode?: string | undefined; }[]>`
|
|
22
|
-
- `api.apps.getApps(query?: { offset?: number | undefined; limit?: number | undefined; }, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }[]>`
|
|
22
|
+
- `api.apps.getApps(query?: { offset?: number | undefined; limit?: number | undefined; }, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }[]>`
|
|
23
23
|
- `api.apps.getDeployment(appId: string, deploymentId: string, signal?: AbortSignal | undefined): Promise<{ id: string; configVersion: string; gitCommitSha: string | null; runtimeSize?: "small" | "external" | "micro" | "tiny" | "medium" | "large" | null | undefined; buildState: "pending" | "failed" | "building" | "ready"; runState: "pending" | "starting" | "running" | "failed" | "stopping" | "stopped" | "neverRun"; archived: boolean; archivedAt: string | null; createdAt: string; }>`
|
|
24
24
|
- `api.apps.getDeploymentLogsDownload(appId: string, deploymentId: string, signal?: AbortSignal | undefined): Promise<{ logs: string; fileName: string; }>`
|
|
25
25
|
- `api.apps.getDeploymentLogsTail(appId: string, deploymentId: string, { query, signal }?: LogsTailOptions): Promise<{ entries: LogEntry[]; nextLogTimestamp: string | null; }>`
|
|
26
26
|
- `api.apps.getDeployments(appId: string, query?: { archived?: boolean | undefined; offset?: number | undefined; limit?: number | undefined; }, signal?: AbortSignal | undefined): Promise<{ id: string; configVersion: string; gitCommitSha: string | null; runtimeSize?: "small" | "external" | "micro" | "tiny" | "medium" | "large" | null | undefined; buildState: "pending" | "failed" | "building" | "ready"; runState: "pending" | "starting" | "running" | "failed" | "stopping" | "stopped" | "neverRun"; archived: boolean; archivedAt: string | null; createdAt: string; }[]>`
|
|
27
27
|
- `api.apps.healthCheck(signal?: AbortSignal | undefined): Promise<{ appName?: string | undefined; appVersion?: string | undefined; apiDocs?: string | undefined; }>`
|
|
28
|
-
- `api.apps.promoteDeployment(appId: string, deploymentId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
28
|
+
- `api.apps.promoteDeployment(appId: string, deploymentId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
29
29
|
- `api.apps.resetAppPassword(appId: string, signal?: AbortSignal | undefined): Promise<{ password: string; }>`
|
|
30
|
-
- `api.apps.resumeApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
31
|
-
- `api.apps.suspendApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
32
|
-
- `api.apps.unpublishApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
30
|
+
- `api.apps.resumeApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
31
|
+
- `api.apps.suspendApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
|
32
|
+
- `api.apps.unpublishApp(appId: string, signal?: AbortSignal | undefined): Promise<{ id: string; projectId: string; componentId: string; branchId: string | null; configId: string; type?: "streamlit" | "python-js" | null | undefined; url: string | null; hasManagedGitRepo: boolean; production: { desiredDeploymentId?: string | null | undefined; actualDeploymentId?: string | null | undefined; }; state: "disabled" | "starting" | "running" | "notDeployed" | "suspended"; }>`
|
package/surface/billing.md
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
6
6
|
|
|
7
|
-
- `api.billing.getCredits(signal?: AbortSignal | undefined): Promise<{ consumed: number; remaining: number; stats
|
|
8
|
-
- `api.billing.getCreditsAndTopUp(signal?: AbortSignal | undefined): Promise<{ consumed: number; remaining: number; stats
|
|
7
|
+
- `api.billing.getCredits(signal?: AbortSignal | undefined): Promise<{ consumed: number; remaining: number; stats: { componentJobs: { consumed: number; }; workspaceJobs: { workspaceType: "writer" | "sandbox-sql" | "transformation" | "sandbox-data-science"; warehouseSize: "small" | "medium" | "large" | "x-small" | "x-large" | "2x-large" | "3x-large" | "4x-large"; consumed: number; }[]; }; marketplaceSubscription?: { vendor: "aws" | "azure" | "gcp"; state: "suspended" | "inactive" | "active" | "unsubscribed"; billingLink: string | null; } | undefined; }>`
|
|
8
|
+
- `api.billing.getCreditsAndTopUp(signal?: AbortSignal | undefined): Promise<{ consumed: number; remaining: number; stats: { componentJobs: { consumed: number; }; workspaceJobs: { workspaceType: "writer" | "sandbox-sql" | "transformation" | "sandbox-data-science"; warehouseSize: "small" | "medium" | "large" | "x-small" | "x-large" | "2x-large" | "3x-large" | "4x-large"; consumed: number; }[]; }; marketplaceSubscription?: { vendor: "aws" | "azure" | "gcp"; state: "suspended" | "inactive" | "active" | "unsubscribed"; billingLink: string | null; } | undefined; }>`
|
|
9
9
|
- `api.billing.healthCheck(signal?: AbortSignal | undefined): Promise<{ status?: string | undefined; }>`
|
package/surface/kaiAgent.md
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
6
6
|
|
|
7
7
|
- `api.kaiAgent.approveToolCall(chatId: string, body: { toolUseId: string; approved: boolean; reason?: string | undefined; dismissed?: boolean | undefined; updatedInput?: { [key: string]: unknown; } | undefined; answers?: { [key: string]: string; } | undefined; }): Promise<void>`
|
|
8
|
-
- `api.kaiAgent.createChat(request: { id: string; message: { id: string; role: "user" | "assistant"; parts: { [key: string]: unknown; }[]; metadata?: { hidden?: boolean | undefined; autoForwarded?: boolean | undefined; requestContext?: { path?: string | undefined; sqlEditorActive?: boolean | undefined; } | undefined; deployPreapproval?: { configurationId: string; } | undefined; tableContext?: { tableName: string; tableId: string; bucketId: string; fileName: string; }[] | undefined; previewSelections?: { source: string | null; sourceTrail: string[]; selector: string; tag: string; text: string; html: string; rect: { x: number; y: number; width: number; height: number; }; page: string; viewport: { width: number; height: number; }; area?: { inside: { source: string | null; tag: string; text: string; }[]; within: { source: string | null; tag: string; text: string; } | null; above: { source: string | null; tag: string; text: string; } | null; below: { source: string | null; tag: string; text: string; } | null; } | undefined; }[] | undefined; previewIntent?: "data-source" | undefined; } | undefined; }; selectedChatModel?: string | undefined; selectedVisibilityType?: "public" | "private" | undefined; branchId?: number | undefined; model?: string | undefined; toolRestrictions?: { allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; readOnlyMode?: boolean | undefined; } | undefined; telemetryMetadata?: { [key: string]: string | number | boolean; } | undefined; supportsApprovalRequestedEvent?: boolean | undefined; client?: "kbc-ui" | "business-chat" | undefined; }): Promise<Response>`
|
|
8
|
+
- `api.kaiAgent.createChat(request: { id: string; message: { id: string; role: "user" | "assistant"; parts: { [key: string]: unknown; }[]; metadata?: { hidden?: boolean | undefined; autoForwarded?: boolean | undefined; requestContext?: { path?: string | undefined; sqlEditorActive?: boolean | undefined; } | undefined; deployPreapproval?: { configurationId: string; } | undefined; tableContext?: { tableName: string; tableId: string; bucketId: string; fileName: string; }[] | undefined; previewSelections?: { source: string | null; sourceTrail: string[]; selector: string; tag: string; text: string; html: string; rect: { x: number; y: number; width: number; height: number; }; page: string; viewport: { width: number; height: number; }; area?: { inside: { source: string | null; tag: string; text: string; }[]; within: { source: string | null; tag: string; text: string; } | null; above: { source: string | null; tag: string; text: string; } | null; below: { source: string | null; tag: string; text: string; } | null; } | undefined; }[] | undefined; previewIntent?: "data-source" | undefined; } | undefined; }; selectedChatModel?: string | undefined; selectedVisibilityType?: "public" | "private" | undefined; branchId?: number | undefined; model?: string | undefined; toolRestrictions?: { allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; readOnlyMode?: boolean | undefined; } | undefined; telemetryMetadata?: { [key: string]: string | number | boolean; } | undefined; supportsApprovalRequestedEvent?: boolean | undefined; client?: "kbc-ui" | "business-chat" | undefined; gitCredential?: { repository: string; token: string; } | undefined; }): Promise<Response>`
|
|
9
9
|
- `api.kaiAgent.deleteChat(chatId: string): Promise<{ id?: string | undefined; title?: string | undefined; userId?: string | undefined; createdAt?: string | undefined; visibility?: "public" | "private" | undefined; branchId?: number | null | undefined; }>`
|
|
10
10
|
- `api.kaiAgent.deleteUserMemory(memoryId: string, signal?: AbortSignal | undefined): Promise<void>`
|
|
11
11
|
- `api.kaiAgent.downloadSandboxFile(chatId: string, path: string, signal?: AbortSignal | undefined): Promise<Blob>`
|
|
12
12
|
- `api.kaiAgent.getAgentSettings(signal?: AbortSignal | undefined): Promise<{ projectId: string; customInstructions: string | null; createdAt: string; updatedAt: string; toolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; canWriteToolPolicy?: boolean | undefined; }>`
|
|
13
13
|
- `api.kaiAgent.getArtifact(artifactId: string, signal?: AbortSignal | undefined): Promise<{ id: string; chatId: string; messageId: string; kind: "table" | "chart" | "document"; title: string; summary: string | null; spec: { [key: string]: unknown; }; recipe: { [key: string]: unknown; }; createdAt: string; }>`
|
|
14
14
|
- `api.kaiAgent.getArtifacts(chatId: string, signal?: AbortSignal | undefined): Promise<{ id: string; chatId: string; messageId: string; kind: "table" | "chart" | "document"; title: string; summary: string | null; spec: { [key: string]: unknown; }; recipe: { [key: string]: unknown; }; createdAt: string; }[]>`
|
|
15
|
-
- `api.kaiAgent.getChat(chatId: string, signal?: AbortSignal | undefined): Promise<{ id: string; title: string; userId: string; createdAt: string; lastMessageAt: string; visibility: "public" | "private"; branchId?: number | null | undefined; contextWindow?: { usedTokens: number; maxTokens: number; percentage: number; } | null | undefined; ppuUsed: number | null; ppuPercentage: number | null; model: string | null; effort: "medium" | "low" | "high" | "xhigh" | "max" | null; effectiveModel: string | null; messages: { id: string; role: "user" | "assistant"; parts: ({ type: "text"; text: string; state?: "done" | undefined; } | { type: "tool-result"; toolCallId: string; toolName: string; result: string; } | { type: "step-start"; } | { type: "data-compact-boundary"; data: { trigger: "
|
|
15
|
+
- `api.kaiAgent.getChat(chatId: string, signal?: AbortSignal | undefined): Promise<{ id: string; title: string; userId: string; createdAt: string; lastMessageAt: string; visibility: "public" | "private"; branchId?: number | null | undefined; contextWindow?: { usedTokens: number; maxTokens: number; percentage: number; } | null | undefined; ppuUsed: number | null; ppuPercentage: number | null; model: string | null; effort: "medium" | "low" | "high" | "xhigh" | "max" | null; effectiveModel: string | null; messages: { id: string; role: "user" | "assistant"; parts: ({ type: "text"; text: string; state?: "done" | undefined; } | { type: "tool-result"; toolCallId: string; toolName: string; result: string; } | { type: "step-start"; } | { type: "data-compact-boundary"; data: { trigger: "auto" | "manual"; preTokens: number; preservedSegment?: { headUuid: string; anchorUuid: string; tailUuid: string; } | undefined; summary: string; sdkSessionId: string; }; } | { type: string; toolCallId: string; state: "output-available" | "output-error" | "output-denied" | "input-available" | "input-streaming" | "approval-requested" | "approval-responded"; input?: { [key: string]: unknown; } | undefined; output?: unknown; errorText?: string | undefined; approval?: { id: string; approved?: boolean | undefined; reason?: string | undefined; } | undefined; })[]; metadata?: { createdAt?: string | undefined; hidden?: boolean | undefined; autoForwarded?: boolean | undefined; pausedReason?: "turn-budget" | undefined; requestContext?: { path?: string | undefined; sqlEditorActive?: boolean | undefined; } | undefined; } | undefined; status?: "pending" | "failed" | "completed" | "interrupted" | undefined; }[]; }>`
|
|
16
16
|
- `api.kaiAgent.getHistory(params?: { limit?: number | undefined; starting_after?: string | undefined; ending_before?: string | undefined; client?: "kbc-ui" | "business-chat" | undefined; } | undefined, signal?: AbortSignal | undefined): Promise<{ chats: { id?: string | undefined; title?: string | undefined; userId?: string | undefined; createdAt?: string | undefined; lastMessageAt?: string | undefined; visibility?: "public" | "private" | undefined; branchId?: number | null | undefined; client?: "kbc-ui" | "business-chat" | null | undefined; }[]; hasMore: boolean; }>`
|
|
17
17
|
- `api.kaiAgent.getSandboxGitBranch(chatId: string, signal?: AbortSignal | undefined): Promise<{ branch: string | null; }>`
|
|
18
18
|
- `api.kaiAgent.getSkillsList(signal?: AbortSignal | undefined): Promise<{ skills: { name: string; description: string | null; source: "first-party" | "vendored" | "project"; }[]; commands: { name: string; description: string; }[]; }>`
|
|
@@ -20,7 +20,7 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
20
20
|
- `api.kaiAgent.getSuggestions(request: { context: "dashboard"; data: { recentFailedJobs: { id: string; status: "error" | "warning"; component: string; configId: string; createdTime: string; configName?: string | undefined; durationSeconds?: number | undefined; errorMessage?: string | undefined; }[]; deprecatedComponents: { id: string; name: string; type: string; expiredOn: string; configCount: number; }[]; userRecentEdits: { component: string; configId: string; configName: string; lastEdited: string; }[]; currentUserEmail: string; }; } | { context: "job-detail"; data: { job: { id: string; status: "error" | "success" | "warning" | "created" | "waiting" | "processing" | "terminating" | "terminated" | "cancelled"; component: string; createdTime: string; configId?: string | undefined; configName?: string | undefined; startTime?: string | undefined; endTime?: string | undefined; durationSeconds?: number | undefined; errorMessage?: string | undefined; errorType?: "user" | "application" | undefined; backendSize?: string | undefined; }; currentUserEmail: string; component?: { id: string; name: string; type: string; } | undefined; runtimeHistory?: { recentJobsCount: number; averageDurationSeconds?: number | undefined; minDurationSeconds?: number | undefined; maxDurationSeconds?: number | undefined; isSlowerThanAverage?: boolean | undefined; isFasterThanAverage?: boolean | undefined; percentageDifference?: number | undefined; } | undefined; }; } | { context: "configuration-detail"; data: { configuration: { id: string; name: string; component: string; hasRows: boolean; description?: string | undefined; rowCount?: number | undefined; lastChangeDescription?: string | undefined; }; currentUserEmail: string; component?: { id: string; name: string; type: string; } | undefined; latestJobs?: { id: string; status: "error" | "success" | "warning" | "created" | "waiting" | "processing" | "terminating" | "terminated" | "cancelled"; createdTime: string; durationSeconds?: number | undefined; errorMessage?: string | undefined; }[] | undefined; }; }, signal?: AbortSignal | undefined): Promise<{ suggestions: { label: string; prompt: string; priority: number; category: "error" | "maintenance" | "documentation"; reasoning: string; id: string; }[]; suggestionSessionId: string; }>`
|
|
21
21
|
- `api.kaiAgent.getToolsList(signal?: AbortSignal | undefined): Promise<{ tools: { name: string; description: string; readOnly: boolean; }[]; }>`
|
|
22
22
|
- `api.kaiAgent.getUsage(signal?: AbortSignal | undefined): Promise<UsageResponse>`
|
|
23
|
-
- `api.kaiAgent.getUserAgentSettings(signal?: AbortSignal | undefined): Promise<{ projectId: string; userId: string; customInstructions: string | null; toolPermissions: Record<string, "blocked" | "always_ask" | "always_allow"> | null; createdAt: string; updatedAt: string; projectToolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; }>`
|
|
23
|
+
- `api.kaiAgent.getUserAgentSettings(signal?: AbortSignal | undefined): Promise<{ projectId: string; userId: string; customInstructions: string | null; toolPermissions: Record<string, "blocked" | "always_ask" | "always_allow"> | null; createdAt: string; updatedAt: string; projectToolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; memorySaveMode?: "auto" | "ask" | undefined; }>`
|
|
24
24
|
- `api.kaiAgent.getUserMemories(signal?: AbortSignal | undefined): Promise<{ id: string; content: string; createdAt: string; }[]>`
|
|
25
25
|
- `api.kaiAgent.getVotes(chatId: string): Promise<{ chatId: string; messageId: string; isUpvoted: boolean; }[]>`
|
|
26
26
|
- `api.kaiAgent.healthCheck(signal?: AbortSignal | undefined): Promise<unknown>`
|
|
@@ -34,4 +34,5 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
34
34
|
- `api.kaiAgent.updateAgentSettings(request: UpdateAgentSettingsRequest, signal?: AbortSignal | undefined): Promise<{ projectId: string; customInstructions: string | null; createdAt: string; updatedAt: string; toolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; canWriteToolPolicy?: boolean | undefined; }>`
|
|
35
35
|
- `api.kaiAgent.updateProjectToolPolicy(toolPermissions: ProjectToolPolicy, signal?: AbortSignal | undefined): Promise<{ projectId: string; customInstructions: string | null; createdAt: string; updatedAt: string; toolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; canWriteToolPolicy?: boolean | undefined; }>`
|
|
36
36
|
- `api.kaiAgent.updateSpendCaps(request: UpdateSpendCapsRequest, signal?: AbortSignal | undefined): Promise<SpendCapsView>`
|
|
37
|
-
- `api.kaiAgent.updateUserAgentSettings(request: UpdateUserAgentSettingsRequest, signal?: AbortSignal | undefined): Promise<{ projectId: string; userId: string; customInstructions: string | null; toolPermissions: Record<string, "blocked" | "always_ask" | "always_allow"> | null; createdAt: string; updatedAt: string; projectToolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; }>`
|
|
37
|
+
- `api.kaiAgent.updateUserAgentSettings(request: UpdateUserAgentSettingsRequest, signal?: AbortSignal | undefined): Promise<{ projectId: string; userId: string; customInstructions: string | null; toolPermissions: Record<string, "blocked" | "always_ask" | "always_allow"> | null; createdAt: string; updatedAt: string; projectToolPermissions?: Record<string, ProjectToolPolicyValue> | null | undefined; memorySaveMode?: "auto" | "ask" | undefined; }>`
|
|
38
|
+
- `api.kaiAgent.updateUserMemory(memoryId: string, content: string, signal?: AbortSignal | undefined): Promise<{ id: string; content: string; createdAt: string; }>`
|
package/surface/management.md
CHANGED
|
@@ -129,7 +129,9 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
129
129
|
|
|
130
130
|
### `api.management.programmaticProjects`
|
|
131
131
|
|
|
132
|
-
- `api.management.programmaticProjects.
|
|
132
|
+
- `api.management.programmaticProjects.confirmByCookie(signal?: AbortSignal | undefined): Promise<{ project: { id: number; }; confirmedByAdminId: number; }>`
|
|
133
|
+
- `api.management.programmaticProjects.confirmByToken(claimToken: string, signal?: AbortSignal | undefined): Promise<{ project: { id: number; }; confirmedByAdminId: number; }>`
|
|
134
|
+
- `api.management.programmaticProjects.getClaim(signal?: AbortSignal | undefined): Promise<{ present: boolean; claimId?: string | null | undefined; projectName?: string | null | undefined; }>`
|
|
133
135
|
|
|
134
136
|
### `api.management.projects`
|
|
135
137
|
|
package/surface/storage.md
CHANGED
|
@@ -57,6 +57,7 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
57
57
|
- `api.storage.bucketSharing.shareBucketToUsersAsync({ branchId, bucketId, ...body }: ShareBucketToUsersInput, signal?: AbortSignal | undefined): Promise<ShareBucketToAdminsJob>`
|
|
58
58
|
- `api.storage.bucketSharing.shareBucketToUsersPoller(input: ShareBucketToUsersInput, options?: StorageJobPollOptions | undefined): Poller<ShareBucketToAdminsJob, JobBase<"bucketShareToAdmins", Record<string, unknown>> & { status: "success"; results: null; }>`
|
|
59
59
|
- `api.storage.bucketSharing.sharedBuckets<const I extends readonly SharedBucketInclude[] = []>(query?: SharedBucketsQuery<I> | undefined, signal?: AbortSignal | undefined): Promise<SharedBucketWith<I>[]>`
|
|
60
|
+
- `api.storage.bucketSharing.sharingTargets(signal?: AbortSignal | undefined): Promise<{ projects: { id: number; name: string; }[]; users: { id: number; name: string; email: string; }[]; }>`
|
|
60
61
|
- `api.storage.bucketSharing.unshareBucketAsync({ branchId, bucketId }: { bucketId: string; branchId: string; }, signal?: AbortSignal | undefined): Promise<RemoveBucketShareJob>`
|
|
61
62
|
- `api.storage.bucketSharing.unshareBucketPoller(input: { bucketId: string; branchId: string; }, options?: StorageJobPollOptions | undefined): Poller<RemoveBucketShareJob, JobBase<"bucketRemoveShare", Record<string, unknown>> & { status: "success"; results: null; }>`
|
|
62
63
|
|
|
@@ -124,7 +125,7 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
124
125
|
- `api.storage.configurationWorkspaces.createConfigurationWorkspace({ componentId, branchId, configurationId, ...body }: CreateConfigurationWorkspaceInput): Promise<CreatedWorkspace>`
|
|
125
126
|
- `api.storage.configurationWorkspaces.createConfigurationWorkspaceAsync({ componentId, branchId, configurationId, ...body }: CreateConfigurationWorkspaceInput, signal?: AbortSignal | undefined): Promise<CreateWorkspaceJob>`
|
|
126
127
|
- `api.storage.configurationWorkspaces.createConfigurationWorkspacePoller(input: CreateConfigurationWorkspaceInput, options?: StorageJobPollOptions | undefined): Poller<CreateWorkspaceJob, JobBase<"workspaceCreate", { backend: string; backendConfiguration: []; backendSize: null; branchId: number; componentId: string; configurationId: string; loginType: number; networkPolicy: string; publicKey: string; readOnlyStorageAccess: boolean; useCase: ConfigurationUseCaseType; }> & { status: "success"; results: Workspace; }>`
|
|
127
|
-
- `api.storage.configurationWorkspaces.getConfigurationWorkspaces({ componentId, branchId, configurationId, }: { componentId: string; configurationId: string; branchId: string; }): Promise<{ id: number; type: "file" | "table"; name: string | null; component: string | null; configurationId: string | null; configurationVersion: number | null; created: string; connection: { backend: "snowflake" | "bigquery" | "synapse" | "exasol" | "teradata" | "postgres" | "ducklake"; region: string; host: string; database: string | null; schema: string | null; warehouse: string | null; user: string; loginType: "default" | "snowflake-person-sso" | "snowflake-legacy-service" | "snowflake-person-keypair" | "snowflake-service-keypair" | "none"; ssoLoginAvailable: boolean; account?: string | undefined; role?: string | null | undefined; } | { backend: string; container: string | null; region: string; }; backendSize: string | null; statementTimeoutSeconds: number; creatorToken: { id: number; description: string | null; }; readOnlyStorageAccess: boolean; platformUsageType: "user" | "service" | "reader" | null; state: "active" | "deactivated"; deactivateAt: string | null; }[]>`
|
|
128
|
+
- `api.storage.configurationWorkspaces.getConfigurationWorkspaces({ componentId, branchId, configurationId, }: { componentId: string; configurationId: string; branchId: string; }): Promise<{ id: number; type: "file" | "table"; name: string | null; component: string | null; configurationId: string | null; configurationVersion: number | null; created: string; connection: { backend: "snowflake" | "bigquery" | "synapse" | "exasol" | "teradata" | "postgres" | "ducklake"; region: string; host: string; database: string | null; schema: string | null; warehouse: string | null; user: string; loginType: "default" | "snowflake-person-sso" | "snowflake-legacy-service" | "snowflake-person-keypair" | "snowflake-service-keypair" | "none" | "governed"; ssoLoginAvailable: boolean; account?: string | undefined; role?: string | null | undefined; } | { backend: string; container: string | null; region: string; }; backendSize: string | null; statementTimeoutSeconds: number; creatorToken: { id: number; description: string | null; }; readOnlyStorageAccess: boolean; platformUsageType: "user" | "service" | "reader" | null; state: "active" | "deactivated"; lastActivityAt: string | null; warnAt: string | null; deactivateAt: string | null; deleteAt: string | null; }[]>`
|
|
128
129
|
|
|
129
130
|
### `api.storage.configurations`
|
|
130
131
|
|
|
@@ -261,5 +262,5 @@ Part of the [`@keboola/api-client` surface index](../API-SURFACE.md).
|
|
|
261
262
|
- `api.storage.workspaces.getWorkspaces(path: { branchId: string; }, signal?: AbortSignal | undefined): Promise<Workspace[]>`
|
|
262
263
|
- `api.storage.workspaces.inputMappingLoadPreview({ branchId, body, ...query }: WorkspaceInputMappingLoadPreviewInput, signal?: AbortSignal | undefined): Promise<{ input: { source: string; destination: string; loadType: "VIEW" | "COPY" | "CLONE"; possibleLoadTypes: ("VIEW" | "COPY" | "CLONE")[]; }[]; }>`
|
|
263
264
|
- `api.storage.workspaces.resetWorkspacePassword({ branchId, workspaceId }: { workspaceId: number; branchId: string; }): Promise<{ password?: string | undefined; connectionString?: string | undefined; credentials?: { type?: string | undefined; project_id?: string | undefined; private_key_id?: string | undefined; private_key?: string | undefined; client_email?: string | undefined; client_id?: string | undefined; auth_uri?: string | undefined; token_uri?: string | undefined; auth_provider_x509_cert_url?: string | undefined; client_x509_cert_url?: string | undefined; } | undefined; }>`
|
|
264
|
-
- `api.storage.workspaces.setWorkspacePublicKey({ branchId, workspaceId, ...body }: SetWorkspacePublicInput): Promise<{ id: number; type: "file" | "table"; name: string | null; component: string | null; configurationId: string | null; configurationVersion: number | null; created: string; connection: { backend: "snowflake" | "bigquery" | "synapse" | "exasol" | "teradata" | "postgres" | "ducklake"; region: string; host: string; database: string | null; schema: string | null; warehouse: string | null; user: string; loginType: "default" | "snowflake-person-sso" | "snowflake-legacy-service" | "snowflake-person-keypair" | "snowflake-service-keypair" | "none"; ssoLoginAvailable: boolean; account?: string | undefined; role?: string | null | undefined; } | { backend: string; container: string | null; region: string; }; backendSize: string | null; statementTimeoutSeconds: number; creatorToken: { id: number; description: string | null; }; readOnlyStorageAccess: boolean; platformUsageType: "user" | "service" | "reader" | null; state: "active" | "deactivated"; deactivateAt: string | null; }>`
|
|
265
|
+
- `api.storage.workspaces.setWorkspacePublicKey({ branchId, workspaceId, ...body }: SetWorkspacePublicInput): Promise<{ id: number; type: "file" | "table"; name: string | null; component: string | null; configurationId: string | null; configurationVersion: number | null; created: string; connection: { backend: "snowflake" | "bigquery" | "synapse" | "exasol" | "teradata" | "postgres" | "ducklake"; region: string; host: string; database: string | null; schema: string | null; warehouse: string | null; user: string; loginType: "default" | "snowflake-person-sso" | "snowflake-legacy-service" | "snowflake-person-keypair" | "snowflake-service-keypair" | "none" | "governed"; ssoLoginAvailable: boolean; account?: string | undefined; role?: string | null | undefined; } | { backend: string; container: string | null; region: string; }; backendSize: string | null; statementTimeoutSeconds: number; creatorToken: { id: number; description: string | null; }; readOnlyStorageAccess: boolean; platformUsageType: "user" | "service" | "reader" | null; state: "active" | "deactivated"; lastActivityAt: string | null; warnAt: string | null; deactivateAt: string | null; deleteAt: string | null; }>`
|
|
265
266
|
- `api.storage.workspaces.unloadWorkspace({ branchId, workspaceId, ...query }: UnloadWorkspaceInput): Promise<Record<string, never>[]>`
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configurations-BTRHVSRq.cjs","names":["AdminRole"],"sources":["../src/domain/permissions/errors.ts","../src/domain/permissions/admin.ts","../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * - What every `assertCan*` throws; its public fields are SDK contract — renames break consumers.\n * - `subject` is a debugging hint only — never a `StorageToken`, raw token or secret.\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 * Admin-role predicates read from `token.admin.role` alone.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): AdminRole | null => 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.\n *\n * - Failing it means *unrecognized*, not denied — log it loudly.\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.\n *\n * - `admin` and `share` only: a shared prompt-injection surface is project administration.\n * - `developer`/`reviewer` are denied: `agent_settings` is keyed by `project_id` alone, so a dev-branch edit hits production.\n * - An allowlist, so new upstream `AdminRole` members are denied by default.\n * - Spend caps use `./organization#canWriteKaiSpendCaps`; don't widen this for them.\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.\n *\n * - A limited (non-master) token never may; its `admin` block is absent despite the type.\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\n/**\n * Whether this token may write the project's semantic layer in the metastore.\n *\n * - Mirrors the metastore's role mapping (go-monorepo `services/metastore/internal/authz`):\n * only a master token with the `admin` or `productionManager` role gets `project-admin`.\n * - Every other role, and a limited token (no `admin` block), gets a 403.\n * - Organization-scope promotion is left to the metastore's 403.\n */\nexport const canWriteSemanticLayer = (token: StorageToken): boolean =>\n token.admin?.role === AdminRole.Admin || token.admin?.role === AdminRole.ProductionManager;\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 * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\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` on any branch other than the default (`isDefault`) one.\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 canUpdateConfiguration = (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 assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-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"],"mappings":";;;;;;;;AAMA,IAAa,wBAAb,cAA2C,MAAM;CAC/C;CACA;CACA;CAEA,YAAY,EAAE,QAAQ,QAAQ,WAAkE;EAC9F,MAAM,SAAS,sBAAsB,OAAO,IAAI,OAAO,KAAK,sBAAsB,QAAQ;EAC1F,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,UAAU;CACjB;AACF;;;ACRA,MAAM,QAAQ,UAA0C,MAAM,MAAM;AAEpE,MAAa,WAAW,UAAiC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAEnF,MAAa,kBAAkB,UAC7B,KAAK,KAAK,MAAMA,mBAAAA,UAAU,SAAS,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAE/D,MAAa,uBAAuB,UAClC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAE5B,MAAa,yBAAyB,UACpC,KAAK,KAAK,MAAMA,mBAAAA,UAAU,aAAa,KAAK,KAAK,MAAMA,mBAAAA,UAAU;AAEnE,MAAa,kBAAkB,UAAiC,KAAK,KAAK,MAAMA,mBAAAA,UAAU;;;;;;AAO1F,MAAa,oBAAoB,cAC9B,OAAO,OAAOA,mBAAAA,SAAS,CAAC,CAAc,SAAS,aAAa,EAAE;;;;;;;;;AAUjE,MAAa,2BAA2B,cAAkD;CACxF,QAAQ,WAAR;EACE,KAAKA,mBAAAA,UAAU;EACf,KAAKA,mBAAAA,UAAU,OACb,OAAO;EACT,SACE,OAAO;CACX;AACF;;;;;;AAOA,MAAa,uBAAuB,UAClC,MAAM,iBAAiB,wBAAwB,MAAM,OAAO,IAAI;AAElE,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,gCACrC;CACN,CAAC;AAEL;;;;;;;;;AAUA,MAAa,yBAAyB,UACpC,MAAM,OAAO,SAASA,mBAAAA,UAAU,SAAS,MAAM,OAAO,SAASA,mBAAAA,UAAU;AAE3E,MAAa,kBAAkB,UAA8B;CAC3D,IAAI,CAAC,QAAQ,KAAK,GAChB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,yBAAyB,UAA8B;CAClE,IAAI,CAAC,eAAe,KAAK,GACvB,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,6BAA6B,UAA8B;CACtE,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;AAEA,MAAa,4BAA4B,UAA8B;CACrE,IAAI,CAAC,sBAAsB,KAAK,GAC9B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,SAAS,KAAK,KAAK,EAAE;CAC/B,CAAC;AAEL;;;AC/FA,MAAM,iBAAiB,OAAqB,QAC1C,IAAI,kBAAkB,sBAAsB,KAAK,IAAI,oBAAoB,KAAK;AAEhF,MAAM,oBAAoB,QACxB,IAAI,kBACA,mDACA;AAEN,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,wBAAwB,OAAqB,QACxD,cAAc,OAAO,GAAG;AAE1B,MAAa,0BAA0B,OAAqB,QAC1D,cAAc,OAAO,GAAG;AAE1B,MAAa,yBACX,UACG,QAAQ,KAAK;AAElB,MAAa,mBAAmB,OAAqB,QACnD,cAAc,OAAO,GAAG;AAE1B,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,8BAA8B,OAAqB,QAAgC;CAC9F,IAAI,CAAC,qBAAqB,OAAO,GAAG,GAClC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,gCAAgC,OAAqB,QAAgC;CAChG,IAAI,CAAC,uBAAuB,OAAO,GAAG,GACpC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL;AAEA,MAAa,+BAA+B,OAAqB,QAAgC;CAC/F,IAAI,CAAC,sBAAsB,OAAO,GAAG,GACnC,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ;CACV,CAAC;AAEL;AAEA,MAAa,yBAAyB,OAAqB,QAAgC;CACzF,IAAI,CAAC,gBAAgB,OAAO,GAAG,GAC7B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,iBAAiB,GAAG;CAC9B,CAAC;AAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configurations-Chg_JwJ1.js","names":[],"sources":["../src/domain/permissions/errors.ts","../src/domain/permissions/admin.ts","../src/domain/permissions/configurations.ts"],"sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * - What every `assertCan*` throws; its public fields are SDK contract — renames break consumers.\n * - `subject` is a debugging hint only — never a `StorageToken`, raw token or secret.\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 * Admin-role predicates read from `token.admin.role` alone.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRole } from '../../constants/adminRoles';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): AdminRole | null => 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.\n *\n * - Failing it means *unrecognized*, not denied — log it loudly.\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.\n *\n * - `admin` and `share` only: a shared prompt-injection surface is project administration.\n * - `developer`/`reviewer` are denied: `agent_settings` is keyed by `project_id` alone, so a dev-branch edit hits production.\n * - An allowlist, so new upstream `AdminRole` members are denied by default.\n * - Spend caps use `./organization#canWriteKaiSpendCaps`; don't widen this for them.\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.\n *\n * - A limited (non-master) token never may; its `admin` block is absent despite the type.\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\n/**\n * Whether this token may write the project's semantic layer in the metastore.\n *\n * - Mirrors the metastore's role mapping (go-monorepo `services/metastore/internal/authz`):\n * only a master token with the `admin` or `productionManager` role gets `project-admin`.\n * - Every other role, and a limited token (no `admin` block), gets a 403.\n * - Organization-scope promotion is left to the metastore's 403.\n */\nexport const canWriteSemanticLayer = (token: StorageToken): boolean =>\n token.admin?.role === AdminRole.Admin || token.admin?.role === AdminRole.ProductionManager;\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 * - Dev branch → developer or reviewer; production → production manager.\n * - Purge is admin-only in any branch mode; its `ctx` is ignored.\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` on any branch other than the default (`isDefault`) one.\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 canUpdateConfiguration = (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 assertCanUpdateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canUpdateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'update-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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants-CA4UN2Xv.js","names":[],"sources":["../src/constants/projectFeatures.ts","../src/constants/serviceIds.ts","../src/constants/backends.ts","../src/constants/stacks.ts","../src/constants/index.ts"],"sourcesContent":["export const ProjectFeature = {\n DisableLegacyBucketPrefix: 'disable-legacy-bucket-prefix',\n SoxProtectedDefaultBranch: 'protected-default-branch',\n StorageBranches: 'storage-branches',\n} as const;\n\nexport type ProjectFeature = (typeof ProjectFeature)[keyof typeof ProjectFeature];\n","/**\n * Every service a Keboola stack can announce in its `GET /v2/storage` index.\n *\n * - The values are the `id`s the stack reports; the service-client registry and `createStack`'s\n * lookups narrow on them. The index itself stays `string` — a stack may announce more.\n * - Callers enumerate them at runtime — a test double announcing every service, for one.\n */\nexport const ServiceId = {\n Vault: 'vault',\n DataScience: 'data-science',\n Encryption: 'encryption',\n Telemetry: 'telemetry',\n Ai: 'ai',\n Editor: 'editor',\n Import: 'import',\n Oauth: 'oauth',\n Query: 'query',\n Queue: 'queue',\n KaiAssistant: 'kai-assistant',\n KaiAgent: 'kai-agent',\n ComponentsMcp: 'components-mcp',\n SyncActions: 'sync-actions',\n Stream: 'stream',\n Notification: 'notification',\n Scheduler: 'scheduler',\n Metastore: 'metastore',\n Billing: 'billing',\n} as const;\n\nexport type ServiceId = (typeof ServiceId)[keyof typeof ServiceId];\n","export const Backend = {\n Snowflake: 'snowflake',\n Bigquery: 'bigquery',\n} as const;\n\nexport type Backend = (typeof Backend)[keyof typeof Backend];\n","export const Provider = {\n Aws: 'aws',\n Azure: 'azure',\n Gcp: 'gcp',\n} as const;\n\nexport type Provider = (typeof Provider)[keyof typeof Provider];\n\nexport const Continent = {\n Us: 'us',\n Europe: 'europe',\n} as const;\n\nexport type Continent = (typeof Continent)[keyof typeof Continent];\n\nexport type KeboolaStack = {\n id: string;\n host: string;\n isSingleTenant?: boolean;\n isTesting?: boolean;\n isPayg?: boolean;\n provider?: Provider;\n continent?: Continent;\n region?: string;\n isCanary?: boolean;\n};\n\nconst stacks = {\n NORTH_EUROPE_AZURE: {\n id: 'com-keboola-azure-north-europe',\n region: 'north-europe',\n host: 'connection.north-europe.azure.keboola.com',\n provider: 'azure',\n continent: 'europe',\n isPayg: true,\n },\n EU_CENTRAL_1_AWS: {\n id: 'kbc-eu-central-1',\n region: 'eu-central-1',\n host: 'connection.eu-central-1.keboola.com',\n provider: 'aws',\n continent: 'europe',\n },\n US_EAST_1_AWS: {\n id: 'kbc-us-east-1',\n region: 'us-east-1',\n host: 'connection.keboola.com',\n provider: 'aws',\n continent: 'us',\n },\n EUROPE_WEST3_GCP: {\n id: 'com-keboola-gcp-europe-west3',\n region: 'europe-west3',\n host: 'connection.europe-west3.gcp.keboola.com',\n provider: 'gcp',\n continent: 'europe',\n },\n US_EAST_4_GCP: {\n id: 'com-keboola-gcp-us-east4',\n region: 'us-east4',\n host: 'connection.us-east4.gcp.keboola.com',\n provider: 'gcp',\n continent: 'us',\n isPayg: true,\n },\n\n /* PRIVATE SINGLE TENANT STACKS\n ---------------------------- */\n HCI: {\n id: 'cloud-keboola-hci',\n host: 'connection.hci.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_PROD: {\n id: 'cloud-keboola-cs',\n host: 'connection.cs.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_TEST: {\n id: 'cloud-keboola-cs-test',\n host: 'connection.cs-test.keboola.cloud',\n isSingleTenant: true,\n },\n INNOGY: {\n id: 'cloud-keboola-innogy-hub',\n host: 'connection.innogy-hub.keboola.cloud',\n isSingleTenant: true,\n },\n GROUPON: {\n id: 'cloud-keboola-groupon',\n host: 'connection.groupon.keboola.cloud',\n isSingleTenant: true,\n },\n CREDIT_INFO: {\n id: 'cloud-keboola-creditinfo',\n host: 'connection.creditinfo.keboola.cloud',\n isSingleTenant: true,\n },\n COATES: {\n id: 'cloud-keboola-coates',\n host: 'connection.coates.keboola.cloud',\n isSingleTenant: true,\n },\n SLSP: {\n id: 'cloud-keboola-slsp',\n host: 'connection.slsp.keboola.cloud',\n isSingleTenant: true,\n },\n HCKZ: {\n id: 'cloud-keboola-hckz',\n host: 'connection.hckz.keboola.cloud',\n isSingleTenant: true,\n },\n PASHA: {\n id: 'cloud-keboola-pasha',\n host: 'connection.pasha.keboola.cloud',\n isSingleTenant: true,\n },\n RBI: {\n id: 'cloud-keboola-rbi',\n host: 'connection.rbi.keboola.cloud',\n isSingleTenant: true,\n },\n NAH: {\n id: 'cloud-keboola-nah',\n host: 'connection.nah.keboola.cloud',\n isSingleTenant: true,\n provider: 'azure',\n continent: 'us',\n },\n\n /* DEV STACKS\n ---------------------------- */\n DEV_US_CENTRAL_1_GCP: {\n id: 'dev-keboola-gcp-us-central1',\n region: 'us-central1',\n host: 'connection.us-central1.gcp.keboola.dev',\n provider: 'gcp',\n continent: 'us',\n isTesting: true,\n },\n DEV_EU_WEST_1_AWS: {\n id: 'dev-keboola-aws-eu-west-1',\n region: 'eu-west-1',\n host: 'connection.eu-west-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'europe',\n isTesting: true,\n },\n DEV_US_EAST_1_AWS_E2E: {\n id: 'dev-keboola-aws-us-east-1-e2e',\n region: 'us-east-1',\n host: 'connection.e2e.us-east-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'us',\n isTesting: true,\n },\n DEV_US_EAST_2_AZURE: {\n id: 'kbc-testing-azure-east-us-2',\n region: 'east-us-2',\n host: 'connection.east-us-2.azure.keboola-testing.com',\n provider: 'azure',\n continent: 'us',\n isTesting: true,\n },\n DEV_KEBOOLA_CANARY_ORION: {\n id: 'dev-keboola-canary-orion',\n region: 'europe-west3',\n host: 'connection.canary-orion.keboola.dev',\n provider: 'gcp',\n continent: 'europe',\n isCanary: true,\n },\n} satisfies Record<string, Readonly<KeboolaStack>>;\n\n/**\n * Every stack the platform knows, keyed by name.\n *\n * - The key set is literal, so a name that is not in the object is a compile error at the call site\n * rather than an `undefined` to fall back from.\n * - The value type stays the uniform `KeboolaStack`, so `stack.isCanary` reads on any entry, not\n * only on the ones that carry the flag.\n */\nexport const STACKS: Record<keyof typeof stacks, Readonly<KeboolaStack>> = stacks;\n","export { ComponentId } from './componentId';\nexport { ProjectFeature } from './projectFeatures';\nexport { Backend } from './backends';\nexport { AdminRole } from './adminRoles';\nexport { ServiceId } from './serviceIds';\nexport { Continent, Provider, STACKS } from './stacks';\nexport type { KeboolaStack } from './stacks';\n\nexport const URLS = {\n USER_DOCUMENTATION: 'https://help.keboola.com',\n COMPONENTS: 'https://components.keboola.com',\n DEVELOPERS_DOCUMENTATION: 'https://developers.keboola.com',\n ACADEMY: 'https://academy.keboola.com',\n SALES_CONTACT_FORM: 'https://keboola.com/contact',\n SNOWFLAKE: 'https://www.snowflake.com',\n SNOWFLAKE_DOCS: 'https://docs.snowflake.com',\n MCP: 'https://www.keboola.com/mcp',\n CLI: 'https://www.keboola.com/cli',\n NODE_JS: 'https://nodejs.org/en',\n CLAUDE_CONNECTORS: 'https://claude.ai/customize/connectors',\n // Vendor \"how do I get this client\" pages linked from the connect surfaces.\n CLIENT_CLAUDE_CODE_QUICKSTART: 'https://code.claude.com/docs/en/quickstart',\n CLIENT_CLAUDE_AI: 'https://claude.ai',\n CLIENT_CLAUDE_DESKTOP_DOWNLOAD: 'https://claude.com/download',\n CLIENT_CURSOR_QUICKSTART: 'https://cursor.com/docs/get-started/quickstart',\n CLIENT_VS_CODE_SETUP: 'https://code.visualstudio.com/docs/setup/setup-overview',\n CLIENT_CODEX_QUICKSTART: 'https://developers.openai.com/codex/cli',\n CLIENT_CHATGPT_DOWNLOAD: 'https://chatgpt.com/download',\n CLIENT_MAKE_GET_STARTED: 'https://help.make.com/get-started',\n CLIENT_DEVIN_DESKTOP: 'https://docs.devin.ai/desktop/getting-started',\n} as const;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants-a0jswUeK.cjs","names":[],"sources":["../src/constants/projectFeatures.ts","../src/constants/serviceIds.ts","../src/constants/backends.ts","../src/constants/stacks.ts","../src/constants/index.ts"],"sourcesContent":["export const ProjectFeature = {\n DisableLegacyBucketPrefix: 'disable-legacy-bucket-prefix',\n SoxProtectedDefaultBranch: 'protected-default-branch',\n StorageBranches: 'storage-branches',\n} as const;\n\nexport type ProjectFeature = (typeof ProjectFeature)[keyof typeof ProjectFeature];\n","/**\n * Every service a Keboola stack can announce in its `GET /v2/storage` index.\n *\n * - The values are the `id`s the stack reports; the service-client registry and `createStack`'s\n * lookups narrow on them. The index itself stays `string` — a stack may announce more.\n * - Callers enumerate them at runtime — a test double announcing every service, for one.\n */\nexport const ServiceId = {\n Vault: 'vault',\n DataScience: 'data-science',\n Encryption: 'encryption',\n Telemetry: 'telemetry',\n Ai: 'ai',\n Editor: 'editor',\n Import: 'import',\n Oauth: 'oauth',\n Query: 'query',\n Queue: 'queue',\n KaiAssistant: 'kai-assistant',\n KaiAgent: 'kai-agent',\n ComponentsMcp: 'components-mcp',\n SyncActions: 'sync-actions',\n Stream: 'stream',\n Notification: 'notification',\n Scheduler: 'scheduler',\n Metastore: 'metastore',\n Billing: 'billing',\n} as const;\n\nexport type ServiceId = (typeof ServiceId)[keyof typeof ServiceId];\n","export const Backend = {\n Snowflake: 'snowflake',\n Bigquery: 'bigquery',\n} as const;\n\nexport type Backend = (typeof Backend)[keyof typeof Backend];\n","export const Provider = {\n Aws: 'aws',\n Azure: 'azure',\n Gcp: 'gcp',\n} as const;\n\nexport type Provider = (typeof Provider)[keyof typeof Provider];\n\nexport const Continent = {\n Us: 'us',\n Europe: 'europe',\n} as const;\n\nexport type Continent = (typeof Continent)[keyof typeof Continent];\n\nexport type KeboolaStack = {\n id: string;\n host: string;\n isSingleTenant?: boolean;\n isTesting?: boolean;\n isPayg?: boolean;\n provider?: Provider;\n continent?: Continent;\n region?: string;\n isCanary?: boolean;\n};\n\nconst stacks = {\n NORTH_EUROPE_AZURE: {\n id: 'com-keboola-azure-north-europe',\n region: 'north-europe',\n host: 'connection.north-europe.azure.keboola.com',\n provider: 'azure',\n continent: 'europe',\n isPayg: true,\n },\n EU_CENTRAL_1_AWS: {\n id: 'kbc-eu-central-1',\n region: 'eu-central-1',\n host: 'connection.eu-central-1.keboola.com',\n provider: 'aws',\n continent: 'europe',\n },\n US_EAST_1_AWS: {\n id: 'kbc-us-east-1',\n region: 'us-east-1',\n host: 'connection.keboola.com',\n provider: 'aws',\n continent: 'us',\n },\n EUROPE_WEST3_GCP: {\n id: 'com-keboola-gcp-europe-west3',\n region: 'europe-west3',\n host: 'connection.europe-west3.gcp.keboola.com',\n provider: 'gcp',\n continent: 'europe',\n },\n US_EAST_4_GCP: {\n id: 'com-keboola-gcp-us-east4',\n region: 'us-east4',\n host: 'connection.us-east4.gcp.keboola.com',\n provider: 'gcp',\n continent: 'us',\n isPayg: true,\n },\n\n /* PRIVATE SINGLE TENANT STACKS\n ---------------------------- */\n HCI: {\n id: 'cloud-keboola-hci',\n host: 'connection.hci.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_PROD: {\n id: 'cloud-keboola-cs',\n host: 'connection.cs.keboola.cloud',\n isSingleTenant: true,\n },\n CSAS_TEST: {\n id: 'cloud-keboola-cs-test',\n host: 'connection.cs-test.keboola.cloud',\n isSingleTenant: true,\n },\n INNOGY: {\n id: 'cloud-keboola-innogy-hub',\n host: 'connection.innogy-hub.keboola.cloud',\n isSingleTenant: true,\n },\n GROUPON: {\n id: 'cloud-keboola-groupon',\n host: 'connection.groupon.keboola.cloud',\n isSingleTenant: true,\n },\n CREDIT_INFO: {\n id: 'cloud-keboola-creditinfo',\n host: 'connection.creditinfo.keboola.cloud',\n isSingleTenant: true,\n },\n COATES: {\n id: 'cloud-keboola-coates',\n host: 'connection.coates.keboola.cloud',\n isSingleTenant: true,\n },\n SLSP: {\n id: 'cloud-keboola-slsp',\n host: 'connection.slsp.keboola.cloud',\n isSingleTenant: true,\n },\n HCKZ: {\n id: 'cloud-keboola-hckz',\n host: 'connection.hckz.keboola.cloud',\n isSingleTenant: true,\n },\n PASHA: {\n id: 'cloud-keboola-pasha',\n host: 'connection.pasha.keboola.cloud',\n isSingleTenant: true,\n },\n RBI: {\n id: 'cloud-keboola-rbi',\n host: 'connection.rbi.keboola.cloud',\n isSingleTenant: true,\n },\n NAH: {\n id: 'cloud-keboola-nah',\n host: 'connection.nah.keboola.cloud',\n isSingleTenant: true,\n provider: 'azure',\n continent: 'us',\n },\n\n /* DEV STACKS\n ---------------------------- */\n DEV_US_CENTRAL_1_GCP: {\n id: 'dev-keboola-gcp-us-central1',\n region: 'us-central1',\n host: 'connection.us-central1.gcp.keboola.dev',\n provider: 'gcp',\n continent: 'us',\n isTesting: true,\n },\n DEV_EU_WEST_1_AWS: {\n id: 'dev-keboola-aws-eu-west-1',\n region: 'eu-west-1',\n host: 'connection.eu-west-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'europe',\n isTesting: true,\n },\n DEV_US_EAST_1_AWS_E2E: {\n id: 'dev-keboola-aws-us-east-1-e2e',\n region: 'us-east-1',\n host: 'connection.e2e.us-east-1.aws.keboola.dev',\n provider: 'aws',\n continent: 'us',\n isTesting: true,\n },\n DEV_US_EAST_2_AZURE: {\n id: 'kbc-testing-azure-east-us-2',\n region: 'east-us-2',\n host: 'connection.east-us-2.azure.keboola-testing.com',\n provider: 'azure',\n continent: 'us',\n isTesting: true,\n },\n DEV_KEBOOLA_CANARY_ORION: {\n id: 'dev-keboola-canary-orion',\n region: 'europe-west3',\n host: 'connection.canary-orion.keboola.dev',\n provider: 'gcp',\n continent: 'europe',\n isCanary: true,\n },\n} satisfies Record<string, Readonly<KeboolaStack>>;\n\n/**\n * Every stack the platform knows, keyed by name.\n *\n * - The key set is literal, so a name that is not in the object is a compile error at the call site\n * rather than an `undefined` to fall back from.\n * - The value type stays the uniform `KeboolaStack`, so `stack.isCanary` reads on any entry, not\n * only on the ones that carry the flag.\n */\nexport const STACKS: Record<keyof typeof stacks, Readonly<KeboolaStack>> = stacks;\n","export { ComponentId } from './componentId';\nexport { ProjectFeature } from './projectFeatures';\nexport { Backend } from './backends';\nexport { AdminRole } from './adminRoles';\nexport { ServiceId } from './serviceIds';\nexport { Continent, Provider, STACKS } from './stacks';\nexport type { KeboolaStack } from './stacks';\n\nexport const URLS = {\n USER_DOCUMENTATION: 'https://help.keboola.com',\n COMPONENTS: 'https://components.keboola.com',\n DEVELOPERS_DOCUMENTATION: 'https://developers.keboola.com',\n ACADEMY: 'https://academy.keboola.com',\n SALES_CONTACT_FORM: 'https://keboola.com/contact',\n SNOWFLAKE: 'https://www.snowflake.com',\n SNOWFLAKE_DOCS: 'https://docs.snowflake.com',\n MCP: 'https://www.keboola.com/mcp',\n CLI: 'https://www.keboola.com/cli',\n NODE_JS: 'https://nodejs.org/en',\n CLAUDE_CONNECTORS: 'https://claude.ai/customize/connectors',\n // Vendor \"how do I get this client\" pages linked from the connect surfaces.\n CLIENT_CLAUDE_CODE_QUICKSTART: 'https://code.claude.com/docs/en/quickstart',\n CLIENT_CLAUDE_AI: 'https://claude.ai',\n CLIENT_CLAUDE_DESKTOP_DOWNLOAD: 'https://claude.com/download',\n CLIENT_CURSOR_QUICKSTART: 'https://cursor.com/docs/get-started/quickstart',\n CLIENT_VS_CODE_SETUP: 'https://code.visualstudio.com/docs/setup/setup-overview',\n CLIENT_CODEX_QUICKSTART: 'https://developers.openai.com/codex/cli',\n CLIENT_CHATGPT_DOWNLOAD: 'https://chatgpt.com/download',\n CLIENT_MAKE_GET_STARTED: 'https://help.make.com/get-started',\n CLIENT_DEVIN_DESKTOP: 'https://docs.devin.ai/desktop/getting-started',\n} as const;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["isAdminOrShare","PermissionDeniedError"],"sources":["../../../src/domain/permissions/organization.ts"],"sourcesContent":["/**\n * @module domain/permissions/organization\n *\n * Organization-scope predicates, read from `admin.isOrganizationMember`, not the project role.\n * - In Keboola, org membership is org administration of every project the org owns.\n * - `isOrganizationMember` is a raw signal; nothing asserts on bare membership.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdminOrShare } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Whether this token's admin is a member of the organization owning the project.\n *\n * - A limited token has no `admin` block despite the type saying required.\n * - Prefer `isOrganizationAdmin` for authorization decisions.\n */\nexport const isOrganizationMember = (token: StorageToken): boolean =>\n token.isMasterToken && (token.admin?.isOrganizationMember ?? false);\n\n/**\n * `isOrganizationMember` AND `admin`/`share`.\n *\n * - An org member with a `readOnly` or `guest` role on this project still cannot write.\n */\nexport const isOrganizationAdmin = (token: StorageToken): boolean =>\n isOrganizationMember(token) && isAdminOrShare(token);\n\nexport const assertCanAdministerOrganization = (token: StorageToken): void => {\n if (!isOrganizationAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'administer-organization',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' with isOrganizationMember=${token.admin?.isOrganizationMember ?? false} may not administer organization settings`\n : 'a limited (non-master) token may not administer organization settings',\n });\n }\n};\n\n/**\n * Whether this token may write Kai's spend caps: project cap, default and per-user limits.\n *\n * - Org-admin only, stricter than `canWriteKaiSettings`: caps commit the org's money.\n * - A project whose own admin could raise its cap has no cap.\n */\nexport const canWriteKaiSpendCaps = (token: StorageToken): boolean => isOrganizationAdmin(token);\n\nexport const assertCanWriteKaiSpendCaps = (token: StorageToken): void => {\n if (!canWriteKaiSpendCaps(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-spend-caps',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' with isOrganizationMember=${token.admin?.isOrganizationMember ?? false} may not change Kai spend caps`\n : 'a limited (non-master) token may not change Kai spend caps',\n });\n }\n};\n"],"mappings":";;;;;;;;;;AAkBA,MAAa,wBAAwB,UACnC,MAAM,kBAAkB,MAAM,OAAO,wBAAwB;;;;;;AAO/D,MAAa,uBAAuB,UAClC,qBAAqB,KAAK,KAAKA,uBAAAA,eAAe,KAAK;AAErD,MAAa,mCAAmC,UAA8B;CAC5E,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAIC,uBAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,8BAA8B,MAAM,OAAO,wBAAwB,MAAM,6CAC9G;CACN,CAAC;AAEL;;;;;;;AAQA,MAAa,wBAAwB,UAAiC,oBAAoB,KAAK;AAE/F,MAAa,8BAA8B,UAA8B;CACvE,IAAI,CAAC,qBAAqB,KAAK,GAC7B,MAAM,IAAIA,uBAAAA,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,8BAA8B,MAAM,OAAO,wBAAwB,MAAM,kCAC9G;CACN,CAAC;AAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/domain/permissions/organization.ts"],"sourcesContent":["/**\n * @module domain/permissions/organization\n *\n * Organization-scope predicates, read from `admin.isOrganizationMember`, not the project role.\n * - In Keboola, org membership is org administration of every project the org owns.\n * - `isOrganizationMember` is a raw signal; nothing asserts on bare membership.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdminOrShare } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Whether this token's admin is a member of the organization owning the project.\n *\n * - A limited token has no `admin` block despite the type saying required.\n * - Prefer `isOrganizationAdmin` for authorization decisions.\n */\nexport const isOrganizationMember = (token: StorageToken): boolean =>\n token.isMasterToken && (token.admin?.isOrganizationMember ?? false);\n\n/**\n * `isOrganizationMember` AND `admin`/`share`.\n *\n * - An org member with a `readOnly` or `guest` role on this project still cannot write.\n */\nexport const isOrganizationAdmin = (token: StorageToken): boolean =>\n isOrganizationMember(token) && isAdminOrShare(token);\n\nexport const assertCanAdministerOrganization = (token: StorageToken): void => {\n if (!isOrganizationAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'administer-organization',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' with isOrganizationMember=${token.admin?.isOrganizationMember ?? false} may not administer organization settings`\n : 'a limited (non-master) token may not administer organization settings',\n });\n }\n};\n\n/**\n * Whether this token may write Kai's spend caps: project cap, default and per-user limits.\n *\n * - Org-admin only, stricter than `canWriteKaiSettings`: caps commit the org's money.\n * - A project whose own admin could raise its cap has no cap.\n */\nexport const canWriteKaiSpendCaps = (token: StorageToken): boolean => isOrganizationAdmin(token);\n\nexport const assertCanWriteKaiSpendCaps = (token: StorageToken): void => {\n if (!canWriteKaiSpendCaps(token)) {\n throw new PermissionDeniedError({\n action: 'write-kai-spend-caps',\n reason: token.isMasterToken\n ? `role '${token.admin?.role ?? 'none'}' with isOrganizationMember=${token.admin?.isOrganizationMember ?? false} may not change Kai spend caps`\n : 'a limited (non-master) token may not change Kai spend caps',\n });\n }\n};\n"],"mappings":";;;;;;;;;AAkBA,MAAa,wBAAwB,UACnC,MAAM,kBAAkB,MAAM,OAAO,wBAAwB;;;;;;AAO/D,MAAa,uBAAuB,UAClC,qBAAqB,KAAK,KAAK,eAAe,KAAK;AAErD,MAAa,mCAAmC,UAA8B;CAC5E,IAAI,CAAC,oBAAoB,KAAK,GAC5B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,8BAA8B,MAAM,OAAO,wBAAwB,MAAM,6CAC9G;CACN,CAAC;AAEL;;;;;;;AAQA,MAAa,wBAAwB,UAAiC,oBAAoB,KAAK;AAE/F,MAAa,8BAA8B,UAA8B;CACvE,IAAI,CAAC,qBAAqB,KAAK,GAC7B,MAAM,IAAI,sBAAsB;EAC9B,QAAQ;EACR,QAAQ,MAAM,gBACV,SAAS,MAAM,OAAO,QAAQ,OAAO,8BAA8B,MAAM,OAAO,wBAAwB,MAAM,kCAC9G;CACN,CAAC;AAEL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kaiAgent-BmfUG8bB.cjs","names":["z","createAuthHeaders","createOpenapiFetchClient","createGenericFetchClient","isApiError","HttpStatus"],"sources":["../src/clients/kaiAgent/kaiAgentClient.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { createGenericFetchClient, createOpenapiFetchClient, isApiError } from '../../fetchClient';\nimport { HttpStatus } from '../../internal';\nimport { createAuthHeaders } from '../auth';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ProjectToolPolicy, ProjectToolPolicyValue } from '../chat/types';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ArtifactListResponse,\n ArtifactResponse,\n ChatRequest,\n GetArtifactPath,\n GetArtifactsQuery,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n PrepareChatRequest,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst projectToolPolicyValueSchema: z.ZodType<ProjectToolPolicyValue> = z.enum([\n 'blocked',\n 'always_ask',\n]);\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), projectToolPolicyValueSchema).nullable().optional(),\n canWriteToolPolicy: z.boolean().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n projectToolPermissions: z.record(z.string(), projectToolPolicyValueSchema).nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst userMemoriesSchema = z.object({\n memories: z.array(z.object({ id: z.string(), content: z.string(), createdAt: z.string() })),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\n// `userId` only: kai-agent cannot resolve project members. Join it against\n// `api.management.projects.getProjectUsers`.\nconst spendCapMemberSchema = z.object({\n userId: z.string(),\n overrideLimitPpu: z.number().nullable(),\n effectiveLimitPpu: z.number().nullable(),\n usedPpu: z.number(),\n overrideUpdatedAt: z.string().nullable(),\n overrideUpdatedByUserId: z.string().nullable(),\n});\n\nconst spendCapsViewSchema = z.object({\n // `null` = no configured cap, not unlimited — see `effectiveProjectCapPpu`.\n projectCapPpu: z.number().nullable(),\n // The enforced cap (`projectCapPpu` or kai-agent's DEFAULT_PROJECT_CAP_PPU).\n // Render this; `projectCapPpu` only tells configured from default.\n effectiveProjectCapPpu: z.number(),\n // Platform default regardless of what's saved; validates a cleared-but-unsaved field.\n // Optional on the wire (rollout skew); `withDefaultProjectCap` fills it in.\n defaultProjectCapPpu: z.number().optional(),\n defaultUserLimitPpu: z.number().nullable(),\n projectUsedPpu: z.number(),\n canWrite: z.boolean(),\n members: z.array(spendCapMemberSchema),\n updatedAt: z.string().nullable(),\n updatedByUserId: z.string().nullable(),\n});\n\nconst votesResponseSchema = z.array(\n z.object({\n chatId: z.string(),\n messageId: z.string(),\n isUpvoted: z.boolean(),\n }),\n);\n\nexport type SpendCapMember = z.infer<typeof spendCapMemberSchema>;\n// `defaultProjectCapPpu` is always present here — `getSpendCaps`/`updateSpendCaps` fill it in.\nexport type SpendCapsView = Omit<z.infer<typeof spendCapsViewSchema>, 'defaultProjectCapPpu'> & {\n defaultProjectCapPpu: number;\n};\nexport type AgentSettings = z.infer<typeof agentSettingsSchema>;\nexport type UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\nexport type UserMemory = z.infer<typeof userMemoriesSchema>['memories'][number];\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\ntype VotesResponse = z.infer<typeof votesResponseSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\ntype UpdateSpendCapsRequest = {\n projectCapPpu?: number | null;\n defaultUserLimitPpu?: number | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/api/history', { query: params }, { signal });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']): Promise<VotesResponse> => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n\n const result = votesResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid votes response format');\n }\n\n return result.data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n /**\n * Every artifact a chat produced, oldest first.\n *\n * - Read-only by design: artifacts are derived server-side at the end of a turn, so there is\n * no write route to pair with this.\n * - The chat is the authorization — a chat the caller cannot read has no artifacts.\n */\n const getArtifacts = async (\n chatId: GetArtifactsQuery['chatId'],\n signal?: AbortSignal,\n ): Promise<ArtifactListResponse> => {\n const { data } = await client.get('/api/artifacts', { query: { chatId } }, { signal });\n return data;\n };\n\n const getArtifact = async (\n artifactId: GetArtifactPath['id'],\n signal?: AbortSignal,\n ): Promise<ArtifactResponse> => {\n const { data } = await client.get(\n '/api/artifacts/{id}',\n { path: { id: artifactId } },\n {\n signal,\n },\n );\n return data;\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n // `freeAllowance` is ahead of the generated schema — a guard turns a missing field into `null`.\n const parsed = z\n .object({\n freeAllowance: z\n .object({ grantedPpu: z.number(), remainingPpu: z.number() })\n .nullable()\n .optional(),\n })\n .safeParse(data);\n const freeAllowance = parsed.success ? (parsed.data.freeAllowance ?? null) : null;\n return { ...data, freeAllowance };\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n /**\n * Ask the engine to build this chat's sandbox before a turn needs one.\n *\n * - The work continues after the response.\n * - A host that does not pre-warm answers 404, returned as `{ started: false }`.\n */\n const prepareChat = async (\n chatId: string,\n signal?: AbortSignal,\n body: PrepareChatRequest = {},\n ): Promise<{ started: boolean }> => {\n try {\n const { data } = await client.post(\n '/api/chat/{id}/prepare',\n { path: { id: chatId }, body },\n { signal },\n );\n return data;\n } catch (error) {\n // 404 = pre-warm not supported here.\n if (isApiError(error) && error.response.status === HttpStatus.NOT_FOUND) {\n return { started: false };\n }\n throw error;\n }\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateProjectToolPolicy = async (\n toolPermissions: ProjectToolPolicy,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.put<AgentSettings>(\n '/api/settings/tool-permissions',\n { body: { toolPermissions } },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n // Not in `__generated__/schema` yet, hence `genericClient` + zod, like the spend caps below.\n const getUserMemories = async (signal?: AbortSignal): Promise<UserMemory[]> => {\n const { data } = await genericClient.get('/api/settings/user/memories', {}, { signal });\n const result = userMemoriesSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user memories response format');\n }\n return result.data.memories;\n };\n\n const deleteUserMemory = async (memoryId: string, signal?: AbortSignal): Promise<void> => {\n await genericClient.delete(\n `/api/settings/user/memories/${encodeURIComponent(memoryId)}`,\n {},\n { signal },\n );\n };\n\n // An older kai-agent omits `defaultProjectCapPpu`; fall back rather than throw.\n const withDefaultProjectCap = (view: z.infer<typeof spendCapsViewSchema>): SpendCapsView => ({\n ...view,\n defaultProjectCapPpu: view.defaultProjectCapPpu ?? view.effectiveProjectCapPpu,\n });\n\n // Not in `__generated__/schema` yet (see docs/regenerate-api-types.md), hence `genericClient`\n // + zod. Switch to `client.get('/api/settings/spend-caps')` once it regenerates.\n const getSpendCaps = async (signal?: AbortSignal): Promise<SpendCapsView> => {\n const { data } = await genericClient.get<SpendCapsView>(\n '/api/settings/spend-caps',\n {},\n { signal },\n );\n const result = spendCapsViewSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend caps response format');\n }\n return withDefaultProjectCap(result.data);\n };\n\n const updateSpendCaps = async (\n request: UpdateSpendCapsRequest,\n signal?: AbortSignal,\n ): Promise<SpendCapsView> => {\n const { data } = await genericClient.patch<SpendCapsView>(\n '/api/settings/spend-caps',\n { body: request },\n { signal },\n );\n const result = spendCapsViewSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend caps response format');\n }\n return withDefaultProjectCap(result.data);\n };\n\n const setUserSpendLimit = async (\n userId: string,\n overrideLimitPpu: number | null,\n signal?: AbortSignal,\n ): Promise<SpendCapMember> => {\n const { data } = await genericClient.put<SpendCapMember>(\n `/api/settings/spend-caps/users/${encodeURIComponent(userId)}`,\n { body: { overrideLimitPpu } },\n { signal },\n );\n const result = spendCapMemberSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend cap member response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const downloadSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<Blob> => {\n // `parseData` returns a declared octet-stream body as a Blob, bytes intact.\n const { data } = await genericClient.get<Blob>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file/download`,\n { query: { path } },\n { signal },\n );\n if (!(data instanceof Blob)) {\n throw new Error('Invalid sandbox file download response format');\n }\n return data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n // `/health`, not `/ping`: it returns `{\"status\":\"ok\"}` like other services, not a timestamp.\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n getArtifacts,\n getArtifact,\n approveToolCall,\n submitToolOutput,\n stopChat,\n prepareChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n updateProjectToolPolicy,\n getUserAgentSettings,\n updateUserAgentSettings,\n getUserMemories,\n deleteUserMemory,\n getSpendCaps,\n updateSpendCaps,\n setUserSpendLimit,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n downloadSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kaiAgent-CBPbMwBh.js","names":[],"sources":["../src/clients/kaiAgent/kaiAgentClient.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { createGenericFetchClient, createOpenapiFetchClient, isApiError } from '../../fetchClient';\nimport { HttpStatus } from '../../internal';\nimport { createAuthHeaders } from '../auth';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ProjectToolPolicy, ProjectToolPolicyValue } from '../chat/types';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ArtifactListResponse,\n ArtifactResponse,\n ChatRequest,\n GetArtifactPath,\n GetArtifactsQuery,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n PrepareChatRequest,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst projectToolPolicyValueSchema: z.ZodType<ProjectToolPolicyValue> = z.enum([\n 'blocked',\n 'always_ask',\n]);\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), projectToolPolicyValueSchema).nullable().optional(),\n canWriteToolPolicy: z.boolean().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n projectToolPermissions: z.record(z.string(), projectToolPolicyValueSchema).nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst userMemoriesSchema = z.object({\n memories: z.array(z.object({ id: z.string(), content: z.string(), createdAt: z.string() })),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\n// `userId` only: kai-agent cannot resolve project members. Join it against\n// `api.management.projects.getProjectUsers`.\nconst spendCapMemberSchema = z.object({\n userId: z.string(),\n overrideLimitPpu: z.number().nullable(),\n effectiveLimitPpu: z.number().nullable(),\n usedPpu: z.number(),\n overrideUpdatedAt: z.string().nullable(),\n overrideUpdatedByUserId: z.string().nullable(),\n});\n\nconst spendCapsViewSchema = z.object({\n // `null` = no configured cap, not unlimited — see `effectiveProjectCapPpu`.\n projectCapPpu: z.number().nullable(),\n // The enforced cap (`projectCapPpu` or kai-agent's DEFAULT_PROJECT_CAP_PPU).\n // Render this; `projectCapPpu` only tells configured from default.\n effectiveProjectCapPpu: z.number(),\n // Platform default regardless of what's saved; validates a cleared-but-unsaved field.\n // Optional on the wire (rollout skew); `withDefaultProjectCap` fills it in.\n defaultProjectCapPpu: z.number().optional(),\n defaultUserLimitPpu: z.number().nullable(),\n projectUsedPpu: z.number(),\n canWrite: z.boolean(),\n members: z.array(spendCapMemberSchema),\n updatedAt: z.string().nullable(),\n updatedByUserId: z.string().nullable(),\n});\n\nconst votesResponseSchema = z.array(\n z.object({\n chatId: z.string(),\n messageId: z.string(),\n isUpvoted: z.boolean(),\n }),\n);\n\nexport type SpendCapMember = z.infer<typeof spendCapMemberSchema>;\n// `defaultProjectCapPpu` is always present here — `getSpendCaps`/`updateSpendCaps` fill it in.\nexport type SpendCapsView = Omit<z.infer<typeof spendCapsViewSchema>, 'defaultProjectCapPpu'> & {\n defaultProjectCapPpu: number;\n};\nexport type AgentSettings = z.infer<typeof agentSettingsSchema>;\nexport type UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\nexport type UserMemory = z.infer<typeof userMemoriesSchema>['memories'][number];\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\ntype VotesResponse = z.infer<typeof votesResponseSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\ntype UpdateSpendCapsRequest = {\n projectCapPpu?: number | null;\n defaultUserLimitPpu?: number | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/api/history', { query: params }, { signal });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']): Promise<VotesResponse> => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n\n const result = votesResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid votes response format');\n }\n\n return result.data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n /**\n * Every artifact a chat produced, oldest first.\n *\n * - Read-only by design: artifacts are derived server-side at the end of a turn, so there is\n * no write route to pair with this.\n * - The chat is the authorization — a chat the caller cannot read has no artifacts.\n */\n const getArtifacts = async (\n chatId: GetArtifactsQuery['chatId'],\n signal?: AbortSignal,\n ): Promise<ArtifactListResponse> => {\n const { data } = await client.get('/api/artifacts', { query: { chatId } }, { signal });\n return data;\n };\n\n const getArtifact = async (\n artifactId: GetArtifactPath['id'],\n signal?: AbortSignal,\n ): Promise<ArtifactResponse> => {\n const { data } = await client.get(\n '/api/artifacts/{id}',\n { path: { id: artifactId } },\n {\n signal,\n },\n );\n return data;\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n // `freeAllowance` is ahead of the generated schema — a guard turns a missing field into `null`.\n const parsed = z\n .object({\n freeAllowance: z\n .object({ grantedPpu: z.number(), remainingPpu: z.number() })\n .nullable()\n .optional(),\n })\n .safeParse(data);\n const freeAllowance = parsed.success ? (parsed.data.freeAllowance ?? null) : null;\n return { ...data, freeAllowance };\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n /**\n * Ask the engine to build this chat's sandbox before a turn needs one.\n *\n * - The work continues after the response.\n * - A host that does not pre-warm answers 404, returned as `{ started: false }`.\n */\n const prepareChat = async (\n chatId: string,\n signal?: AbortSignal,\n body: PrepareChatRequest = {},\n ): Promise<{ started: boolean }> => {\n try {\n const { data } = await client.post(\n '/api/chat/{id}/prepare',\n { path: { id: chatId }, body },\n { signal },\n );\n return data;\n } catch (error) {\n // 404 = pre-warm not supported here.\n if (isApiError(error) && error.response.status === HttpStatus.NOT_FOUND) {\n return { started: false };\n }\n throw error;\n }\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateProjectToolPolicy = async (\n toolPermissions: ProjectToolPolicy,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.put<AgentSettings>(\n '/api/settings/tool-permissions',\n { body: { toolPermissions } },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n // Not in `__generated__/schema` yet, hence `genericClient` + zod, like the spend caps below.\n const getUserMemories = async (signal?: AbortSignal): Promise<UserMemory[]> => {\n const { data } = await genericClient.get('/api/settings/user/memories', {}, { signal });\n const result = userMemoriesSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user memories response format');\n }\n return result.data.memories;\n };\n\n const deleteUserMemory = async (memoryId: string, signal?: AbortSignal): Promise<void> => {\n await genericClient.delete(\n `/api/settings/user/memories/${encodeURIComponent(memoryId)}`,\n {},\n { signal },\n );\n };\n\n // An older kai-agent omits `defaultProjectCapPpu`; fall back rather than throw.\n const withDefaultProjectCap = (view: z.infer<typeof spendCapsViewSchema>): SpendCapsView => ({\n ...view,\n defaultProjectCapPpu: view.defaultProjectCapPpu ?? view.effectiveProjectCapPpu,\n });\n\n // Not in `__generated__/schema` yet (see docs/regenerate-api-types.md), hence `genericClient`\n // + zod. Switch to `client.get('/api/settings/spend-caps')` once it regenerates.\n const getSpendCaps = async (signal?: AbortSignal): Promise<SpendCapsView> => {\n const { data } = await genericClient.get<SpendCapsView>(\n '/api/settings/spend-caps',\n {},\n { signal },\n );\n const result = spendCapsViewSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend caps response format');\n }\n return withDefaultProjectCap(result.data);\n };\n\n const updateSpendCaps = async (\n request: UpdateSpendCapsRequest,\n signal?: AbortSignal,\n ): Promise<SpendCapsView> => {\n const { data } = await genericClient.patch<SpendCapsView>(\n '/api/settings/spend-caps',\n { body: request },\n { signal },\n );\n const result = spendCapsViewSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend caps response format');\n }\n return withDefaultProjectCap(result.data);\n };\n\n const setUserSpendLimit = async (\n userId: string,\n overrideLimitPpu: number | null,\n signal?: AbortSignal,\n ): Promise<SpendCapMember> => {\n const { data } = await genericClient.put<SpendCapMember>(\n `/api/settings/spend-caps/users/${encodeURIComponent(userId)}`,\n { body: { overrideLimitPpu } },\n { signal },\n );\n const result = spendCapMemberSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid spend cap member response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const downloadSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<Blob> => {\n // `parseData` returns a declared octet-stream body as a Blob, bytes intact.\n const { data } = await genericClient.get<Blob>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file/download`,\n { query: { path } },\n { signal },\n );\n if (!(data instanceof Blob)) {\n throw new Error('Invalid sandbox file download response format');\n }\n return data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n // `/health`, not `/ping`: it returns `{\"status\":\"ok\"}` like other services, not a timestamp.\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n getArtifacts,\n getArtifact,\n approveToolCall,\n submitToolOutput,\n stopChat,\n prepareChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n updateProjectToolPolicy,\n getUserAgentSettings,\n updateUserAgentSettings,\n getUserMemories,\n deleteUserMemory,\n getSpendCaps,\n updateSpendCaps,\n setUserSpendLimit,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n downloadSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n"],"mappings":"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"}
|