@keboola/api-client 20.0.0 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API-SURFACE.md +26 -3
- package/README.md +124 -24
- package/dist/{ManagementClientAuthError-BMOhz4mx.d.ts → ManagementClientAuthError-B3PZRWBU.d.ts} +1 -1
- package/dist/{ManagementClientAuthError-B7mGrnGn.d.cts → ManagementClientAuthError-CJu_hpGi.d.cts} +1 -1
- package/dist/ai/index.cjs +3 -3
- package/dist/ai/index.d.cts +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.js +2 -2
- package/dist/assets/index.d.cts +1 -1
- package/dist/assets/index.d.ts +1 -1
- package/dist/auth/index.cjs +9 -9
- package/dist/auth/index.d.cts +81 -9
- package/dist/auth/index.d.ts +81 -9
- package/dist/auth/index.js +1 -1
- package/dist/auth/types.d.cts +2 -2
- package/dist/auth/types.d.ts +2 -2
- package/dist/chat/index.cjs +3 -3
- package/dist/chat/index.d.cts +1 -1
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +2 -2
- package/dist/chat/suggestions.d.cts +11 -11
- package/dist/chat/suggestions.d.ts +11 -11
- package/dist/{chunk-7ETZQGY7.js → chunk-2BOG5U7C.js} +3 -3
- package/dist/{chunk-7ETZQGY7.js.map → chunk-2BOG5U7C.js.map} +1 -1
- package/dist/{chunk-YLHZ2H7O.cjs → chunk-3GTRQFWA.cjs} +4 -4
- package/dist/{chunk-YLHZ2H7O.cjs.map → chunk-3GTRQFWA.cjs.map} +1 -1
- package/dist/{chunk-TTPJSPZA.cjs → chunk-3KEVPUSX.cjs} +10 -3
- package/dist/chunk-3KEVPUSX.cjs.map +1 -0
- package/dist/chunk-4HBUVR57.cjs +155 -0
- package/dist/chunk-4HBUVR57.cjs.map +1 -0
- package/dist/{chunk-YUTWLJBK.js → chunk-4IEIVLYT.js} +55 -5
- package/dist/chunk-4IEIVLYT.js.map +1 -0
- package/dist/{chunk-HEVDH4JQ.js → chunk-4WX5W7YU.js} +3 -3
- package/dist/{chunk-HEVDH4JQ.js.map → chunk-4WX5W7YU.js.map} +1 -1
- package/dist/{chunk-7KMFRSYA.js → chunk-5FDQYOJD.js} +3 -3
- package/dist/{chunk-7KMFRSYA.js.map → chunk-5FDQYOJD.js.map} +1 -1
- package/dist/{chunk-KQ2QNGRX.js → chunk-6BYHD5DG.js} +4 -4
- package/dist/chunk-6BYHD5DG.js.map +1 -0
- package/dist/{chunk-WJRHT346.js → chunk-6JXSO3AR.js} +3 -3
- package/dist/chunk-6JXSO3AR.js.map +1 -0
- package/dist/{chunk-4H2DDEUI.cjs → chunk-AFIQYB2O.cjs} +4 -4
- package/dist/{chunk-4H2DDEUI.cjs.map → chunk-AFIQYB2O.cjs.map} +1 -1
- package/dist/{chunk-IZWNTRMT.cjs → chunk-C5R6ITYD.cjs} +4 -4
- package/dist/{chunk-IZWNTRMT.cjs.map → chunk-C5R6ITYD.cjs.map} +1 -1
- package/dist/{chunk-AWRMGLMT.cjs → chunk-CBVGOANJ.cjs} +4 -4
- package/dist/chunk-CBVGOANJ.cjs.map +1 -0
- package/dist/{chunk-KDWIJTED.js → chunk-CWD66KRM.js} +3 -3
- package/dist/{chunk-KDWIJTED.js.map → chunk-CWD66KRM.js.map} +1 -1
- package/dist/{chunk-XISA4SYM.cjs → chunk-DAAHTUXU.cjs} +4 -4
- package/dist/{chunk-XISA4SYM.cjs.map → chunk-DAAHTUXU.cjs.map} +1 -1
- package/dist/{chunk-JIAMBOU7.cjs → chunk-DAS5UQN6.cjs} +4 -4
- package/dist/{chunk-JIAMBOU7.cjs.map → chunk-DAS5UQN6.cjs.map} +1 -1
- package/dist/{chunk-JURD5MC3.js → chunk-DHOVQ2TW.js} +15 -16
- package/dist/chunk-DHOVQ2TW.js.map +1 -0
- package/dist/{chunk-ISY2BOFY.js → chunk-DJ5LXAG3.js} +3 -3
- package/dist/{chunk-ISY2BOFY.js.map → chunk-DJ5LXAG3.js.map} +1 -1
- package/dist/chunk-EWMXK3EI.cjs +8 -0
- package/dist/chunk-EWMXK3EI.cjs.map +1 -0
- package/dist/{chunk-IWIN6HKU.cjs → chunk-EYIPM2XB.cjs} +4 -4
- package/dist/{chunk-IWIN6HKU.cjs.map → chunk-EYIPM2XB.cjs.map} +1 -1
- package/dist/{chunk-G7VCXMQB.cjs → chunk-FDISA5KO.cjs} +4 -4
- package/dist/{chunk-G7VCXMQB.cjs.map → chunk-FDISA5KO.cjs.map} +1 -1
- package/dist/{chunk-CVV4HROS.cjs → chunk-FMS5PNM2.cjs} +4 -4
- package/dist/chunk-FMS5PNM2.cjs.map +1 -0
- package/dist/{chunk-BR3SBEFE.cjs → chunk-FRLSKIUI.cjs} +19 -21
- package/dist/chunk-FRLSKIUI.cjs.map +1 -0
- package/dist/{chunk-MLCMKHMK.cjs → chunk-HHULC5GT.cjs} +4 -4
- package/dist/{chunk-MLCMKHMK.cjs.map → chunk-HHULC5GT.cjs.map} +1 -1
- package/dist/{chunk-STAQJVW4.cjs → chunk-HJQYMALV.cjs} +4 -4
- package/dist/{chunk-STAQJVW4.cjs.map → chunk-HJQYMALV.cjs.map} +1 -1
- package/dist/{chunk-QQJXXNUE.cjs → chunk-HUNYAVJJ.cjs} +4 -4
- package/dist/{chunk-QQJXXNUE.cjs.map → chunk-HUNYAVJJ.cjs.map} +1 -1
- package/dist/{chunk-6FE3CWV6.js → chunk-IWNJ47CV.js} +3 -3
- package/dist/{chunk-6FE3CWV6.js.map → chunk-IWNJ47CV.js.map} +1 -1
- package/dist/{chunk-4HJUQVXR.js → chunk-KF5EI2IB.js} +6 -7
- package/dist/chunk-KF5EI2IB.js.map +1 -0
- package/dist/{chunk-FPWOK2CR.js → chunk-LFLFNQMQ.js} +3 -3
- package/dist/chunk-LFLFNQMQ.js.map +1 -0
- package/dist/{chunk-ZLW3243Q.cjs → chunk-LGWRJM5X.cjs} +4 -4
- package/dist/chunk-LGWRJM5X.cjs.map +1 -0
- package/dist/chunk-M2LJZXVR.js +152 -0
- package/dist/chunk-M2LJZXVR.js.map +1 -0
- package/dist/{chunk-V4FLCCD4.js → chunk-MUC6XWII.js} +3 -3
- package/dist/{chunk-V4FLCCD4.js.map → chunk-MUC6XWII.js.map} +1 -1
- package/dist/{chunk-RHLDDKX6.js → chunk-NV3P6XBU.js} +98 -29
- package/dist/chunk-NV3P6XBU.js.map +1 -0
- package/dist/{chunk-YOPRPXER.cjs → chunk-NZN6OX4H.cjs} +4 -4
- package/dist/{chunk-YOPRPXER.cjs.map → chunk-NZN6OX4H.cjs.map} +1 -1
- package/dist/{chunk-EKWD4ODT.cjs → chunk-OZMUKLXN.cjs} +4 -4
- package/dist/{chunk-EKWD4ODT.cjs.map → chunk-OZMUKLXN.cjs.map} +1 -1
- package/dist/{chunk-K6E7LOWZ.js → chunk-P6OWDUN7.js} +3 -3
- package/dist/{chunk-K6E7LOWZ.js.map → chunk-P6OWDUN7.js.map} +1 -1
- package/dist/{chunk-PINOAERX.js → chunk-QNDU44PQ.js} +3 -3
- package/dist/{chunk-PINOAERX.js.map → chunk-QNDU44PQ.js.map} +1 -1
- package/dist/{chunk-KLVBTRLR.js → chunk-R2FAPJMZ.js} +84 -12
- package/dist/chunk-R2FAPJMZ.js.map +1 -0
- package/dist/{chunk-AKDJSXVJ.cjs → chunk-RTQEMQIC.cjs} +4 -4
- package/dist/{chunk-AKDJSXVJ.cjs.map → chunk-RTQEMQIC.cjs.map} +1 -1
- package/dist/{chunk-4JCVPUXF.cjs → chunk-S5XEXK36.cjs} +104 -35
- package/dist/chunk-S5XEXK36.cjs.map +1 -0
- package/dist/{chunk-JJXTE2SL.cjs → chunk-SB7AVZQU.cjs} +4 -4
- package/dist/{chunk-JJXTE2SL.cjs.map → chunk-SB7AVZQU.cjs.map} +1 -1
- package/dist/{chunk-EBCZUGUX.js → chunk-SJZ66FD5.js} +4 -4
- package/dist/chunk-SJZ66FD5.js.map +1 -0
- package/dist/chunk-T526LPBK.js +6 -0
- package/dist/chunk-T526LPBK.js.map +1 -0
- package/dist/{chunk-M3UUJIMO.js → chunk-U7CANHDD.js} +3 -3
- package/dist/{chunk-M3UUJIMO.js.map → chunk-U7CANHDD.js.map} +1 -1
- package/dist/{chunk-HNP33VR5.cjs → chunk-UQWVZTEA.cjs} +3 -3
- package/dist/chunk-UQWVZTEA.cjs.map +1 -0
- package/dist/{chunk-YOD5F25S.js → chunk-V6QQZLEU.js} +3 -3
- package/dist/{chunk-YOD5F25S.js.map → chunk-V6QQZLEU.js.map} +1 -1
- package/dist/{chunk-GENABZQ3.js → chunk-VTC3FL4B.js} +3 -3
- package/dist/{chunk-GENABZQ3.js.map → chunk-VTC3FL4B.js.map} +1 -1
- package/dist/{chunk-IBELIKBL.js → chunk-WXGYFLFX.js} +3 -3
- package/dist/{chunk-IBELIKBL.js.map → chunk-WXGYFLFX.js.map} +1 -1
- package/dist/{chunk-ANRUSNYD.cjs → chunk-X6BQTEIT.cjs} +4 -4
- package/dist/{chunk-ANRUSNYD.cjs.map → chunk-X6BQTEIT.cjs.map} +1 -1
- package/dist/{chunk-WFBQUWRC.js → chunk-XMC355U2.js} +10 -3
- package/dist/chunk-XMC355U2.js.map +1 -0
- package/dist/{chunk-N3GNUFMA.cjs → chunk-XPQBE77T.cjs} +6 -7
- package/dist/chunk-XPQBE77T.cjs.map +1 -0
- package/dist/{chunk-SWJHENEP.cjs → chunk-YHMW7CZF.cjs} +84 -11
- package/dist/chunk-YHMW7CZF.cjs.map +1 -0
- package/dist/{chunk-UREIP7XG.js → chunk-YVC4NGW2.js} +3 -3
- package/dist/{chunk-UREIP7XG.js.map → chunk-YVC4NGW2.js.map} +1 -1
- package/dist/{chunk-UFQVOZZ6.cjs → chunk-Z76DIRLA.cjs} +55 -5
- package/dist/chunk-Z76DIRLA.cjs.map +1 -0
- package/dist/{chunk-ZAPK7HZS.js → chunk-ZCODWFCC.js} +3 -3
- package/dist/{chunk-ZAPK7HZS.js.map → chunk-ZCODWFCC.js.map} +1 -1
- package/dist/constants/index.cjs +2 -2
- package/dist/constants/index.d.cts +7 -1
- package/dist/constants/index.d.ts +7 -1
- package/dist/constants/index.js +1 -1
- package/dist/{createGenericFetchClient-D4tfhW6Z.d.ts → createGenericFetchClient-B2Gp1a8f.d.ts} +1 -1
- package/dist/{createGenericFetchClient-CrB9cdk8.d.cts → createGenericFetchClient-DJ-oaxPj.d.cts} +1 -1
- package/dist/{createOpenapiFetchClient-DLA4-_yg.d.ts → createOpenapiFetchClient-BMaILWyq.d.ts} +1 -1
- package/dist/{createOpenapiFetchClient-zK2SckO2.d.cts → createOpenapiFetchClient-DQL2ZYNb.d.cts} +1 -1
- package/dist/dataScience/index.cjs +4 -4
- package/dist/dataScience/index.d.cts +1 -1
- package/dist/dataScience/index.d.ts +1 -1
- package/dist/dataScience/index.js +2 -2
- package/dist/domain/permissions/index.d.cts +3 -3
- package/dist/domain/permissions/index.d.ts +3 -3
- package/dist/editor/index.cjs +3 -3
- package/dist/editor/index.d.cts +1 -1
- package/dist/editor/index.d.ts +1 -1
- package/dist/editor/index.js +2 -2
- package/dist/encryption/index.d.cts +3 -3
- package/dist/encryption/index.d.ts +3 -3
- package/dist/encryption/types.d.cts +2 -2
- package/dist/encryption/types.d.ts +2 -2
- package/dist/import/index.cjs +3 -3
- package/dist/import/index.d.cts +1 -1
- package/dist/import/index.d.ts +1 -1
- package/dist/import/index.js +2 -2
- package/dist/index.cjs +1586 -893
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1410 -1029
- package/dist/index.d.ts +1410 -1029
- package/dist/index.js +1540 -878
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +3 -3
- package/dist/management/index.d.cts +29 -41
- package/dist/management/index.d.ts +29 -41
- package/dist/management/index.js +1 -1
- package/dist/management/types.d.cts +3 -7
- package/dist/management/types.d.ts +3 -7
- package/dist/metastore/index.cjs +3 -3
- package/dist/metastore/index.d.cts +13 -32
- package/dist/metastore/index.d.ts +13 -32
- package/dist/metastore/index.js +2 -2
- package/dist/metastore/types.d.cts +1 -1
- package/dist/metastore/types.d.ts +1 -1
- package/dist/notifications/index.cjs +3 -3
- package/dist/notifications/index.d.cts +1 -1
- package/dist/notifications/index.d.ts +1 -1
- package/dist/notifications/index.js +2 -2
- package/dist/oauth/index.cjs +3 -3
- package/dist/oauth/index.d.cts +1 -1
- package/dist/oauth/index.d.ts +1 -1
- package/dist/oauth/index.js +2 -2
- package/dist/{project-Bj7A_TSe.d.ts → project-BpTHlKfO.d.ts} +2 -2
- package/dist/{project-CX3TEH8A.d.cts → project-DEFMKeAm.d.cts} +2 -2
- package/dist/queryService/index.cjs +3 -3
- package/dist/queryService/index.d.cts +1 -1
- package/dist/queryService/index.d.ts +1 -1
- package/dist/queryService/index.js +2 -2
- package/dist/queue/index.cjs +3 -3
- package/dist/queue/index.d.cts +1 -1
- package/dist/queue/index.d.ts +1 -1
- package/dist/queue/index.js +2 -2
- package/dist/{registry-BLItWxbK.d.ts → registry-v_1krdcs.d.cts} +136 -1
- package/dist/{registry-BLItWxbK.d.cts → registry-v_1krdcs.d.ts} +136 -1
- package/dist/scheduler/index.cjs +3 -3
- package/dist/scheduler/index.d.cts +1 -1
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.js +2 -2
- package/dist/sdk/configurations/index.cjs +3 -3
- package/dist/sdk/configurations/index.d.cts +417 -25
- package/dist/sdk/configurations/index.d.ts +417 -25
- package/dist/sdk/configurations/index.js +2 -2
- package/dist/sdk/semanticLayer/index.cjs +18 -0
- package/dist/sdk/semanticLayer/index.cjs.map +1 -0
- package/dist/sdk/semanticLayer/index.d.cts +36 -0
- package/dist/sdk/semanticLayer/index.d.ts +36 -0
- package/dist/sdk/semanticLayer/index.js +5 -0
- package/dist/sdk/semanticLayer/index.js.map +1 -0
- package/dist/sdk/semanticLayer/types.cjs +4 -0
- package/dist/sdk/semanticLayer/types.cjs.map +1 -0
- package/dist/sdk/semanticLayer/types.d.cts +132 -0
- package/dist/sdk/semanticLayer/types.d.ts +132 -0
- package/dist/sdk/semanticLayer/types.js +3 -0
- package/dist/sdk/semanticLayer/types.js.map +1 -0
- package/dist/sdk/storage/index.cjs +11 -11
- package/dist/sdk/storage/index.d.cts +7 -7
- package/dist/sdk/storage/index.d.ts +7 -7
- package/dist/sdk/storage/index.js +1 -1
- package/dist/sdk/tag/index.cjs +4 -3
- package/dist/sdk/tag/index.d.cts +6 -6
- package/dist/sdk/tag/index.d.ts +6 -6
- package/dist/sdk/tag/index.js +3 -2
- package/dist/sdk/tag/types.d.cts +4 -4
- package/dist/sdk/tag/types.d.ts +4 -4
- package/dist/sdk/vault/index.cjs +8 -8
- package/dist/sdk/vault/index.d.cts +4 -4
- package/dist/sdk/vault/index.d.ts +4 -4
- package/dist/sdk/vault/index.js +2 -2
- package/dist/status/index.d.cts +1 -1
- package/dist/status/index.d.ts +1 -1
- package/dist/storage/index.cjs +5 -5
- package/dist/storage/index.d.cts +7 -7
- package/dist/storage/index.d.ts +7 -7
- package/dist/storage/index.js +3 -3
- package/dist/storage/types.d.cts +58 -5
- package/dist/storage/types.d.ts +58 -5
- package/dist/{storageClient-Cwr5Vl45.d.ts → storageClient-BONJnuhr.d.ts} +14 -7
- package/dist/{storageClient-D1USmiC5.d.cts → storageClient-BxgbulPW.d.cts} +14 -7
- package/dist/{storageSdk-Um7iSJMs.d.ts → storageSdk-CUnp67LN.d.ts} +1 -1
- package/dist/{storageSdk-MciYsR_e.d.cts → storageSdk-uCojVKkr.d.cts} +1 -1
- package/dist/stream/index.cjs +3 -3
- package/dist/stream/index.d.cts +1 -1
- package/dist/stream/index.d.ts +1 -1
- package/dist/stream/index.js +2 -2
- package/dist/syncActions/index.cjs +3 -3
- package/dist/syncActions/index.d.cts +2 -2
- package/dist/syncActions/index.d.ts +2 -2
- package/dist/syncActions/index.js +2 -2
- package/dist/telemetry/index.cjs +3 -3
- package/dist/telemetry/index.d.cts +2 -2
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.js +2 -2
- package/dist/{types-ClxrZC77.d.cts → types-B9SJ0cIc.d.cts} +2677 -813
- package/dist/{types-l_pP5J0H.d.ts → types-BM3xJvzM.d.ts} +1 -1
- package/dist/{types-59-LNg5i.d.cts → types-BjcRP8q1.d.cts} +1 -1
- package/dist/{types-o8eTf_G9.d.ts → types-BogOtZre.d.ts} +2677 -813
- package/dist/{types-DHCbX2uR.d.cts → types-C6gjiVpQ.d.cts} +1 -1
- package/dist/{types-oJnjpvPi.d.ts → types-CbEJaobw.d.ts} +1 -1
- package/dist/{types-YEfQ5pAy.d.cts → types-DJLceKR0.d.cts} +445 -137
- package/dist/{types-YEfQ5pAy.d.ts → types-DJLceKR0.d.ts} +445 -137
- package/dist/{types-BowqtZ7v.d.ts → types-Do0nBZbY.d.ts} +355 -108
- package/dist/{types-0yn6OefX.d.ts → types-DqxZDbM1.d.cts} +1 -1
- package/dist/{types-0yn6OefX.d.cts → types-DqxZDbM1.d.ts} +1 -1
- package/dist/{types-BCPmAXOQ.d.cts → types-VK3k4Z6R.d.cts} +355 -108
- package/dist/vault/index.cjs +3 -3
- package/dist/vault/index.d.cts +1 -1
- package/dist/vault/index.d.ts +1 -1
- package/dist/vault/index.js +2 -2
- package/package.json +28 -2
- package/surface/auth.md +2 -2
- package/surface/chat.md +1 -1
- package/surface/dataScience.md +1 -1
- package/surface/editor.md +5 -5
- package/surface/kaiAgent.md +1 -1
- package/surface/management.md +15 -4
- package/surface/metastore.md +10 -10
- package/surface/queue.md +1 -1
- package/surface/sdk.md +19 -6
- package/surface/storage.md +11 -3
- package/surface/stream.md +7 -7
- package/dist/authMiddleware-BcRYj3eQ.d.cts +0 -5
- package/dist/authMiddleware-CirRGURb.d.ts +0 -5
- package/dist/chunk-4HJUQVXR.js.map +0 -1
- package/dist/chunk-4JCVPUXF.cjs.map +0 -1
- package/dist/chunk-AWRMGLMT.cjs.map +0 -1
- package/dist/chunk-BR3SBEFE.cjs.map +0 -1
- package/dist/chunk-CVV4HROS.cjs.map +0 -1
- package/dist/chunk-EBCZUGUX.js.map +0 -1
- package/dist/chunk-FPWOK2CR.js.map +0 -1
- package/dist/chunk-HNP33VR5.cjs.map +0 -1
- package/dist/chunk-JURD5MC3.js.map +0 -1
- package/dist/chunk-KLVBTRLR.js.map +0 -1
- package/dist/chunk-KQ2QNGRX.js.map +0 -1
- package/dist/chunk-N3GNUFMA.cjs.map +0 -1
- package/dist/chunk-RHLDDKX6.js.map +0 -1
- package/dist/chunk-SWJHENEP.cjs.map +0 -1
- package/dist/chunk-TTPJSPZA.cjs.map +0 -1
- package/dist/chunk-UFQVOZZ6.cjs.map +0 -1
- package/dist/chunk-WFBQUWRC.js.map +0 -1
- package/dist/chunk-WJRHT346.js.map +0 -1
- package/dist/chunk-YUTWLJBK.js.map +0 -1
- package/dist/chunk-ZLW3243Q.cjs.map +0 -1
- package/dist/schemas-CraXbXke.d.cts +0 -74
- package/dist/schemas-CraXbXke.d.ts +0 -74
- package/dist/{backends-Bofq_Nr0.d.cts → adminRoles-Cil1lavB.d.cts} +6 -6
- package/dist/{backends-Bofq_Nr0.d.ts → adminRoles-Cil1lavB.d.ts} +6 -6
package/dist/index.cjs
CHANGED
|
@@ -1,269 +1,62 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkZ76DIRLA_cjs = require('./chunk-Z76DIRLA.cjs');
|
|
4
|
+
var chunkGF4XZK5N_cjs = require('./chunk-GF4XZK5N.cjs');
|
|
3
5
|
var chunkUUY6LQT6_cjs = require('./chunk-UUY6LQT6.cjs');
|
|
4
6
|
var chunk3FZHFTLG_cjs = require('./chunk-3FZHFTLG.cjs');
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
require('./chunk-
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
7
|
+
require('./chunk-3KEVPUSX.cjs');
|
|
8
|
+
var chunkEYIPM2XB_cjs = require('./chunk-EYIPM2XB.cjs');
|
|
9
|
+
var chunkFRLSKIUI_cjs = require('./chunk-FRLSKIUI.cjs');
|
|
10
|
+
var chunk4HBUVR57_cjs = require('./chunk-4HBUVR57.cjs');
|
|
11
|
+
var chunkEWMXK3EI_cjs = require('./chunk-EWMXK3EI.cjs');
|
|
12
|
+
var chunkCBVGOANJ_cjs = require('./chunk-CBVGOANJ.cjs');
|
|
13
|
+
var chunkS5XEXK36_cjs = require('./chunk-S5XEXK36.cjs');
|
|
14
|
+
var chunkFMS5PNM2_cjs = require('./chunk-FMS5PNM2.cjs');
|
|
15
|
+
var chunkOZMUKLXN_cjs = require('./chunk-OZMUKLXN.cjs');
|
|
16
|
+
var chunkHJQYMALV_cjs = require('./chunk-HJQYMALV.cjs');
|
|
17
|
+
var chunkDAAHTUXU_cjs = require('./chunk-DAAHTUXU.cjs');
|
|
18
|
+
var chunkX6BQTEIT_cjs = require('./chunk-X6BQTEIT.cjs');
|
|
17
19
|
var chunkRRC5RKF7_cjs = require('./chunk-RRC5RKF7.cjs');
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
+
var chunkHHULC5GT_cjs = require('./chunk-HHULC5GT.cjs');
|
|
21
|
+
var chunkYHMW7CZF_cjs = require('./chunk-YHMW7CZF.cjs');
|
|
20
22
|
var chunkWWICQYOY_cjs = require('./chunk-WWICQYOY.cjs');
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
23
|
+
var chunkLGWRJM5X_cjs = require('./chunk-LGWRJM5X.cjs');
|
|
24
|
+
var chunkC5R6ITYD_cjs = require('./chunk-C5R6ITYD.cjs');
|
|
25
|
+
var chunkHUNYAVJJ_cjs = require('./chunk-HUNYAVJJ.cjs');
|
|
26
|
+
var chunkFDISA5KO_cjs = require('./chunk-FDISA5KO.cjs');
|
|
27
|
+
var chunk3GTRQFWA_cjs = require('./chunk-3GTRQFWA.cjs');
|
|
28
|
+
var chunkNZN6OX4H_cjs = require('./chunk-NZN6OX4H.cjs');
|
|
29
|
+
var chunkSB7AVZQU_cjs = require('./chunk-SB7AVZQU.cjs');
|
|
30
|
+
var chunkXPQBE77T_cjs = require('./chunk-XPQBE77T.cjs');
|
|
31
|
+
var chunkDAS5UQN6_cjs = require('./chunk-DAS5UQN6.cjs');
|
|
30
32
|
require('./chunk-U5SE6W5M.cjs');
|
|
31
|
-
var
|
|
33
|
+
var chunkAFIQYB2O_cjs = require('./chunk-AFIQYB2O.cjs');
|
|
32
34
|
var chunkMRHQJNWF_cjs = require('./chunk-MRHQJNWF.cjs');
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
+
var chunkRTQEMQIC_cjs = require('./chunk-RTQEMQIC.cjs');
|
|
36
|
+
var chunkUQWVZTEA_cjs = require('./chunk-UQWVZTEA.cjs');
|
|
35
37
|
var chunkNRJTA5P3_cjs = require('./chunk-NRJTA5P3.cjs');
|
|
36
38
|
var chunkIUN2ZSU3_cjs = require('./chunk-IUN2ZSU3.cjs');
|
|
37
|
-
var
|
|
39
|
+
var z2 = require('zod');
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
});
|
|
59
|
-
var toolsListResponseSchema = zod.z.object({
|
|
60
|
-
tools: zod.z.array(toolInfoSchema)
|
|
61
|
-
});
|
|
62
|
-
var skillInfoSchema = zod.z.object({
|
|
63
|
-
name: zod.z.string(),
|
|
64
|
-
description: zod.z.string().nullable(),
|
|
65
|
-
source: zod.z.enum(["first-party", "vendored", "project"])
|
|
66
|
-
});
|
|
67
|
-
var builtInCommandSchema = zod.z.object({
|
|
68
|
-
name: zod.z.string(),
|
|
69
|
-
description: zod.z.string()
|
|
70
|
-
});
|
|
71
|
-
var skillsListResponseSchema = zod.z.object({
|
|
72
|
-
skills: zod.z.array(skillInfoSchema),
|
|
73
|
-
commands: zod.z.array(builtInCommandSchema)
|
|
74
|
-
});
|
|
75
|
-
var sandboxFileEntrySchema = zod.z.object({
|
|
76
|
-
name: zod.z.string(),
|
|
77
|
-
path: zod.z.string(),
|
|
78
|
-
type: zod.z.enum(["file", "dir"]),
|
|
79
|
-
size: zod.z.number().int().nonnegative().optional()
|
|
80
|
-
});
|
|
81
|
-
var sandboxFileListingSchema = zod.z.object({
|
|
82
|
-
entries: zod.z.array(sandboxFileEntrySchema)
|
|
83
|
-
});
|
|
84
|
-
var sandboxFileContentSchema = zod.z.object({
|
|
85
|
-
content: zod.z.string(),
|
|
86
|
-
encoding: zod.z.enum(["utf-8", "binary"]),
|
|
87
|
-
truncated: zod.z.boolean(),
|
|
88
|
-
size: zod.z.number().int().nonnegative()
|
|
89
|
-
});
|
|
90
|
-
var sandboxGitBranchSchema = zod.z.object({
|
|
91
|
-
branch: zod.z.string().nullable()
|
|
92
|
-
});
|
|
93
|
-
var createKaiAgentClient = ({ baseUrl, middlewares, auth }) => {
|
|
94
|
-
const clientOptions = {
|
|
95
|
-
baseUrl,
|
|
96
|
-
middlewares,
|
|
97
|
-
headers: chunkHNP33VR5_cjs.createAuthHeaders(auth)
|
|
98
|
-
};
|
|
99
|
-
const client = chunkIUN2ZSU3_cjs.createOpenapiFetchClient(clientOptions);
|
|
100
|
-
const genericClient = chunkIUN2ZSU3_cjs.createGenericFetchClient(clientOptions);
|
|
101
|
-
const getHistory = async (params) => {
|
|
102
|
-
const { data } = await client.get("/api/history", { query: params });
|
|
103
|
-
return data;
|
|
104
|
-
};
|
|
105
|
-
const getChat = async (chatId, signal) => {
|
|
106
|
-
const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
|
|
107
|
-
return data;
|
|
108
|
-
};
|
|
109
|
-
const deleteChat = async (chatId) => {
|
|
110
|
-
const { data } = await client.delete("/api/chat", { query: { id: chatId } });
|
|
111
|
-
return data;
|
|
112
|
-
};
|
|
113
|
-
const createChat = async (request) => {
|
|
114
|
-
const { response } = await client.post("/api/chat", { body: request });
|
|
115
|
-
return response;
|
|
116
|
-
};
|
|
117
|
-
const getVotes = async (chatId) => {
|
|
118
|
-
const { data } = await client.get("/api/vote", { query: { chatId } });
|
|
119
|
-
return data;
|
|
120
|
-
};
|
|
121
|
-
const submitVote = async (params) => {
|
|
122
|
-
await client.patch("/api/vote", { body: params });
|
|
123
|
-
};
|
|
124
|
-
const getUsage = async (signal) => {
|
|
125
|
-
const { data } = await client.get("/api/usage", {}, { signal });
|
|
126
|
-
return data;
|
|
127
|
-
};
|
|
128
|
-
const approveToolCall = async (chatId, body) => {
|
|
129
|
-
await client.post("/api/chat/{id}/approval", { path: { id: chatId }, body });
|
|
130
|
-
};
|
|
131
|
-
const submitToolOutput = async (chatId, body) => {
|
|
132
|
-
await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
|
|
133
|
-
};
|
|
134
|
-
const stopChat = async (chatId) => {
|
|
135
|
-
const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
|
|
136
|
-
return data;
|
|
137
|
-
};
|
|
138
|
-
const getSuggestions = async (request, signal) => {
|
|
139
|
-
const { data } = await client.post("/api/suggestions", { body: request }, { signal });
|
|
140
|
-
return data;
|
|
141
|
-
};
|
|
142
|
-
const getAgentSettings = async (signal) => {
|
|
143
|
-
const { data } = await genericClient.get("/api/settings", {}, { signal });
|
|
144
|
-
const result = agentSettingsSchema.safeParse(data);
|
|
145
|
-
if (!result.success) {
|
|
146
|
-
throw new Error("Invalid agent settings response format");
|
|
147
|
-
}
|
|
148
|
-
return result.data;
|
|
149
|
-
};
|
|
150
|
-
const updateAgentSettings = async (request, signal) => {
|
|
151
|
-
const { data } = await genericClient.patch(
|
|
152
|
-
"/api/settings",
|
|
153
|
-
{ body: request },
|
|
154
|
-
{ signal }
|
|
155
|
-
);
|
|
156
|
-
const result = agentSettingsSchema.safeParse(data);
|
|
157
|
-
if (!result.success) {
|
|
158
|
-
throw new Error("Invalid agent settings response format");
|
|
159
|
-
}
|
|
160
|
-
return result.data;
|
|
161
|
-
};
|
|
162
|
-
const getUserAgentSettings = async (signal) => {
|
|
163
|
-
const { data } = await genericClient.get(
|
|
164
|
-
"/api/settings/user",
|
|
165
|
-
{},
|
|
166
|
-
{ signal }
|
|
167
|
-
);
|
|
168
|
-
const result = userAgentSettingsSchema.safeParse(data);
|
|
169
|
-
if (!result.success) {
|
|
170
|
-
throw new Error("Invalid user agent settings response format");
|
|
171
|
-
}
|
|
172
|
-
return result.data;
|
|
173
|
-
};
|
|
174
|
-
const updateUserAgentSettings = async (request, signal) => {
|
|
175
|
-
const { data } = await genericClient.patch(
|
|
176
|
-
"/api/settings/user",
|
|
177
|
-
{ body: request },
|
|
178
|
-
{ signal }
|
|
179
|
-
);
|
|
180
|
-
const result = userAgentSettingsSchema.safeParse(data);
|
|
181
|
-
if (!result.success) {
|
|
182
|
-
throw new Error("Invalid user agent settings response format");
|
|
183
|
-
}
|
|
184
|
-
return result.data;
|
|
185
|
-
};
|
|
186
|
-
const getToolsList = async (signal) => {
|
|
187
|
-
const { data } = await genericClient.get(
|
|
188
|
-
"/api/settings/tools",
|
|
189
|
-
{},
|
|
190
|
-
{ signal }
|
|
191
|
-
);
|
|
192
|
-
const result = toolsListResponseSchema.safeParse(data);
|
|
193
|
-
if (!result.success) {
|
|
194
|
-
throw new Error("Invalid tools list response format");
|
|
195
|
-
}
|
|
196
|
-
return result.data;
|
|
197
|
-
};
|
|
198
|
-
const getSkillsList = async (signal) => {
|
|
199
|
-
const { data } = await genericClient.get("/api/skills", {}, { signal });
|
|
200
|
-
const result = skillsListResponseSchema.safeParse(data);
|
|
201
|
-
if (!result.success) {
|
|
202
|
-
throw new Error("Invalid skills list response format");
|
|
203
|
-
}
|
|
204
|
-
return result.data;
|
|
205
|
-
};
|
|
206
|
-
const listSandboxFiles = async (chatId, path, signal) => {
|
|
207
|
-
const { data } = await genericClient.get(
|
|
208
|
-
`/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,
|
|
209
|
-
{ query: path ? { path } : void 0 },
|
|
210
|
-
{ signal }
|
|
211
|
-
);
|
|
212
|
-
const result = sandboxFileListingSchema.safeParse(data);
|
|
213
|
-
if (!result.success) {
|
|
214
|
-
throw new Error("Invalid sandbox files response format");
|
|
215
|
-
}
|
|
216
|
-
return result.data;
|
|
217
|
-
};
|
|
218
|
-
const readSandboxFile = async (chatId, path, signal) => {
|
|
219
|
-
const { data } = await genericClient.get(
|
|
220
|
-
`/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,
|
|
221
|
-
{ query: { path } },
|
|
222
|
-
{ signal }
|
|
223
|
-
);
|
|
224
|
-
const result = sandboxFileContentSchema.safeParse(data);
|
|
225
|
-
if (!result.success) {
|
|
226
|
-
throw new Error("Invalid sandbox file response format");
|
|
227
|
-
}
|
|
228
|
-
return result.data;
|
|
229
|
-
};
|
|
230
|
-
const getSandboxGitBranch = async (chatId, signal) => {
|
|
231
|
-
const { data } = await genericClient.get(
|
|
232
|
-
`/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,
|
|
233
|
-
{},
|
|
234
|
-
{ signal }
|
|
235
|
-
);
|
|
236
|
-
const result = sandboxGitBranchSchema.safeParse(data);
|
|
237
|
-
if (!result.success) {
|
|
238
|
-
throw new Error("Invalid sandbox git-branch response format");
|
|
239
|
-
}
|
|
240
|
-
return result.data;
|
|
241
|
-
};
|
|
242
|
-
const chatStreamUrl = clientOptions.baseUrl + "/api/chat";
|
|
243
|
-
return {
|
|
244
|
-
getHistory,
|
|
245
|
-
getChat,
|
|
246
|
-
deleteChat,
|
|
247
|
-
createChat,
|
|
248
|
-
getVotes,
|
|
249
|
-
submitVote,
|
|
250
|
-
getUsage,
|
|
251
|
-
approveToolCall,
|
|
252
|
-
submitToolOutput,
|
|
253
|
-
stopChat,
|
|
254
|
-
getSuggestions,
|
|
255
|
-
getAgentSettings,
|
|
256
|
-
updateAgentSettings,
|
|
257
|
-
getUserAgentSettings,
|
|
258
|
-
updateUserAgentSettings,
|
|
259
|
-
getToolsList,
|
|
260
|
-
getSkillsList,
|
|
261
|
-
listSandboxFiles,
|
|
262
|
-
readSandboxFile,
|
|
263
|
-
getSandboxGitBranch,
|
|
264
|
-
chatStreamUrl
|
|
265
|
-
};
|
|
266
|
-
};
|
|
41
|
+
function _interopNamespace(e) {
|
|
42
|
+
if (e && e.__esModule) return e;
|
|
43
|
+
var n = Object.create(null);
|
|
44
|
+
if (e) {
|
|
45
|
+
Object.keys(e).forEach(function (k) {
|
|
46
|
+
if (k !== 'default') {
|
|
47
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
48
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () { return e[k]; }
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
n.default = e;
|
|
56
|
+
return Object.freeze(n);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var z2__namespace = /*#__PURE__*/_interopNamespace(z2);
|
|
267
60
|
|
|
268
61
|
// src/utils/assert.ts
|
|
269
62
|
function assert(value, message) {
|
|
@@ -272,7 +65,7 @@ function assert(value, message) {
|
|
|
272
65
|
}
|
|
273
66
|
}
|
|
274
67
|
|
|
275
|
-
// src/utils/coalesce.ts
|
|
68
|
+
// src/utils/async/coalesce.ts
|
|
276
69
|
var coalesce = (task) => {
|
|
277
70
|
let running = false;
|
|
278
71
|
const waiters = [];
|
|
@@ -312,6 +105,10 @@ var createStore = (initial) => {
|
|
|
312
105
|
return () => {
|
|
313
106
|
listeners.delete(listener);
|
|
314
107
|
};
|
|
108
|
+
},
|
|
109
|
+
dispose: () => {
|
|
110
|
+
value = initial;
|
|
111
|
+
listeners.clear();
|
|
315
112
|
}
|
|
316
113
|
};
|
|
317
114
|
};
|
|
@@ -336,13 +133,84 @@ var createDerivedStore = ({
|
|
|
336
133
|
}) => {
|
|
337
134
|
let key = dependsOn(source.get());
|
|
338
135
|
const store = createStore(build(key));
|
|
339
|
-
source.subscribe((state) => {
|
|
136
|
+
const unsubscribe = source.subscribe((state) => {
|
|
340
137
|
const next = dependsOn(state);
|
|
341
138
|
if (keyEquals(key, next)) return;
|
|
342
139
|
key = next;
|
|
343
140
|
store.set(build(next));
|
|
344
141
|
});
|
|
345
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
get: store.get,
|
|
144
|
+
subscribe: store.subscribe,
|
|
145
|
+
dispose: () => {
|
|
146
|
+
unsubscribe();
|
|
147
|
+
store.dispose();
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
var createDerivedAsyncStore = ({
|
|
152
|
+
source,
|
|
153
|
+
dependsOn,
|
|
154
|
+
build,
|
|
155
|
+
keyEquals = shallowEqual
|
|
156
|
+
}) => {
|
|
157
|
+
const store = createStore({ state: "idle" });
|
|
158
|
+
let currentKey = null;
|
|
159
|
+
let generation = 0;
|
|
160
|
+
let controller = null;
|
|
161
|
+
const run = (key) => {
|
|
162
|
+
controller?.abort();
|
|
163
|
+
controller = new AbortController();
|
|
164
|
+
const runGeneration = ++generation;
|
|
165
|
+
store.set({ state: "pending" });
|
|
166
|
+
build(key, controller.signal).then(
|
|
167
|
+
(value) => {
|
|
168
|
+
if (runGeneration === generation) store.set({ state: "ready", value });
|
|
169
|
+
},
|
|
170
|
+
(error) => {
|
|
171
|
+
if (runGeneration === generation) store.set({ state: "errored", error });
|
|
172
|
+
}
|
|
173
|
+
);
|
|
174
|
+
};
|
|
175
|
+
const sync = (state) => {
|
|
176
|
+
const next = dependsOn(state);
|
|
177
|
+
if (next === null) {
|
|
178
|
+
if (currentKey === null) return;
|
|
179
|
+
controller?.abort();
|
|
180
|
+
controller = null;
|
|
181
|
+
generation += 1;
|
|
182
|
+
currentKey = null;
|
|
183
|
+
store.set({ state: "idle" });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (currentKey !== null && keyEquals(currentKey, next)) return;
|
|
187
|
+
currentKey = next;
|
|
188
|
+
run(next);
|
|
189
|
+
};
|
|
190
|
+
sync(source.get());
|
|
191
|
+
const unsubscribe = source.subscribe(sync);
|
|
192
|
+
const readable = {
|
|
193
|
+
get: store.get,
|
|
194
|
+
subscribe: store.subscribe,
|
|
195
|
+
dispose: () => {
|
|
196
|
+
controller?.abort();
|
|
197
|
+
unsubscribe();
|
|
198
|
+
store.dispose();
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const settled = () => new Promise((resolve) => {
|
|
202
|
+
let unsubscribeSettled = () => {
|
|
203
|
+
};
|
|
204
|
+
const check = (state) => {
|
|
205
|
+
if (state.state === "ready" || state.state === "errored") {
|
|
206
|
+
unsubscribeSettled();
|
|
207
|
+
resolve(state);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
unsubscribeSettled = store.subscribe(check);
|
|
211
|
+
check(store.get());
|
|
212
|
+
});
|
|
213
|
+
return { store: readable, settled };
|
|
346
214
|
};
|
|
347
215
|
|
|
348
216
|
// src/utils/deepMerge.ts
|
|
@@ -356,239 +224,118 @@ var deepMerge = (base, patch) => {
|
|
|
356
224
|
return out;
|
|
357
225
|
};
|
|
358
226
|
|
|
359
|
-
// src/
|
|
360
|
-
var
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
227
|
+
// src/utils/persistor/adapters.ts
|
|
228
|
+
var createNullStorage = () => ({
|
|
229
|
+
getItem: () => null,
|
|
230
|
+
setItem: () => {
|
|
231
|
+
},
|
|
232
|
+
removeItem: () => {
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
var createMemoryStorage = () => {
|
|
236
|
+
const store = /* @__PURE__ */ new Map();
|
|
237
|
+
return {
|
|
238
|
+
getItem: (key) => store.get(key) ?? null,
|
|
239
|
+
setItem: (key, value) => {
|
|
240
|
+
store.set(key, value);
|
|
241
|
+
},
|
|
242
|
+
removeItem: (key) => {
|
|
243
|
+
store.delete(key);
|
|
244
|
+
}
|
|
366
245
|
};
|
|
246
|
+
};
|
|
247
|
+
var createWebStorage = (pick) => {
|
|
248
|
+
let web = null;
|
|
249
|
+
try {
|
|
250
|
+
web = pick();
|
|
251
|
+
if (web) {
|
|
252
|
+
const probe = "__keboola_storage_probe__";
|
|
253
|
+
web.setItem(probe, probe);
|
|
254
|
+
web.removeItem(probe);
|
|
255
|
+
}
|
|
256
|
+
} catch (err) {
|
|
257
|
+
console.warn("createWebStorage: web storage unavailable, falling back to memory", err);
|
|
258
|
+
web = null;
|
|
259
|
+
}
|
|
260
|
+
if (!web) return createMemoryStorage();
|
|
261
|
+
const storage = web;
|
|
367
262
|
return {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
263
|
+
getItem: (key) => storage.getItem(key),
|
|
264
|
+
setItem: (key, value) => {
|
|
265
|
+
storage.setItem(key, value);
|
|
266
|
+
},
|
|
267
|
+
removeItem: (key) => {
|
|
268
|
+
storage.removeItem(key);
|
|
269
|
+
}
|
|
373
270
|
};
|
|
374
271
|
};
|
|
272
|
+
var createLocalStorage = () => createWebStorage(() => "localStorage" in globalThis ? globalThis.localStorage : null);
|
|
273
|
+
var createSessionStorage = () => createWebStorage(() => "sessionStorage" in globalThis ? globalThis.sessionStorage : null);
|
|
375
274
|
|
|
376
|
-
// src/
|
|
377
|
-
var
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
const devOverride = clientServiceUrls?.[service.id]?.(service.url);
|
|
387
|
-
const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
|
|
388
|
-
const url = devOverride ?? prodOverride ?? service.url;
|
|
389
|
-
return [service.id, url];
|
|
390
|
-
})
|
|
391
|
-
);
|
|
392
|
-
const componentMap = new Map(components.map((component) => [component.id, component]));
|
|
393
|
-
const featureSet = new Set(features);
|
|
394
|
-
const hasFeature = (...feature) => {
|
|
395
|
-
if (feature.length === 0) return false;
|
|
396
|
-
return feature.every((x) => featureSet.has(x));
|
|
397
|
-
};
|
|
398
|
-
const hasComponent = (...componentId) => {
|
|
399
|
-
if (componentId.length === 0) return false;
|
|
400
|
-
return componentId.every((x) => componentMap.has(x));
|
|
401
|
-
};
|
|
402
|
-
const getComponent = (componentId) => componentMap.get(componentId) ?? null;
|
|
403
|
-
const hasService = (serviceId) => serviceMap.has(serviceId);
|
|
404
|
-
const getServiceUrl = (serviceId) => serviceMap.get(serviceId) ?? null;
|
|
405
|
-
return {
|
|
406
|
-
...infoRest,
|
|
407
|
-
services,
|
|
408
|
-
features,
|
|
409
|
-
components,
|
|
410
|
-
hasFeature,
|
|
411
|
-
getServiceUrl,
|
|
412
|
-
hasService,
|
|
413
|
-
getComponent,
|
|
414
|
-
hasComponent
|
|
415
|
-
};
|
|
416
|
-
};
|
|
417
|
-
|
|
418
|
-
// src/sdks/variables/variablesSdk.ts
|
|
419
|
-
var VARIABLES_COMPONENT_ID = "keboola.variables";
|
|
420
|
-
var mergeVariableDefinitions = (target, source) => {
|
|
421
|
-
const targetNames = new Set(target.map((definition) => definition.name));
|
|
422
|
-
return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];
|
|
423
|
-
};
|
|
424
|
-
var mergeVariableValues = (target, source) => {
|
|
425
|
-
const sourceByName = new Map(source.map((value) => [value.name, value.value]));
|
|
426
|
-
const targetNames = new Set(target.map((value) => value.name));
|
|
427
|
-
return [
|
|
428
|
-
...target.map(
|
|
429
|
-
(value) => sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value
|
|
430
|
-
),
|
|
431
|
-
...source.filter((value) => !targetNames.has(value.name))
|
|
432
|
-
];
|
|
433
|
-
};
|
|
434
|
-
var createVariablesSdk = ({ storageClient }) => {
|
|
435
|
-
const configs = storageClient.componentsAndConfigurations;
|
|
436
|
-
const readVariables = async (configId, valuesRowId, branchId) => {
|
|
437
|
-
const config = await configs.getConfiguration({
|
|
438
|
-
componentId: VARIABLES_COMPONENT_ID,
|
|
439
|
-
configId,
|
|
440
|
-
branchId
|
|
441
|
-
});
|
|
442
|
-
const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];
|
|
443
|
-
const rawDefinitions = config.configuration?.variables;
|
|
444
|
-
const rawValues = row?.configuration?.values;
|
|
445
|
-
return {
|
|
446
|
-
definitions: Array.isArray(rawDefinitions) ? rawDefinitions : [],
|
|
447
|
-
values: Array.isArray(rawValues) ? rawValues : []
|
|
448
|
-
};
|
|
449
|
-
};
|
|
450
|
-
const createVariables = async (definitions, values, branchId) => {
|
|
451
|
-
const config = await configs.createConfiguration({
|
|
452
|
-
branchId,
|
|
453
|
-
componentId: VARIABLES_COMPONENT_ID,
|
|
454
|
-
name: "Variables definition",
|
|
455
|
-
configuration: { variables: definitions }
|
|
456
|
-
});
|
|
275
|
+
// src/utils/persistor/persistor.ts
|
|
276
|
+
var createPersistor = ({
|
|
277
|
+
storage = createNullStorage(),
|
|
278
|
+
key,
|
|
279
|
+
schema,
|
|
280
|
+
defaultValue,
|
|
281
|
+
encode = JSON.stringify,
|
|
282
|
+
decode = JSON.parse
|
|
283
|
+
}) => {
|
|
284
|
+
const clear = () => {
|
|
457
285
|
try {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
configId: config.id,
|
|
462
|
-
name: "Default values",
|
|
463
|
-
configuration: { values }
|
|
464
|
-
});
|
|
465
|
-
return { variablesId: config.id, variablesValuesId: row.id };
|
|
466
|
-
} catch (error) {
|
|
467
|
-
await configs.deleteConfiguration({
|
|
468
|
-
branchId,
|
|
469
|
-
componentId: VARIABLES_COMPONENT_ID,
|
|
470
|
-
configId: config.id
|
|
471
|
-
}).catch((cleanupError) => {
|
|
472
|
-
if (error instanceof Error && error.cause === void 0) {
|
|
473
|
-
error.cause = cleanupError;
|
|
474
|
-
}
|
|
475
|
-
});
|
|
476
|
-
throw error;
|
|
286
|
+
storage.removeItem(key);
|
|
287
|
+
} catch (err) {
|
|
288
|
+
console.warn(`createPersistor: failed to clear "${key}"`, err);
|
|
477
289
|
}
|
|
478
290
|
};
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}) => {
|
|
486
|
-
const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);
|
|
487
|
-
return createVariables(definitions, values, branchId);
|
|
488
|
-
},
|
|
489
|
-
/** Merge the source's variables into the target's and create a fresh merged config + values row. */
|
|
490
|
-
merge: async ({
|
|
491
|
-
targetVariablesId,
|
|
492
|
-
targetValuesId,
|
|
493
|
-
sourceVariablesId,
|
|
494
|
-
sourceValuesId,
|
|
495
|
-
branchId = "default"
|
|
496
|
-
}) => {
|
|
497
|
-
const [target, source] = await Promise.all([
|
|
498
|
-
readVariables(targetVariablesId, targetValuesId, branchId),
|
|
499
|
-
readVariables(sourceVariablesId, sourceValuesId, branchId)
|
|
500
|
-
]);
|
|
501
|
-
return createVariables(
|
|
502
|
-
mergeVariableDefinitions(target.definitions, source.definitions),
|
|
503
|
-
mergeVariableValues(target.values, source.values),
|
|
504
|
-
branchId
|
|
505
|
-
);
|
|
291
|
+
const hasPersistedValue = () => {
|
|
292
|
+
try {
|
|
293
|
+
return !!storage.getItem(key);
|
|
294
|
+
} catch (err) {
|
|
295
|
+
console.warn(`createPersistor: failed to read "${key}", assuming empty`, err);
|
|
296
|
+
return false;
|
|
506
297
|
}
|
|
507
298
|
};
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
const targeted = middlewares?.[target] ?? [];
|
|
516
|
-
return [...baseline, ...all, ...targeted];
|
|
517
|
-
};
|
|
518
|
-
};
|
|
519
|
-
|
|
520
|
-
// src/serviceClientRegistry/utils.ts
|
|
521
|
-
var isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
|
|
522
|
-
var createDummyClient = ({
|
|
523
|
-
onCall
|
|
524
|
-
}) => {
|
|
525
|
-
const createProxy = (path = []) => new Proxy(() => {
|
|
526
|
-
}, {
|
|
527
|
-
// Create a new proxy for nested property access
|
|
528
|
-
get: (_target, prop) => {
|
|
529
|
-
if (isBuiltInProperty(prop)) return void 0;
|
|
530
|
-
return createProxy([...path, prop]);
|
|
531
|
-
},
|
|
532
|
-
// When called as a function, invoke the interceptor
|
|
533
|
-
apply: (_target, _thisArgs, args) => onCall(path, args)
|
|
534
|
-
});
|
|
535
|
-
return createProxy();
|
|
536
|
-
};
|
|
537
|
-
|
|
538
|
-
// src/serviceClientRegistry/createServiceClientRegistry.ts
|
|
539
|
-
var createServiceClientRegistry = () => ({
|
|
540
|
-
getServiceBaseUrl,
|
|
541
|
-
onUnavailable
|
|
542
|
-
}) => {
|
|
543
|
-
const dummy = (serviceId, clientName) => createDummyClient({
|
|
544
|
-
onCall: (path, args) => {
|
|
545
|
-
onUnavailable?.({
|
|
546
|
-
serviceId,
|
|
547
|
-
path,
|
|
548
|
-
args,
|
|
549
|
-
clientName
|
|
550
|
-
});
|
|
299
|
+
const hydrate = () => {
|
|
300
|
+
let raw;
|
|
301
|
+
try {
|
|
302
|
+
raw = storage.getItem(key);
|
|
303
|
+
} catch (err) {
|
|
304
|
+
console.warn(`createPersistor: failed to read "${key}", using default`, err);
|
|
305
|
+
return defaultValue;
|
|
551
306
|
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
307
|
+
if (raw === null) return defaultValue;
|
|
308
|
+
let decoded;
|
|
309
|
+
try {
|
|
310
|
+
decoded = decode(raw);
|
|
311
|
+
} catch (err) {
|
|
312
|
+
console.warn(`createPersistor: failed to decode "${key}", resetting`, err);
|
|
313
|
+
clear();
|
|
314
|
+
return defaultValue;
|
|
315
|
+
}
|
|
316
|
+
const parsed = schema.safeParse(decoded);
|
|
317
|
+
if (parsed.success) return parsed.data;
|
|
318
|
+
clear();
|
|
319
|
+
return defaultValue;
|
|
561
320
|
};
|
|
562
|
-
const
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
serviceId: config.serviceId,
|
|
575
|
-
isAvailable: !!getServiceBaseUrl(config.serviceId)
|
|
576
|
-
});
|
|
577
|
-
});
|
|
578
|
-
return {
|
|
579
|
-
client: clientMap,
|
|
580
|
-
meta: clientMeta
|
|
581
|
-
};
|
|
321
|
+
const persist = (value) => {
|
|
322
|
+
let raw;
|
|
323
|
+
try {
|
|
324
|
+
raw = encode(value);
|
|
325
|
+
} catch (err) {
|
|
326
|
+
console.warn(`createPersistor: failed to encode "${key}", not persisting`, err);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
try {
|
|
330
|
+
storage.setItem(key, raw);
|
|
331
|
+
} catch (err) {
|
|
332
|
+
console.warn(`createPersistor: failed to write "${key}"`, err);
|
|
582
333
|
}
|
|
583
334
|
};
|
|
584
|
-
return
|
|
335
|
+
return { hydrate, persist, clear, hasPersistedValue };
|
|
585
336
|
};
|
|
586
337
|
|
|
587
|
-
// src/
|
|
588
|
-
var createAttachTokenMiddleware = (getToken) => (next) => (request) => {
|
|
589
|
-
request.request.headers.set(chunkIUN2ZSU3_cjs.KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());
|
|
590
|
-
return next(request);
|
|
591
|
-
};
|
|
338
|
+
// src/keboola/createLiveProject.ts
|
|
592
339
|
var STORAGE_TOKEN_MUTATING_PATTERNS = [
|
|
593
340
|
// Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.
|
|
594
341
|
// At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)
|
|
@@ -608,33 +355,1252 @@ var createProjectRefreshMiddleware = (shouldRefresh, requestRefresh) => (next) =
|
|
|
608
355
|
if (shouldRefresh(request.request)) await requestRefresh();
|
|
609
356
|
return response;
|
|
610
357
|
};
|
|
611
|
-
var createLiveProject = ({
|
|
612
|
-
initialToken,
|
|
613
|
-
verify
|
|
614
|
-
}) => {
|
|
615
|
-
const store = createStore(chunkGF4XZK5N_cjs.createProject({ sapiToken: initialToken }));
|
|
616
|
-
const refresh = coalesce(async () => store.set(chunkGF4XZK5N_cjs.createProject({ sapiToken: await verify() })));
|
|
617
|
-
const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);
|
|
618
|
-
return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware };
|
|
358
|
+
var createLiveProject = ({
|
|
359
|
+
initialToken,
|
|
360
|
+
verify
|
|
361
|
+
}) => {
|
|
362
|
+
const store = createStore(chunkGF4XZK5N_cjs.createProject({ sapiToken: initialToken }));
|
|
363
|
+
const refresh = coalesce(async () => store.set(chunkGF4XZK5N_cjs.createProject({ sapiToken: await verify() })));
|
|
364
|
+
const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);
|
|
365
|
+
return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware, refresh };
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
// src/keboola/errors.ts
|
|
369
|
+
var KeboolaErrorType = {
|
|
370
|
+
Unconfigured: "unconfigured",
|
|
371
|
+
NotAuthenticated: "not-authenticated",
|
|
372
|
+
AlreadyAuthenticated: "already-authenticated",
|
|
373
|
+
NoStorageToken: "no-storage-token",
|
|
374
|
+
NoManagementToken: "no-management-token",
|
|
375
|
+
MissingProject: "missing-project",
|
|
376
|
+
NotBearer: "not-bearer",
|
|
377
|
+
NotReady: "not-ready",
|
|
378
|
+
InvalidBuildTransition: "invalid-build-transition"
|
|
379
|
+
};
|
|
380
|
+
var MESSAGES = {
|
|
381
|
+
[KeboolaErrorType.Unconfigured]: "The session is not configured \u2014 set a baseUrl first.",
|
|
382
|
+
[KeboolaErrorType.NotAuthenticated]: "The session is not authenticated \u2014 sign in first.",
|
|
383
|
+
[KeboolaErrorType.AlreadyAuthenticated]: "The session is already authenticated \u2014 reset before authenticating again.",
|
|
384
|
+
[KeboolaErrorType.NoStorageToken]: "No storage token \u2014 authenticate the storage realm first.",
|
|
385
|
+
[KeboolaErrorType.NoManagementToken]: "No management token \u2014 authenticate the management realm first.",
|
|
386
|
+
[KeboolaErrorType.MissingProject]: "A bearer storage session requires a project \u2014 call setProject(projectId) first.",
|
|
387
|
+
[KeboolaErrorType.NotBearer]: "This operation requires a bearer (OAuth) session.",
|
|
388
|
+
[KeboolaErrorType.NotReady]: "The client is not ready \u2014 authenticate the storage realm first.",
|
|
389
|
+
[KeboolaErrorType.InvalidBuildTransition]: "Invalid storage build transition \u2014 the build goes idle \u2192 initializing \u2192 ready | failed."
|
|
390
|
+
};
|
|
391
|
+
var KeboolaError = class _KeboolaError extends Error {
|
|
392
|
+
type;
|
|
393
|
+
constructor(type) {
|
|
394
|
+
super(MESSAGES[type]);
|
|
395
|
+
this.type = type;
|
|
396
|
+
this.name = "KeboolaError";
|
|
397
|
+
Object.setPrototypeOf(this, _KeboolaError.prototype);
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
var isKeboolaError = (error) => error instanceof KeboolaError;
|
|
401
|
+
function assert2(value, type) {
|
|
402
|
+
if (value == null) throw new KeboolaError(type);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// src/middlewares/loggingMiddleware.ts
|
|
406
|
+
var CORRELATION_ID_HEADER = "X-Correlation-ID";
|
|
407
|
+
var ALWAYS_REDACTED_HEADERS = [
|
|
408
|
+
chunkIUN2ZSU3_cjs.KeboolaHttpHeader.MANAGEMENT_API_TOKEN,
|
|
409
|
+
chunkIUN2ZSU3_cjs.KeboolaHttpHeader.STORAGE_API_TOKEN,
|
|
410
|
+
"authorization",
|
|
411
|
+
"cookie",
|
|
412
|
+
"set-cookie"
|
|
413
|
+
];
|
|
414
|
+
var ALWAYS_REDACTED_QUERY_PARAMS = /* @__PURE__ */ new Set([
|
|
415
|
+
"token",
|
|
416
|
+
"apikey",
|
|
417
|
+
"api_key",
|
|
418
|
+
"access_token",
|
|
419
|
+
"refresh_token",
|
|
420
|
+
"code",
|
|
421
|
+
"state",
|
|
422
|
+
"signature",
|
|
423
|
+
"sig",
|
|
424
|
+
"x-amz-signature",
|
|
425
|
+
"x-amz-credential",
|
|
426
|
+
"x-amz-security-token",
|
|
427
|
+
"password",
|
|
428
|
+
"secret"
|
|
429
|
+
]);
|
|
430
|
+
var REDACTED = "[REDACTED]";
|
|
431
|
+
var getRedactedUrl = (rawUrl) => {
|
|
432
|
+
const url = new URL(rawUrl);
|
|
433
|
+
if (url.username) url.username = REDACTED;
|
|
434
|
+
if (url.password) url.password = REDACTED;
|
|
435
|
+
url.searchParams.forEach((_value, key) => {
|
|
436
|
+
if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {
|
|
437
|
+
url.searchParams.set(key, REDACTED);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
return url.toString();
|
|
441
|
+
};
|
|
442
|
+
var ensureCorrelationId = (request) => {
|
|
443
|
+
const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? chunkEWMXK3EI_cjs.generateUUID();
|
|
444
|
+
request.headers.set(CORRELATION_ID_HEADER, correlationId);
|
|
445
|
+
return correlationId;
|
|
446
|
+
};
|
|
447
|
+
var getRedactedHeaders = (headers, redacted) => {
|
|
448
|
+
const redactedSet = new Set(
|
|
449
|
+
[...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase())
|
|
450
|
+
);
|
|
451
|
+
const result = {};
|
|
452
|
+
headers.forEach((value, name) => {
|
|
453
|
+
result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;
|
|
454
|
+
});
|
|
455
|
+
return result;
|
|
456
|
+
};
|
|
457
|
+
var getRequestLog = (request, redactedHeaders) => ({
|
|
458
|
+
url: getRedactedUrl(request.url),
|
|
459
|
+
headers: getRedactedHeaders(request.headers, redactedHeaders)
|
|
460
|
+
});
|
|
461
|
+
var getResponseLog = (response, redactedHeaders) => ({
|
|
462
|
+
status: response.status,
|
|
463
|
+
statusText: response.statusText,
|
|
464
|
+
headers: getRedactedHeaders(response.headers, redactedHeaders)
|
|
465
|
+
});
|
|
466
|
+
var redactApiError = (error, redactedHeaders) => new chunkIUN2ZSU3_cjs.ApiError({
|
|
467
|
+
request: new Request(getRedactedUrl(error.request.url), {
|
|
468
|
+
method: error.request.method,
|
|
469
|
+
headers: getRedactedHeaders(error.request.headers, redactedHeaders)
|
|
470
|
+
}),
|
|
471
|
+
response: new Response(null, {
|
|
472
|
+
status: error.response.status,
|
|
473
|
+
statusText: error.response.statusText,
|
|
474
|
+
headers: getRedactedHeaders(error.response.headers, redactedHeaders)
|
|
475
|
+
}),
|
|
476
|
+
data: error.data
|
|
477
|
+
});
|
|
478
|
+
var formatLog = (level, log) => {
|
|
479
|
+
const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];
|
|
480
|
+
parts.push(log.request.url);
|
|
481
|
+
if ("response" in log) parts.push(String(log.response.status));
|
|
482
|
+
return parts.join(" ");
|
|
483
|
+
};
|
|
484
|
+
var createSafeLogger = (logger, level = "error-only") => {
|
|
485
|
+
return {
|
|
486
|
+
info: (log) => {
|
|
487
|
+
if (level !== "all") return;
|
|
488
|
+
try {
|
|
489
|
+
if (logger?.info) {
|
|
490
|
+
logger.info(log);
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
console.info(formatLog("info", log));
|
|
494
|
+
} catch {
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
error: (log) => {
|
|
498
|
+
try {
|
|
499
|
+
if (logger?.error) {
|
|
500
|
+
logger.error(log);
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
console.error(formatLog("error", log));
|
|
504
|
+
} catch {
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
};
|
|
509
|
+
var createLoggingMiddleware = (options = {}) => {
|
|
510
|
+
const safeLogger = createSafeLogger(options.logger, options.level);
|
|
511
|
+
const redactHeaders = options.redactHeaders ?? [];
|
|
512
|
+
return (next) => async (fetchRequest) => {
|
|
513
|
+
const correlationId = ensureCorrelationId(fetchRequest.request);
|
|
514
|
+
const start = performance.now();
|
|
515
|
+
const method = fetchRequest.request.method.toLowerCase();
|
|
516
|
+
const requestLog = getRequestLog(fetchRequest.request, redactHeaders);
|
|
517
|
+
try {
|
|
518
|
+
const result = await next(fetchRequest);
|
|
519
|
+
safeLogger.info({
|
|
520
|
+
correlationId,
|
|
521
|
+
method,
|
|
522
|
+
durationMs: performance.now() - start,
|
|
523
|
+
request: requestLog,
|
|
524
|
+
response: getResponseLog(result.response, redactHeaders)
|
|
525
|
+
});
|
|
526
|
+
return result;
|
|
527
|
+
} catch (error) {
|
|
528
|
+
if (error instanceof Error)
|
|
529
|
+
safeLogger.error({
|
|
530
|
+
correlationId,
|
|
531
|
+
method,
|
|
532
|
+
durationMs: performance.now() - start,
|
|
533
|
+
request: requestLog,
|
|
534
|
+
error: chunkIUN2ZSU3_cjs.isApiError(error) ? redactApiError(error, redactHeaders) : error
|
|
535
|
+
});
|
|
536
|
+
throw error;
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
// src/middlewares/retryMiddleware.ts
|
|
542
|
+
var DEFAULT_MAX_RETRIES = 5;
|
|
543
|
+
var DEFAULT_RETRYABLE_STATUSES = [
|
|
544
|
+
chunkIUN2ZSU3_cjs.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
545
|
+
chunkIUN2ZSU3_cjs.HttpStatus.BAD_GATEWAY,
|
|
546
|
+
chunkIUN2ZSU3_cjs.HttpStatus.SERVICE_UNAVAILABLE,
|
|
547
|
+
chunkIUN2ZSU3_cjs.HttpStatus.GATEWAY_TIMEOUT
|
|
548
|
+
];
|
|
549
|
+
var DEFAULT_BACKOFF_FACTOR = 0.3;
|
|
550
|
+
var defaultShouldRetry = (error) => error instanceof chunkIUN2ZSU3_cjs.ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);
|
|
551
|
+
var createRetryMiddleware = (options) => {
|
|
552
|
+
const {
|
|
553
|
+
maxRetries = DEFAULT_MAX_RETRIES,
|
|
554
|
+
backoffFactor = DEFAULT_BACKOFF_FACTOR,
|
|
555
|
+
shouldRetry = defaultShouldRetry
|
|
556
|
+
} = options ?? {};
|
|
557
|
+
if (!Number.isInteger(maxRetries) || maxRetries < 0) {
|
|
558
|
+
throw new RangeError("maxRetries must be a non-negative integer");
|
|
559
|
+
}
|
|
560
|
+
if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {
|
|
561
|
+
throw new RangeError("backoffFactor must be a finite non-negative number");
|
|
562
|
+
}
|
|
563
|
+
return (next) => async (request) => {
|
|
564
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
565
|
+
try {
|
|
566
|
+
return await next({ ...request, request: request.request.clone() });
|
|
567
|
+
} catch (error) {
|
|
568
|
+
if (attempt === maxRetries || !shouldRetry(error, attempt)) {
|
|
569
|
+
throw error;
|
|
570
|
+
}
|
|
571
|
+
const delayMs = backoffFactor * 1e3 * Math.pow(2, attempt);
|
|
572
|
+
await chunkCBVGOANJ_cjs.delay(delayMs, request.request.signal ?? void 0);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
throw new Error("unreachable");
|
|
576
|
+
};
|
|
577
|
+
};
|
|
578
|
+
|
|
579
|
+
// src/serviceClientRegistry/utils.ts
|
|
580
|
+
var isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
|
|
581
|
+
var createDummyClient = ({
|
|
582
|
+
onCall
|
|
583
|
+
}) => {
|
|
584
|
+
const createProxy = (path = []) => new Proxy(() => {
|
|
585
|
+
}, {
|
|
586
|
+
// Create a new proxy for nested property access
|
|
587
|
+
get: (_target, prop) => {
|
|
588
|
+
if (isBuiltInProperty(prop)) return void 0;
|
|
589
|
+
return createProxy([...path, prop]);
|
|
590
|
+
},
|
|
591
|
+
// When called as a function, invoke the interceptor
|
|
592
|
+
apply: (_target, _thisArgs, args) => onCall(path, args)
|
|
593
|
+
});
|
|
594
|
+
return createProxy();
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
// src/serviceClientRegistry/createServiceClientRegistry.ts
|
|
598
|
+
var createServiceClientRegistry = () => ({
|
|
599
|
+
getServiceBaseUrl,
|
|
600
|
+
onUnavailable
|
|
601
|
+
}) => {
|
|
602
|
+
const dummy = (serviceId, clientName) => createDummyClient({
|
|
603
|
+
onCall: (path, args) => {
|
|
604
|
+
onUnavailable?.({
|
|
605
|
+
serviceId,
|
|
606
|
+
path,
|
|
607
|
+
args,
|
|
608
|
+
clientName
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
const configs = [];
|
|
613
|
+
const resolveClient = ({
|
|
614
|
+
serviceId,
|
|
615
|
+
clientFn,
|
|
616
|
+
clientName
|
|
617
|
+
}) => {
|
|
618
|
+
const serviceBaseUrl = getServiceBaseUrl(serviceId);
|
|
619
|
+
return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);
|
|
620
|
+
};
|
|
621
|
+
const registry = {
|
|
622
|
+
add: (config) => {
|
|
623
|
+
configs.push(config);
|
|
624
|
+
return registry;
|
|
625
|
+
},
|
|
626
|
+
build: () => {
|
|
627
|
+
const clientMap = {};
|
|
628
|
+
const clientMeta = [];
|
|
629
|
+
configs.forEach((config) => {
|
|
630
|
+
clientMap[config.clientName] = resolveClient(config);
|
|
631
|
+
clientMeta.push({
|
|
632
|
+
clientName: config.clientName,
|
|
633
|
+
serviceId: config.serviceId,
|
|
634
|
+
isAvailable: !!getServiceBaseUrl(config.serviceId)
|
|
635
|
+
});
|
|
636
|
+
});
|
|
637
|
+
return {
|
|
638
|
+
client: clientMap,
|
|
639
|
+
meta: clientMeta
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
};
|
|
643
|
+
return registry;
|
|
644
|
+
};
|
|
645
|
+
|
|
646
|
+
// src/keboola/createApi.ts
|
|
647
|
+
var createApi = (state) => new Proxy({}, {
|
|
648
|
+
get(_target, property) {
|
|
649
|
+
if (isBuiltInProperty(property)) return void 0;
|
|
650
|
+
if (property === "auth") {
|
|
651
|
+
const authClient = state.getAuthClient();
|
|
652
|
+
assert2(authClient, KeboolaErrorType.Unconfigured);
|
|
653
|
+
return authClient;
|
|
654
|
+
}
|
|
655
|
+
if (property === "management") {
|
|
656
|
+
const management = state.getManagementClient();
|
|
657
|
+
assert2(management, KeboolaErrorType.NoManagementToken);
|
|
658
|
+
return management;
|
|
659
|
+
}
|
|
660
|
+
const clients = state.getProjectClients();
|
|
661
|
+
assert2(clients, KeboolaErrorType.NotReady);
|
|
662
|
+
return clients[property];
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
// src/keboola/createMiddlewareFor.ts
|
|
667
|
+
var createMiddlewareFor = (middlewares) => {
|
|
668
|
+
return (target, baseline = []) => {
|
|
669
|
+
if (Array.isArray(middlewares)) return [...baseline, ...middlewares];
|
|
670
|
+
const all = middlewares?.all ?? [];
|
|
671
|
+
const targeted = middlewares?.[target] ?? [];
|
|
672
|
+
return [...baseline, ...all, ...targeted];
|
|
673
|
+
};
|
|
674
|
+
};
|
|
675
|
+
|
|
676
|
+
// src/keboola/bearer/createConfig.ts
|
|
677
|
+
var INITIAL = { status: "anonymous", baseUrl: null };
|
|
678
|
+
var stamp = (tokens) => ({ ...tokens, issuedAt: Date.now() });
|
|
679
|
+
var createConfig = (initial = INITIAL) => {
|
|
680
|
+
const store = createStore(initial);
|
|
681
|
+
let expiredNotified = false;
|
|
682
|
+
const setBaseUrl = (baseUrl) => {
|
|
683
|
+
if (store.get().status !== "anonymous")
|
|
684
|
+
throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
|
|
685
|
+
store.set({ status: "anonymous", baseUrl });
|
|
686
|
+
};
|
|
687
|
+
const authenticate = (tokens) => {
|
|
688
|
+
const state = store.get();
|
|
689
|
+
if (state.status !== "anonymous") throw new KeboolaError(KeboolaErrorType.AlreadyAuthenticated);
|
|
690
|
+
if (!state.baseUrl) throw new KeboolaError(KeboolaErrorType.Unconfigured);
|
|
691
|
+
expiredNotified = false;
|
|
692
|
+
store.set({ status: "authenticated", baseUrl: state.baseUrl, credential: stamp(tokens) });
|
|
693
|
+
};
|
|
694
|
+
const setProjectId = (projectId) => {
|
|
695
|
+
const state = store.get();
|
|
696
|
+
if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
|
|
697
|
+
store.set({
|
|
698
|
+
status: "scoped",
|
|
699
|
+
baseUrl: state.baseUrl,
|
|
700
|
+
credential: state.credential,
|
|
701
|
+
projectId
|
|
702
|
+
});
|
|
703
|
+
};
|
|
704
|
+
const reset = () => {
|
|
705
|
+
store.set({ status: "anonymous", baseUrl: store.get().baseUrl });
|
|
706
|
+
};
|
|
707
|
+
const applyRefresh = (tokens) => {
|
|
708
|
+
const state = store.get();
|
|
709
|
+
if (state.status === "anonymous") return;
|
|
710
|
+
store.set({ ...state, credential: stamp(tokens) });
|
|
711
|
+
};
|
|
712
|
+
const forceExpire = () => {
|
|
713
|
+
const state = store.get();
|
|
714
|
+
if (state.status === "anonymous") return;
|
|
715
|
+
const issuedAt = Date.now() - state.credential.expiresIn * 1e3;
|
|
716
|
+
store.set({ ...state, credential: { ...state.credential, issuedAt } });
|
|
717
|
+
};
|
|
718
|
+
const requireCredential = () => {
|
|
719
|
+
const state = store.get();
|
|
720
|
+
if (state.status === "anonymous") throw new KeboolaError(KeboolaErrorType.NotAuthenticated);
|
|
721
|
+
return state.credential;
|
|
722
|
+
};
|
|
723
|
+
const getBaseUrl = () => store.get().baseUrl;
|
|
724
|
+
const notifyExpired = () => {
|
|
725
|
+
if (expiredNotified) return false;
|
|
726
|
+
expiredNotified = true;
|
|
727
|
+
return true;
|
|
728
|
+
};
|
|
729
|
+
const debug = () => store.get();
|
|
730
|
+
const readable = {
|
|
731
|
+
get: store.get,
|
|
732
|
+
subscribe: store.subscribe,
|
|
733
|
+
dispose: store.dispose
|
|
734
|
+
};
|
|
735
|
+
return {
|
|
736
|
+
store: readable,
|
|
737
|
+
setBaseUrl,
|
|
738
|
+
authenticate,
|
|
739
|
+
setProjectId,
|
|
740
|
+
reset,
|
|
741
|
+
applyRefresh,
|
|
742
|
+
forceExpire,
|
|
743
|
+
requireCredential,
|
|
744
|
+
getBaseUrl,
|
|
745
|
+
notifyExpired,
|
|
746
|
+
debug
|
|
747
|
+
};
|
|
748
|
+
};
|
|
749
|
+
|
|
750
|
+
// src/domain/defaultBranch.ts
|
|
751
|
+
var createDefaultBranch = ({ devBranches }) => {
|
|
752
|
+
const defaultBranch = devBranches.find((branch) => branch.isDefault);
|
|
753
|
+
assert(defaultBranch, "No default branch found for the project.");
|
|
754
|
+
const getType = (branchId) => {
|
|
755
|
+
if (branchId == null || branchId === "default") return "default";
|
|
756
|
+
return Number(branchId) === defaultBranch.id ? "default" : "dev";
|
|
757
|
+
};
|
|
758
|
+
return {
|
|
759
|
+
id: defaultBranch.id,
|
|
760
|
+
name: defaultBranch.name,
|
|
761
|
+
getType,
|
|
762
|
+
isDev: (branchId) => getType(branchId) === "dev",
|
|
763
|
+
isDefault: (branchId) => getType(branchId) === "default"
|
|
764
|
+
};
|
|
765
|
+
};
|
|
766
|
+
|
|
767
|
+
// src/domain/stack.ts
|
|
768
|
+
var SERVICE_URL_OVERRIDES = {
|
|
769
|
+
// The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.
|
|
770
|
+
// I assume the service is versioned.
|
|
771
|
+
"kai-assistant": (url) => `${url}/api`
|
|
772
|
+
};
|
|
773
|
+
var createStack = ({ stackInfo, clientServiceUrls }) => {
|
|
774
|
+
const { services, components, features, ...infoRest } = stackInfo;
|
|
775
|
+
const serviceMap = new Map(
|
|
776
|
+
services.map((service) => {
|
|
777
|
+
const devOverride = clientServiceUrls?.[service.id]?.(service.url);
|
|
778
|
+
const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
|
|
779
|
+
const url = devOverride ?? prodOverride ?? service.url;
|
|
780
|
+
return [service.id, url];
|
|
781
|
+
})
|
|
782
|
+
);
|
|
783
|
+
const componentMap = new Map(components.map((component) => [component.id, component]));
|
|
784
|
+
const featureSet = new Set(features);
|
|
785
|
+
const hasFeature = (...feature) => {
|
|
786
|
+
if (feature.length === 0) return false;
|
|
787
|
+
return feature.every((x) => featureSet.has(x));
|
|
788
|
+
};
|
|
789
|
+
const hasComponent = (...componentId) => {
|
|
790
|
+
if (componentId.length === 0) return false;
|
|
791
|
+
return componentId.every((x) => componentMap.has(x));
|
|
792
|
+
};
|
|
793
|
+
const getComponent = (componentId) => componentMap.get(componentId) ?? null;
|
|
794
|
+
const hasService = (serviceId) => serviceMap.has(serviceId);
|
|
795
|
+
const getServiceUrl = (serviceId) => serviceMap.get(serviceId) ?? null;
|
|
796
|
+
return {
|
|
797
|
+
...infoRest,
|
|
798
|
+
services,
|
|
799
|
+
features,
|
|
800
|
+
components,
|
|
801
|
+
hasFeature,
|
|
802
|
+
getServiceUrl,
|
|
803
|
+
hasService,
|
|
804
|
+
getComponent,
|
|
805
|
+
hasComponent
|
|
806
|
+
};
|
|
807
|
+
};
|
|
808
|
+
|
|
809
|
+
// src/sdks/variables/variablesSdk.ts
|
|
810
|
+
var VARIABLES_COMPONENT_ID = "keboola.variables";
|
|
811
|
+
var mergeVariableDefinitions = (target, source) => {
|
|
812
|
+
const targetNames = new Set(target.map((definition) => definition.name));
|
|
813
|
+
return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];
|
|
814
|
+
};
|
|
815
|
+
var mergeVariableValues = (target, source) => {
|
|
816
|
+
const sourceByName = new Map(source.map((value) => [value.name, value.value]));
|
|
817
|
+
const targetNames = new Set(target.map((value) => value.name));
|
|
818
|
+
return [
|
|
819
|
+
...target.map(
|
|
820
|
+
(value) => sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value
|
|
821
|
+
),
|
|
822
|
+
...source.filter((value) => !targetNames.has(value.name))
|
|
823
|
+
];
|
|
824
|
+
};
|
|
825
|
+
var createVariablesSdk = ({ storageClient }) => {
|
|
826
|
+
const configs = storageClient.componentsAndConfigurations;
|
|
827
|
+
const readVariables = async (configId, valuesRowId, branchId) => {
|
|
828
|
+
const config = await configs.getConfiguration({
|
|
829
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
830
|
+
configId,
|
|
831
|
+
branchId
|
|
832
|
+
});
|
|
833
|
+
const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];
|
|
834
|
+
const rawDefinitions = config.configuration?.variables;
|
|
835
|
+
const rawValues = row?.configuration?.values;
|
|
836
|
+
return {
|
|
837
|
+
definitions: Array.isArray(rawDefinitions) ? rawDefinitions : [],
|
|
838
|
+
values: Array.isArray(rawValues) ? rawValues : []
|
|
839
|
+
};
|
|
840
|
+
};
|
|
841
|
+
const createVariables = async (definitions, values, branchId) => {
|
|
842
|
+
const config = await configs.createConfiguration({
|
|
843
|
+
branchId,
|
|
844
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
845
|
+
name: "Variables definition",
|
|
846
|
+
configuration: { variables: definitions }
|
|
847
|
+
});
|
|
848
|
+
try {
|
|
849
|
+
const row = await configs.createConfigurationRow({
|
|
850
|
+
branchId,
|
|
851
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
852
|
+
configId: config.id,
|
|
853
|
+
name: "Default values",
|
|
854
|
+
configuration: { values }
|
|
855
|
+
});
|
|
856
|
+
return { variablesId: config.id, variablesValuesId: row.id };
|
|
857
|
+
} catch (error) {
|
|
858
|
+
await configs.deleteConfiguration({
|
|
859
|
+
branchId,
|
|
860
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
861
|
+
configId: config.id
|
|
862
|
+
}).catch((cleanupError) => {
|
|
863
|
+
if (error instanceof Error && error.cause === void 0) {
|
|
864
|
+
error.cause = cleanupError;
|
|
865
|
+
}
|
|
866
|
+
});
|
|
867
|
+
throw error;
|
|
868
|
+
}
|
|
869
|
+
};
|
|
870
|
+
return {
|
|
871
|
+
/** Copy a variables config into a fresh, independent config + values row. */
|
|
872
|
+
copy: async ({
|
|
873
|
+
variablesId,
|
|
874
|
+
variablesValuesId,
|
|
875
|
+
branchId = "default"
|
|
876
|
+
}) => {
|
|
877
|
+
const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);
|
|
878
|
+
return createVariables(definitions, values, branchId);
|
|
879
|
+
},
|
|
880
|
+
/** Merge the source's variables into the target's and create a fresh merged config + values row. */
|
|
881
|
+
merge: async ({
|
|
882
|
+
targetVariablesId,
|
|
883
|
+
targetValuesId,
|
|
884
|
+
sourceVariablesId,
|
|
885
|
+
sourceValuesId,
|
|
886
|
+
branchId = "default"
|
|
887
|
+
}) => {
|
|
888
|
+
const [target, source] = await Promise.all([
|
|
889
|
+
readVariables(targetVariablesId, targetValuesId, branchId),
|
|
890
|
+
readVariables(sourceVariablesId, sourceValuesId, branchId)
|
|
891
|
+
]);
|
|
892
|
+
return createVariables(
|
|
893
|
+
mergeVariableDefinitions(target.definitions, source.definitions),
|
|
894
|
+
mergeVariableValues(target.values, source.values),
|
|
895
|
+
branchId
|
|
896
|
+
);
|
|
897
|
+
}
|
|
898
|
+
};
|
|
899
|
+
};
|
|
900
|
+
var agentSettingsSchema = z2.z.object({
|
|
901
|
+
projectId: z2.z.string(),
|
|
902
|
+
customInstructions: z2.z.string().nullable(),
|
|
903
|
+
createdAt: z2.z.string(),
|
|
904
|
+
updatedAt: z2.z.string()
|
|
905
|
+
});
|
|
906
|
+
var toolPermissionValueSchema = z2.z.enum(["always_allow", "always_ask", "blocked"]);
|
|
907
|
+
var userAgentSettingsSchema = z2.z.object({
|
|
908
|
+
projectId: z2.z.string(),
|
|
909
|
+
userId: z2.z.string(),
|
|
910
|
+
customInstructions: z2.z.string().nullable(),
|
|
911
|
+
toolPermissions: z2.z.record(z2.z.string(), toolPermissionValueSchema).nullable(),
|
|
912
|
+
createdAt: z2.z.string(),
|
|
913
|
+
updatedAt: z2.z.string()
|
|
914
|
+
});
|
|
915
|
+
var toolInfoSchema = z2.z.object({
|
|
916
|
+
name: z2.z.string(),
|
|
917
|
+
description: z2.z.string(),
|
|
918
|
+
readOnly: z2.z.boolean()
|
|
919
|
+
});
|
|
920
|
+
var toolsListResponseSchema = z2.z.object({
|
|
921
|
+
tools: z2.z.array(toolInfoSchema)
|
|
922
|
+
});
|
|
923
|
+
var skillInfoSchema = z2.z.object({
|
|
924
|
+
name: z2.z.string(),
|
|
925
|
+
description: z2.z.string().nullable(),
|
|
926
|
+
source: z2.z.enum(["first-party", "vendored", "project"])
|
|
927
|
+
});
|
|
928
|
+
var builtInCommandSchema = z2.z.object({
|
|
929
|
+
name: z2.z.string(),
|
|
930
|
+
description: z2.z.string()
|
|
931
|
+
});
|
|
932
|
+
var skillsListResponseSchema = z2.z.object({
|
|
933
|
+
skills: z2.z.array(skillInfoSchema),
|
|
934
|
+
commands: z2.z.array(builtInCommandSchema)
|
|
935
|
+
});
|
|
936
|
+
var sandboxFileEntrySchema = z2.z.object({
|
|
937
|
+
name: z2.z.string(),
|
|
938
|
+
path: z2.z.string(),
|
|
939
|
+
type: z2.z.enum(["file", "dir"]),
|
|
940
|
+
size: z2.z.number().int().nonnegative().optional()
|
|
941
|
+
});
|
|
942
|
+
var sandboxFileListingSchema = z2.z.object({
|
|
943
|
+
entries: z2.z.array(sandboxFileEntrySchema)
|
|
944
|
+
});
|
|
945
|
+
var sandboxFileContentSchema = z2.z.object({
|
|
946
|
+
content: z2.z.string(),
|
|
947
|
+
encoding: z2.z.enum(["utf-8", "binary"]),
|
|
948
|
+
truncated: z2.z.boolean(),
|
|
949
|
+
size: z2.z.number().int().nonnegative()
|
|
950
|
+
});
|
|
951
|
+
var sandboxGitBranchSchema = z2.z.object({
|
|
952
|
+
branch: z2.z.string().nullable()
|
|
953
|
+
});
|
|
954
|
+
var createKaiAgentClient = ({ baseUrl, middlewares, auth }) => {
|
|
955
|
+
const clientOptions = {
|
|
956
|
+
baseUrl,
|
|
957
|
+
middlewares,
|
|
958
|
+
headers: chunkUQWVZTEA_cjs.createAuthHeaders(auth)
|
|
959
|
+
};
|
|
960
|
+
const client = chunkIUN2ZSU3_cjs.createOpenapiFetchClient(clientOptions);
|
|
961
|
+
const genericClient = chunkIUN2ZSU3_cjs.createGenericFetchClient(clientOptions);
|
|
962
|
+
const getHistory = async (params) => {
|
|
963
|
+
const { data } = await client.get("/api/history", { query: params });
|
|
964
|
+
return data;
|
|
965
|
+
};
|
|
966
|
+
const getChat = async (chatId, signal) => {
|
|
967
|
+
const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
|
|
968
|
+
return data;
|
|
969
|
+
};
|
|
970
|
+
const deleteChat = async (chatId) => {
|
|
971
|
+
const { data } = await client.delete("/api/chat", { query: { id: chatId } });
|
|
972
|
+
return data;
|
|
973
|
+
};
|
|
974
|
+
const createChat = async (request) => {
|
|
975
|
+
const { response } = await client.post("/api/chat", { body: request });
|
|
976
|
+
return response;
|
|
977
|
+
};
|
|
978
|
+
const getVotes = async (chatId) => {
|
|
979
|
+
const { data } = await client.get("/api/vote", { query: { chatId } });
|
|
980
|
+
return data;
|
|
981
|
+
};
|
|
982
|
+
const submitVote = async (params) => {
|
|
983
|
+
await client.patch("/api/vote", { body: params });
|
|
984
|
+
};
|
|
985
|
+
const getUsage = async (signal) => {
|
|
986
|
+
const { data } = await client.get("/api/usage", {}, { signal });
|
|
987
|
+
return data;
|
|
988
|
+
};
|
|
989
|
+
const approveToolCall = async (chatId, body) => {
|
|
990
|
+
await client.post("/api/chat/{id}/approval", { path: { id: chatId }, body });
|
|
991
|
+
};
|
|
992
|
+
const submitToolOutput = async (chatId, body) => {
|
|
993
|
+
await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
|
|
994
|
+
};
|
|
995
|
+
const stopChat = async (chatId) => {
|
|
996
|
+
const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
|
|
997
|
+
return data;
|
|
998
|
+
};
|
|
999
|
+
const getSuggestions = async (request, signal) => {
|
|
1000
|
+
const { data } = await client.post("/api/suggestions", { body: request }, { signal });
|
|
1001
|
+
return data;
|
|
1002
|
+
};
|
|
1003
|
+
const getAgentSettings = async (signal) => {
|
|
1004
|
+
const { data } = await genericClient.get("/api/settings", {}, { signal });
|
|
1005
|
+
const result = agentSettingsSchema.safeParse(data);
|
|
1006
|
+
if (!result.success) {
|
|
1007
|
+
throw new Error("Invalid agent settings response format");
|
|
1008
|
+
}
|
|
1009
|
+
return result.data;
|
|
1010
|
+
};
|
|
1011
|
+
const updateAgentSettings = async (request, signal) => {
|
|
1012
|
+
const { data } = await genericClient.patch(
|
|
1013
|
+
"/api/settings",
|
|
1014
|
+
{ body: request },
|
|
1015
|
+
{ signal }
|
|
1016
|
+
);
|
|
1017
|
+
const result = agentSettingsSchema.safeParse(data);
|
|
1018
|
+
if (!result.success) {
|
|
1019
|
+
throw new Error("Invalid agent settings response format");
|
|
1020
|
+
}
|
|
1021
|
+
return result.data;
|
|
1022
|
+
};
|
|
1023
|
+
const getUserAgentSettings = async (signal) => {
|
|
1024
|
+
const { data } = await genericClient.get(
|
|
1025
|
+
"/api/settings/user",
|
|
1026
|
+
{},
|
|
1027
|
+
{ signal }
|
|
1028
|
+
);
|
|
1029
|
+
const result = userAgentSettingsSchema.safeParse(data);
|
|
1030
|
+
if (!result.success) {
|
|
1031
|
+
throw new Error("Invalid user agent settings response format");
|
|
1032
|
+
}
|
|
1033
|
+
return result.data;
|
|
1034
|
+
};
|
|
1035
|
+
const updateUserAgentSettings = async (request, signal) => {
|
|
1036
|
+
const { data } = await genericClient.patch(
|
|
1037
|
+
"/api/settings/user",
|
|
1038
|
+
{ body: request },
|
|
1039
|
+
{ signal }
|
|
1040
|
+
);
|
|
1041
|
+
const result = userAgentSettingsSchema.safeParse(data);
|
|
1042
|
+
if (!result.success) {
|
|
1043
|
+
throw new Error("Invalid user agent settings response format");
|
|
1044
|
+
}
|
|
1045
|
+
return result.data;
|
|
1046
|
+
};
|
|
1047
|
+
const getToolsList = async (signal) => {
|
|
1048
|
+
const { data } = await genericClient.get(
|
|
1049
|
+
"/api/settings/tools",
|
|
1050
|
+
{},
|
|
1051
|
+
{ signal }
|
|
1052
|
+
);
|
|
1053
|
+
const result = toolsListResponseSchema.safeParse(data);
|
|
1054
|
+
if (!result.success) {
|
|
1055
|
+
throw new Error("Invalid tools list response format");
|
|
1056
|
+
}
|
|
1057
|
+
return result.data;
|
|
1058
|
+
};
|
|
1059
|
+
const getSkillsList = async (signal) => {
|
|
1060
|
+
const { data } = await genericClient.get("/api/skills", {}, { signal });
|
|
1061
|
+
const result = skillsListResponseSchema.safeParse(data);
|
|
1062
|
+
if (!result.success) {
|
|
1063
|
+
throw new Error("Invalid skills list response format");
|
|
1064
|
+
}
|
|
1065
|
+
return result.data;
|
|
1066
|
+
};
|
|
1067
|
+
const listSandboxFiles = async (chatId, path, signal) => {
|
|
1068
|
+
const { data } = await genericClient.get(
|
|
1069
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,
|
|
1070
|
+
{ query: path ? { path } : void 0 },
|
|
1071
|
+
{ signal }
|
|
1072
|
+
);
|
|
1073
|
+
const result = sandboxFileListingSchema.safeParse(data);
|
|
1074
|
+
if (!result.success) {
|
|
1075
|
+
throw new Error("Invalid sandbox files response format");
|
|
1076
|
+
}
|
|
1077
|
+
return result.data;
|
|
1078
|
+
};
|
|
1079
|
+
const readSandboxFile = async (chatId, path, signal) => {
|
|
1080
|
+
const { data } = await genericClient.get(
|
|
1081
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,
|
|
1082
|
+
{ query: { path } },
|
|
1083
|
+
{ signal }
|
|
1084
|
+
);
|
|
1085
|
+
const result = sandboxFileContentSchema.safeParse(data);
|
|
1086
|
+
if (!result.success) {
|
|
1087
|
+
throw new Error("Invalid sandbox file response format");
|
|
1088
|
+
}
|
|
1089
|
+
return result.data;
|
|
1090
|
+
};
|
|
1091
|
+
const getSandboxGitBranch = async (chatId, signal) => {
|
|
1092
|
+
const { data } = await genericClient.get(
|
|
1093
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,
|
|
1094
|
+
{},
|
|
1095
|
+
{ signal }
|
|
1096
|
+
);
|
|
1097
|
+
const result = sandboxGitBranchSchema.safeParse(data);
|
|
1098
|
+
if (!result.success) {
|
|
1099
|
+
throw new Error("Invalid sandbox git-branch response format");
|
|
1100
|
+
}
|
|
1101
|
+
return result.data;
|
|
1102
|
+
};
|
|
1103
|
+
const chatStreamUrl = clientOptions.baseUrl + "/api/chat";
|
|
1104
|
+
return {
|
|
1105
|
+
getHistory,
|
|
1106
|
+
getChat,
|
|
1107
|
+
deleteChat,
|
|
1108
|
+
createChat,
|
|
1109
|
+
getVotes,
|
|
1110
|
+
submitVote,
|
|
1111
|
+
getUsage,
|
|
1112
|
+
approveToolCall,
|
|
1113
|
+
submitToolOutput,
|
|
1114
|
+
stopChat,
|
|
1115
|
+
getSuggestions,
|
|
1116
|
+
getAgentSettings,
|
|
1117
|
+
updateAgentSettings,
|
|
1118
|
+
getUserAgentSettings,
|
|
1119
|
+
updateUserAgentSettings,
|
|
1120
|
+
getToolsList,
|
|
1121
|
+
getSkillsList,
|
|
1122
|
+
listSandboxFiles,
|
|
1123
|
+
readSandboxFile,
|
|
1124
|
+
getSandboxGitBranch,
|
|
1125
|
+
chatStreamUrl
|
|
1126
|
+
};
|
|
1127
|
+
};
|
|
1128
|
+
|
|
1129
|
+
// src/keboola/createServiceClients.ts
|
|
1130
|
+
var createServiceClients = ({
|
|
1131
|
+
baseUrl,
|
|
1132
|
+
auth,
|
|
1133
|
+
getServiceBaseUrl,
|
|
1134
|
+
middlewareFor,
|
|
1135
|
+
attachTokenMiddleware
|
|
1136
|
+
}) => createServiceClientRegistry()({
|
|
1137
|
+
getServiceBaseUrl,
|
|
1138
|
+
onUnavailable: ({ serviceId, path, clientName }) => {
|
|
1139
|
+
throw new chunkS5XEXK36_cjs.ServiceUnavailableError(serviceId, path, clientName);
|
|
1140
|
+
}
|
|
1141
|
+
}).add({
|
|
1142
|
+
serviceId: "vault",
|
|
1143
|
+
clientName: "vault",
|
|
1144
|
+
clientFn: (serviceBaseUrl) => chunkX6BQTEIT_cjs.createVaultClient({
|
|
1145
|
+
baseUrl: serviceBaseUrl,
|
|
1146
|
+
middlewares: middlewareFor("vault", [attachTokenMiddleware]),
|
|
1147
|
+
auth
|
|
1148
|
+
})
|
|
1149
|
+
}).add({
|
|
1150
|
+
serviceId: "data-science",
|
|
1151
|
+
clientName: "dataScience",
|
|
1152
|
+
clientFn: (serviceBaseUrl) => chunkAFIQYB2O_cjs.createDataScienceClient({
|
|
1153
|
+
baseUrl: serviceBaseUrl,
|
|
1154
|
+
middlewares: middlewareFor("dataScience", [attachTokenMiddleware]),
|
|
1155
|
+
auth
|
|
1156
|
+
})
|
|
1157
|
+
}).add({
|
|
1158
|
+
serviceId: "encryption",
|
|
1159
|
+
clientName: "encryption",
|
|
1160
|
+
clientFn: (serviceBaseUrl) => chunkNRJTA5P3_cjs.createEncryptionClient({
|
|
1161
|
+
baseUrl: serviceBaseUrl,
|
|
1162
|
+
middlewares: middlewareFor("encryption")
|
|
1163
|
+
})
|
|
1164
|
+
}).add({
|
|
1165
|
+
serviceId: "editor",
|
|
1166
|
+
clientName: "editor",
|
|
1167
|
+
clientFn: (serviceBaseUrl) => chunkRTQEMQIC_cjs.createEditorClient({
|
|
1168
|
+
baseUrl: serviceBaseUrl,
|
|
1169
|
+
middlewares: middlewareFor("editor", [attachTokenMiddleware]),
|
|
1170
|
+
auth
|
|
1171
|
+
})
|
|
1172
|
+
}).add({
|
|
1173
|
+
serviceId: "sync-actions",
|
|
1174
|
+
clientName: "syncActions",
|
|
1175
|
+
clientFn: (serviceBaseUrl) => chunkHJQYMALV_cjs.createSyncActionsClient({
|
|
1176
|
+
baseUrl: serviceBaseUrl,
|
|
1177
|
+
middlewares: middlewareFor("syncActions", [attachTokenMiddleware]),
|
|
1178
|
+
auth
|
|
1179
|
+
})
|
|
1180
|
+
}).add({
|
|
1181
|
+
serviceId: "telemetry",
|
|
1182
|
+
clientName: "telemetry",
|
|
1183
|
+
clientFn: (serviceBaseUrl) => chunkDAAHTUXU_cjs.createTelemetryClient({
|
|
1184
|
+
baseUrl: serviceBaseUrl,
|
|
1185
|
+
middlewares: middlewareFor("telemetry", [attachTokenMiddleware]),
|
|
1186
|
+
auth
|
|
1187
|
+
})
|
|
1188
|
+
}).add({
|
|
1189
|
+
serviceId: "query",
|
|
1190
|
+
clientName: "queryService",
|
|
1191
|
+
clientFn: (serviceBaseUrl) => chunk3GTRQFWA_cjs.createQueryServiceClient({
|
|
1192
|
+
baseUrl: serviceBaseUrl,
|
|
1193
|
+
middlewares: middlewareFor("queryService", [attachTokenMiddleware]),
|
|
1194
|
+
auth
|
|
1195
|
+
})
|
|
1196
|
+
}).add({
|
|
1197
|
+
serviceId: "queue",
|
|
1198
|
+
clientName: "queue",
|
|
1199
|
+
clientFn: (serviceBaseUrl) => chunkNZN6OX4H_cjs.createQueueClient({
|
|
1200
|
+
baseUrl: serviceBaseUrl,
|
|
1201
|
+
middlewares: middlewareFor("queue", [attachTokenMiddleware]),
|
|
1202
|
+
auth
|
|
1203
|
+
})
|
|
1204
|
+
}).add({
|
|
1205
|
+
serviceId: "kai-assistant",
|
|
1206
|
+
clientName: "chat",
|
|
1207
|
+
clientFn: (serviceBaseUrl) => chunkDAS5UQN6_cjs.createChatClient({
|
|
1208
|
+
storageApiUrl: baseUrl,
|
|
1209
|
+
baseUrl: serviceBaseUrl,
|
|
1210
|
+
middlewares: middlewareFor("chat", [attachTokenMiddleware]),
|
|
1211
|
+
auth
|
|
1212
|
+
})
|
|
1213
|
+
}).add({
|
|
1214
|
+
serviceId: "ai",
|
|
1215
|
+
clientName: "ai",
|
|
1216
|
+
clientFn: (serviceBaseUrl) => chunkSB7AVZQU_cjs.createAiClient({
|
|
1217
|
+
baseUrl: serviceBaseUrl,
|
|
1218
|
+
middlewares: middlewareFor("ai", [attachTokenMiddleware]),
|
|
1219
|
+
auth
|
|
1220
|
+
})
|
|
1221
|
+
}).add({
|
|
1222
|
+
serviceId: "import",
|
|
1223
|
+
clientName: "import",
|
|
1224
|
+
clientFn: (serviceBaseUrl) => chunkHHULC5GT_cjs.createImportClient({
|
|
1225
|
+
baseUrl: serviceBaseUrl,
|
|
1226
|
+
middlewares: middlewareFor("import", [attachTokenMiddleware]),
|
|
1227
|
+
auth
|
|
1228
|
+
})
|
|
1229
|
+
}).add({
|
|
1230
|
+
serviceId: "kai-agent",
|
|
1231
|
+
clientName: "kaiAgent",
|
|
1232
|
+
clientFn: (serviceBaseUrl) => createKaiAgentClient({
|
|
1233
|
+
baseUrl: serviceBaseUrl,
|
|
1234
|
+
middlewares: middlewareFor("kaiAgent", [attachTokenMiddleware]),
|
|
1235
|
+
auth
|
|
1236
|
+
})
|
|
1237
|
+
}).add({
|
|
1238
|
+
serviceId: "oauth",
|
|
1239
|
+
clientName: "oauth",
|
|
1240
|
+
clientFn: (serviceBaseUrl) => chunkHUNYAVJJ_cjs.createOauthClient({
|
|
1241
|
+
baseUrl: serviceBaseUrl,
|
|
1242
|
+
middlewares: middlewareFor("oauth", [attachTokenMiddleware]),
|
|
1243
|
+
auth
|
|
1244
|
+
})
|
|
1245
|
+
}).add({
|
|
1246
|
+
serviceId: "scheduler",
|
|
1247
|
+
clientName: "scheduler",
|
|
1248
|
+
clientFn: (serviceBaseUrl) => chunkFDISA5KO_cjs.createSchedulerClient({
|
|
1249
|
+
baseUrl: serviceBaseUrl,
|
|
1250
|
+
middlewares: middlewareFor("scheduler", [attachTokenMiddleware]),
|
|
1251
|
+
auth
|
|
1252
|
+
})
|
|
1253
|
+
}).add({
|
|
1254
|
+
serviceId: "stream",
|
|
1255
|
+
clientName: "stream",
|
|
1256
|
+
clientFn: (serviceBaseUrl) => chunkOZMUKLXN_cjs.createStreamClient({
|
|
1257
|
+
baseUrl: serviceBaseUrl,
|
|
1258
|
+
middlewares: middlewareFor("stream", [attachTokenMiddleware]),
|
|
1259
|
+
auth
|
|
1260
|
+
})
|
|
1261
|
+
}).add({
|
|
1262
|
+
serviceId: "notification",
|
|
1263
|
+
clientName: "notifications",
|
|
1264
|
+
clientFn: (serviceBaseUrl) => chunkC5R6ITYD_cjs.createNotificationsClient({
|
|
1265
|
+
baseUrl: serviceBaseUrl,
|
|
1266
|
+
middlewares: middlewareFor("notifications", [attachTokenMiddleware]),
|
|
1267
|
+
auth
|
|
1268
|
+
})
|
|
1269
|
+
}).add({
|
|
1270
|
+
serviceId: "metastore",
|
|
1271
|
+
clientName: "metastore",
|
|
1272
|
+
clientFn: (serviceBaseUrl) => chunkLGWRJM5X_cjs.createMetastoreClient({
|
|
1273
|
+
baseUrl: serviceBaseUrl,
|
|
1274
|
+
middlewares: middlewareFor("metastore", [attachTokenMiddleware]),
|
|
1275
|
+
auth
|
|
1276
|
+
})
|
|
1277
|
+
}).build();
|
|
1278
|
+
|
|
1279
|
+
// src/keboola/bearer/createProjectClients.ts
|
|
1280
|
+
var createProjectClients = async ({
|
|
1281
|
+
baseUrl,
|
|
1282
|
+
projectId,
|
|
1283
|
+
authMiddleware,
|
|
1284
|
+
middlewareFor,
|
|
1285
|
+
clientServiceUrls
|
|
1286
|
+
}) => {
|
|
1287
|
+
const auth = { type: "bearer", token: "", projectId };
|
|
1288
|
+
const projectIdMiddleware = (next) => (request) => {
|
|
1289
|
+
request.request.headers.set(chunkIUN2ZSU3_cjs.KeboolaHttpHeader.PROJECT_ID, String(projectId));
|
|
1290
|
+
return next(request);
|
|
1291
|
+
};
|
|
1292
|
+
const attach = (next) => projectIdMiddleware(authMiddleware(next));
|
|
1293
|
+
const reader = chunkS5XEXK36_cjs.createStorageClient({ baseUrl, auth, middlewares: [attach] });
|
|
1294
|
+
const [stackInfo, sapiToken, devBranches] = await Promise.all([
|
|
1295
|
+
reader.getStackInfo({ exclude: "componentDetails" }),
|
|
1296
|
+
reader.tokens.verify(),
|
|
1297
|
+
reader.branches.getDevBranches()
|
|
1298
|
+
]);
|
|
1299
|
+
const stack = createStack({ stackInfo, clientServiceUrls });
|
|
1300
|
+
const defaultBranch = createDefaultBranch({ devBranches });
|
|
1301
|
+
const liveProject = createLiveProject({
|
|
1302
|
+
initialToken: sapiToken,
|
|
1303
|
+
verify: () => reader.tokens.verify()
|
|
1304
|
+
});
|
|
1305
|
+
const storageTableStore = createDerivedStore({
|
|
1306
|
+
source: liveProject.store,
|
|
1307
|
+
build: chunkUUY6LQT6_cjs.createStorageTable,
|
|
1308
|
+
dependsOn: (project) => ({
|
|
1309
|
+
useLegacyBucketPrefix: !project.hasFeature(chunk3FZHFTLG_cjs.ProjectFeature.DisableLegacyBucketPrefix),
|
|
1310
|
+
hasProtectedDefaultBranch: project.hasFeature(chunk3FZHFTLG_cjs.ProjectFeature.SoxProtectedDefaultBranch),
|
|
1311
|
+
hasStorageBranches: project.hasFeature(chunk3FZHFTLG_cjs.ProjectFeature.StorageBranches)
|
|
1312
|
+
})
|
|
1313
|
+
});
|
|
1314
|
+
const context = {
|
|
1315
|
+
stack,
|
|
1316
|
+
defaultBranch,
|
|
1317
|
+
get project() {
|
|
1318
|
+
return liveProject.getProject();
|
|
1319
|
+
},
|
|
1320
|
+
get st() {
|
|
1321
|
+
return storageTableStore.get();
|
|
1322
|
+
}
|
|
1323
|
+
};
|
|
1324
|
+
const storage = chunkS5XEXK36_cjs.createStorageClient({
|
|
1325
|
+
baseUrl,
|
|
1326
|
+
auth,
|
|
1327
|
+
middlewares: middlewareFor("storage", [attach, liveProject.middleware])
|
|
1328
|
+
});
|
|
1329
|
+
const { client: services, meta: serviceMeta } = createServiceClients({
|
|
1330
|
+
baseUrl,
|
|
1331
|
+
auth,
|
|
1332
|
+
getServiceBaseUrl: context.stack.getServiceUrl,
|
|
1333
|
+
middlewareFor,
|
|
1334
|
+
attachTokenMiddleware: attach
|
|
1335
|
+
});
|
|
1336
|
+
const sdk = {
|
|
1337
|
+
configuration: chunkZ76DIRLA_cjs.createConfigurationSdk({
|
|
1338
|
+
storageClient: storage,
|
|
1339
|
+
encryptionClient: services.encryption,
|
|
1340
|
+
context
|
|
1341
|
+
}),
|
|
1342
|
+
tag: chunkFRLSKIUI_cjs.createTagSdk({ metastoreClient: services.metastore }),
|
|
1343
|
+
semanticLayer: chunk4HBUVR57_cjs.createSemanticLayerSdk({ metastoreClient: services.metastore }),
|
|
1344
|
+
storage: chunkCBVGOANJ_cjs.createStorageSdk({ storageClient: storage }),
|
|
1345
|
+
vault: chunkEYIPM2XB_cjs.createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),
|
|
1346
|
+
variables: createVariablesSdk({ storageClient: storage })
|
|
1347
|
+
};
|
|
1348
|
+
return { context, serviceMeta, storage, ...services, sdk };
|
|
1349
|
+
};
|
|
1350
|
+
|
|
1351
|
+
// src/keboola/bearer/credential.ts
|
|
1352
|
+
var DEFAULT_REFRESH_THRESHOLD = 0.9;
|
|
1353
|
+
var isUnauthorized = (error) => error instanceof chunkIUN2ZSU3_cjs.ApiError && error.response.status === chunkIUN2ZSU3_cjs.HttpStatus.UNAUTHORIZED;
|
|
1354
|
+
var createBearerCredential = ({
|
|
1355
|
+
refresh,
|
|
1356
|
+
getToken,
|
|
1357
|
+
onSessionExpired,
|
|
1358
|
+
refreshThreshold = DEFAULT_REFRESH_THRESHOLD
|
|
1359
|
+
}) => {
|
|
1360
|
+
const doRefresh = async () => {
|
|
1361
|
+
try {
|
|
1362
|
+
return await refresh();
|
|
1363
|
+
} catch (error) {
|
|
1364
|
+
if (isUnauthorized(error)) onSessionExpired?.();
|
|
1365
|
+
throw error;
|
|
1366
|
+
}
|
|
1367
|
+
};
|
|
1368
|
+
const refreshShared = chunkYHMW7CZF_cjs.dedupe(doRefresh);
|
|
1369
|
+
const refreshAt = (timing) => timing.issuedAt + timing.expiresIn * 1e3 * refreshThreshold;
|
|
1370
|
+
const getAccessToken = async ({ forceRefresh = false } = {}) => {
|
|
1371
|
+
const snapshot = getToken();
|
|
1372
|
+
if (snapshot === null) return null;
|
|
1373
|
+
const { accessToken, timing } = snapshot;
|
|
1374
|
+
if (forceRefresh) return refreshShared();
|
|
1375
|
+
if (Date.now() < refreshAt(timing)) return accessToken;
|
|
1376
|
+
return refreshShared().catch(() => accessToken);
|
|
1377
|
+
};
|
|
1378
|
+
return { getAccessToken, notifyExpired: () => onSessionExpired?.() };
|
|
1379
|
+
};
|
|
1380
|
+
|
|
1381
|
+
// src/keboola/bearer/middleware.ts
|
|
1382
|
+
var createBearerAuthMiddleware = (credential) => {
|
|
1383
|
+
return (next) => async (request) => {
|
|
1384
|
+
const token = await credential.getAccessToken({ forceRefresh: false });
|
|
1385
|
+
if (token === null) return next(request);
|
|
1386
|
+
const retryRequest = request.request.clone();
|
|
1387
|
+
request.request.headers.set(chunkIUN2ZSU3_cjs.HttpHeader.AUTHORIZATION, `Bearer ${token}`);
|
|
1388
|
+
try {
|
|
1389
|
+
return await next(request);
|
|
1390
|
+
} catch (error) {
|
|
1391
|
+
if (!isUnauthorized(error)) throw error;
|
|
1392
|
+
const refreshed = await credential.getAccessToken({ forceRefresh: true });
|
|
1393
|
+
if (refreshed === null) throw error;
|
|
1394
|
+
retryRequest.headers.set(chunkIUN2ZSU3_cjs.HttpHeader.AUTHORIZATION, `Bearer ${refreshed}`);
|
|
1395
|
+
try {
|
|
1396
|
+
return await next({ ...request, request: retryRequest });
|
|
1397
|
+
} catch (retryError) {
|
|
1398
|
+
if (isUnauthorized(retryError)) credential.notifyExpired();
|
|
1399
|
+
throw retryError;
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
};
|
|
1403
|
+
};
|
|
1404
|
+
var SESSION_KEY = "keboola:bearer-session";
|
|
1405
|
+
var persistedSessionSchema = z2__namespace.object({
|
|
1406
|
+
baseUrl: z2__namespace.string().nullable(),
|
|
1407
|
+
projectId: z2__namespace.number().nullable(),
|
|
1408
|
+
refreshToken: z2__namespace.string().nullable()
|
|
1409
|
+
});
|
|
1410
|
+
var EMPTY_PERSISTED_SESSION = {
|
|
1411
|
+
baseUrl: null,
|
|
1412
|
+
projectId: null,
|
|
1413
|
+
refreshToken: null
|
|
1414
|
+
};
|
|
1415
|
+
var createSessionPersistor = (storage) => createPersistor({
|
|
1416
|
+
storage,
|
|
1417
|
+
key: SESSION_KEY,
|
|
1418
|
+
schema: persistedSessionSchema,
|
|
1419
|
+
defaultValue: EMPTY_PERSISTED_SESSION
|
|
1420
|
+
});
|
|
1421
|
+
|
|
1422
|
+
// src/keboola/bearer/keboola.ts
|
|
1423
|
+
var createKeboola = (options = {}) => {
|
|
1424
|
+
const persistor = createSessionPersistor(options.storage);
|
|
1425
|
+
const config = createConfig();
|
|
1426
|
+
const middlewareFor = createMiddlewareFor(options.middlewares);
|
|
1427
|
+
const retryContention = createRetryMiddleware({
|
|
1428
|
+
shouldRetry: (error) => error instanceof chunkIUN2ZSU3_cjs.ApiError && error.response.status === chunkIUN2ZSU3_cjs.HttpStatus.SERVICE_UNAVAILABLE
|
|
1429
|
+
});
|
|
1430
|
+
const authClientBare = createDerivedStore({
|
|
1431
|
+
source: config.store,
|
|
1432
|
+
dependsOn: (state) => state.baseUrl,
|
|
1433
|
+
build: (baseUrl) => baseUrl ? chunkXPQBE77T_cjs.createAuthClient({ baseUrl, middlewares: middlewareFor("auth", [retryContention]) }) : null
|
|
1434
|
+
});
|
|
1435
|
+
const refresh = async () => {
|
|
1436
|
+
const client = authClientBare.get();
|
|
1437
|
+
assert2(client, KeboolaErrorType.NotReady);
|
|
1438
|
+
const refreshed = await client.token.refresh(config.requireCredential().refreshToken);
|
|
1439
|
+
config.applyRefresh(refreshed);
|
|
1440
|
+
return refreshed.accessToken;
|
|
1441
|
+
};
|
|
1442
|
+
const getToken = () => {
|
|
1443
|
+
const state = config.store.get();
|
|
1444
|
+
if (state.status === "anonymous") return null;
|
|
1445
|
+
const { accessToken, issuedAt, expiresIn } = state.credential;
|
|
1446
|
+
return { accessToken, timing: { issuedAt, expiresIn } };
|
|
1447
|
+
};
|
|
1448
|
+
const signOut = () => {
|
|
1449
|
+
config.reset();
|
|
1450
|
+
persistor.clear();
|
|
1451
|
+
};
|
|
1452
|
+
const onSessionExpired = () => {
|
|
1453
|
+
if (config.notifyExpired()) signOut();
|
|
1454
|
+
};
|
|
1455
|
+
const credential = createBearerCredential({ refresh, getToken, onSessionExpired });
|
|
1456
|
+
const authMiddleware = createBearerAuthMiddleware(credential);
|
|
1457
|
+
const authClient = createDerivedStore({
|
|
1458
|
+
source: config.store,
|
|
1459
|
+
dependsOn: (state) => state.baseUrl,
|
|
1460
|
+
build: (baseUrl) => baseUrl ? chunkXPQBE77T_cjs.createAuthClient({
|
|
1461
|
+
baseUrl,
|
|
1462
|
+
middlewares: middlewareFor("auth", [retryContention, authMiddleware])
|
|
1463
|
+
}) : null
|
|
1464
|
+
});
|
|
1465
|
+
const management = createDerivedStore({
|
|
1466
|
+
source: config.store,
|
|
1467
|
+
dependsOn: (state) => state.status === "anonymous" ? null : state.baseUrl,
|
|
1468
|
+
build: (baseUrl) => baseUrl ? chunkYHMW7CZF_cjs.createManagementClient({
|
|
1469
|
+
baseUrl,
|
|
1470
|
+
auth: { type: "bearer", token: "" },
|
|
1471
|
+
middlewares: middlewareFor("management", [authMiddleware])
|
|
1472
|
+
}) : null
|
|
1473
|
+
});
|
|
1474
|
+
const projectClientsAsync = createDerivedAsyncStore({
|
|
1475
|
+
source: config.store,
|
|
1476
|
+
// Keyed on baseUrl + projectId only — a rotation (new credential, same project) must not rebuild.
|
|
1477
|
+
dependsOn: (state) => state.status === "scoped" ? { baseUrl: state.baseUrl, projectId: state.projectId } : null,
|
|
1478
|
+
build: ({ baseUrl, projectId }) => {
|
|
1479
|
+
return createProjectClients({
|
|
1480
|
+
baseUrl,
|
|
1481
|
+
authMiddleware,
|
|
1482
|
+
projectId,
|
|
1483
|
+
middlewareFor,
|
|
1484
|
+
clientServiceUrls: options.clientServiceUrls
|
|
1485
|
+
});
|
|
1486
|
+
}
|
|
1487
|
+
});
|
|
1488
|
+
if (options.baseUrl) config.setBaseUrl(options.baseUrl);
|
|
1489
|
+
config.store.subscribe((state) => {
|
|
1490
|
+
if (state.status === "anonymous") return;
|
|
1491
|
+
persistor.persist({
|
|
1492
|
+
baseUrl: state.baseUrl,
|
|
1493
|
+
projectId: state.status === "scoped" ? state.projectId : null,
|
|
1494
|
+
refreshToken: state.credential.refreshToken
|
|
1495
|
+
});
|
|
1496
|
+
});
|
|
1497
|
+
const debug = () => ({
|
|
1498
|
+
type: "Bearer",
|
|
1499
|
+
config: config.debug(),
|
|
1500
|
+
authReady: authClient.get() !== null,
|
|
1501
|
+
managementReady: management.get() !== null,
|
|
1502
|
+
storage: projectClientsAsync.store.get().state
|
|
1503
|
+
});
|
|
1504
|
+
const session = {
|
|
1505
|
+
hasPersistedValue: persistor.hasPersistedValue,
|
|
1506
|
+
setBaseUrl: config.setBaseUrl,
|
|
1507
|
+
isStorageReady: () => projectClientsAsync.store.get().state === "ready",
|
|
1508
|
+
authenticate: (tokens) => config.authenticate(tokens),
|
|
1509
|
+
setProject: config.setProjectId,
|
|
1510
|
+
setProjectAsync: async (projectId) => {
|
|
1511
|
+
config.setProjectId(projectId);
|
|
1512
|
+
await projectClientsAsync.settled();
|
|
1513
|
+
},
|
|
1514
|
+
reset: signOut,
|
|
1515
|
+
/**
|
|
1516
|
+
* Dev/test only: mark the current access token as expired so the bearer credential rotates it on
|
|
1517
|
+
* the next request. Pair with any authenticated call (e.g. `api.storage.tokens.verify()`) to force
|
|
1518
|
+
* the rotation immediately and observe the new credential.
|
|
1519
|
+
*/
|
|
1520
|
+
debugForceRefresh: config.forceExpire,
|
|
1521
|
+
restore: async () => {
|
|
1522
|
+
const persisted = persistor.hydrate();
|
|
1523
|
+
if (!persisted.refreshToken || !persisted.baseUrl) return { status: "empty" };
|
|
1524
|
+
const configured = config.getBaseUrl();
|
|
1525
|
+
if (configured && configured !== persisted.baseUrl) {
|
|
1526
|
+
persistor.clear();
|
|
1527
|
+
return { status: "empty" };
|
|
1528
|
+
}
|
|
1529
|
+
if (!configured) config.setBaseUrl(persisted.baseUrl);
|
|
1530
|
+
const client = authClientBare.get();
|
|
1531
|
+
assert2(client, KeboolaErrorType.NotReady);
|
|
1532
|
+
try {
|
|
1533
|
+
const refreshed = await client.token.refresh(persisted.refreshToken);
|
|
1534
|
+
config.authenticate(refreshed);
|
|
1535
|
+
if (persisted.projectId !== null) {
|
|
1536
|
+
config.setProjectId(persisted.projectId);
|
|
1537
|
+
await projectClientsAsync.settled();
|
|
1538
|
+
}
|
|
1539
|
+
return { status: "restored" };
|
|
1540
|
+
} catch (err) {
|
|
1541
|
+
if (isUnauthorized(err)) {
|
|
1542
|
+
persistor.clear();
|
|
1543
|
+
return { status: "expired" };
|
|
1544
|
+
}
|
|
1545
|
+
throw err;
|
|
1546
|
+
}
|
|
1547
|
+
},
|
|
1548
|
+
subscribe: (listener) => {
|
|
1549
|
+
const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
|
|
1550
|
+
const unsubscribeBuild = projectClientsAsync.store.subscribe(() => listener(debug()));
|
|
1551
|
+
return () => {
|
|
1552
|
+
unsubscribeConfig();
|
|
1553
|
+
unsubscribeBuild();
|
|
1554
|
+
};
|
|
1555
|
+
},
|
|
1556
|
+
debug
|
|
1557
|
+
};
|
|
1558
|
+
const api = createApi({
|
|
1559
|
+
getAuthClient: () => authClient.get(),
|
|
1560
|
+
getManagementClient: () => management.get(),
|
|
1561
|
+
getProjectClients: () => {
|
|
1562
|
+
const state = projectClientsAsync.store.get();
|
|
1563
|
+
return state.state === "ready" ? state.value : null;
|
|
1564
|
+
}
|
|
1565
|
+
});
|
|
1566
|
+
return { api, session };
|
|
1567
|
+
};
|
|
1568
|
+
|
|
1569
|
+
// src/keboola/legacy/createConfig.ts
|
|
1570
|
+
var createConfig2 = () => {
|
|
1571
|
+
const store = createStore({ baseUrl: null, sapiToken: null, managementToken: null });
|
|
1572
|
+
const setBaseUrl = (baseUrl) => {
|
|
1573
|
+
store.set({ ...store.get(), baseUrl });
|
|
1574
|
+
};
|
|
1575
|
+
const authenticate = (tokens) => {
|
|
1576
|
+
const current = store.get();
|
|
1577
|
+
store.set({
|
|
1578
|
+
...current,
|
|
1579
|
+
sapiToken: tokens.sapiToken ?? current.sapiToken,
|
|
1580
|
+
managementToken: tokens.managementToken ?? current.managementToken
|
|
1581
|
+
});
|
|
1582
|
+
};
|
|
1583
|
+
const getStorageToken = () => store.get().sapiToken ?? "";
|
|
1584
|
+
const setStorageToken = (sapiToken) => store.set({ ...store.get(), sapiToken });
|
|
1585
|
+
const debug = () => store.get();
|
|
1586
|
+
return { store, setBaseUrl, authenticate, getStorageToken, setStorageToken, debug };
|
|
619
1587
|
};
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
1588
|
+
|
|
1589
|
+
// src/keboola/legacy/createProjectClients.ts
|
|
1590
|
+
var createAttachStorageToken = (getToken) => (next) => (request) => {
|
|
1591
|
+
request.request.headers.set(chunkIUN2ZSU3_cjs.KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());
|
|
1592
|
+
return next(request);
|
|
624
1593
|
};
|
|
625
|
-
var
|
|
1594
|
+
var createProjectClients2 = async ({
|
|
626
1595
|
baseUrl,
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
1596
|
+
getStorageToken,
|
|
1597
|
+
onStorageTokenRefreshed,
|
|
1598
|
+
middlewareFor,
|
|
1599
|
+
clientServiceUrls
|
|
630
1600
|
}) => {
|
|
631
|
-
const
|
|
632
|
-
const
|
|
633
|
-
const _storage =
|
|
634
|
-
baseUrl,
|
|
635
|
-
auth: { type: "sapi-token", token: token.storageApi },
|
|
636
|
-
middlewares: [liveToken.attachTokenMiddleware]
|
|
637
|
-
});
|
|
1601
|
+
const auth = { type: "sapi-token", token: getStorageToken() };
|
|
1602
|
+
const attach = createAttachStorageToken(getStorageToken);
|
|
1603
|
+
const _storage = chunkS5XEXK36_cjs.createStorageClient({ baseUrl, auth, middlewares: [attach] });
|
|
638
1604
|
const [stackInfo, sapiToken, devBranches] = await Promise.all([
|
|
639
1605
|
_storage.getStackInfo({ exclude: "componentDetails" }),
|
|
640
1606
|
_storage.tokens.verify(),
|
|
@@ -655,176 +1621,6 @@ var createClients = async ({
|
|
|
655
1621
|
hasStorageBranches: project.hasFeature(chunk3FZHFTLG_cjs.ProjectFeature.StorageBranches)
|
|
656
1622
|
})
|
|
657
1623
|
});
|
|
658
|
-
const storage = chunk4JCVPUXF_cjs.createStorageClient({
|
|
659
|
-
baseUrl,
|
|
660
|
-
auth: { type: "sapi-token", token: token.storageApi },
|
|
661
|
-
middlewares: middlewareFor("storage", [liveProject.middleware]),
|
|
662
|
-
onRefreshToken: liveToken.set
|
|
663
|
-
});
|
|
664
|
-
const management = chunkSWJHENEP_cjs.createManagementClient({
|
|
665
|
-
baseUrl,
|
|
666
|
-
auth: { type: "management-token", token: token.managementApi },
|
|
667
|
-
middlewares: middlewareFor("management", [liveProject.middleware])
|
|
668
|
-
});
|
|
669
|
-
const auth = chunkN3GNUFMA_cjs.createAuthClient({
|
|
670
|
-
baseUrl,
|
|
671
|
-
middlewares: middlewareFor("auth")
|
|
672
|
-
});
|
|
673
|
-
const { client, meta } = createServiceClientRegistry()({
|
|
674
|
-
getServiceBaseUrl: (serviceId) => stack.getServiceUrl(serviceId),
|
|
675
|
-
onUnavailable: ({ serviceId, path, clientName }) => {
|
|
676
|
-
throw new chunk4JCVPUXF_cjs.ServiceUnavailableError(serviceId, path, clientName);
|
|
677
|
-
}
|
|
678
|
-
}).add({
|
|
679
|
-
serviceId: "vault",
|
|
680
|
-
clientName: "vault",
|
|
681
|
-
clientFn: (serviceBaseUrl) => chunkANRUSNYD_cjs.createVaultClient({
|
|
682
|
-
baseUrl: serviceBaseUrl,
|
|
683
|
-
middlewares: middlewareFor("vault", [liveToken.attachTokenMiddleware]),
|
|
684
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
685
|
-
})
|
|
686
|
-
}).add({
|
|
687
|
-
serviceId: "data-science",
|
|
688
|
-
clientName: "dataScience",
|
|
689
|
-
clientFn: (serviceBaseUrl) => chunk4H2DDEUI_cjs.createDataScienceClient({
|
|
690
|
-
baseUrl: serviceBaseUrl,
|
|
691
|
-
middlewares: middlewareFor("dataScience", [liveToken.attachTokenMiddleware]),
|
|
692
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
693
|
-
})
|
|
694
|
-
}).add({
|
|
695
|
-
serviceId: "encryption",
|
|
696
|
-
clientName: "encryption",
|
|
697
|
-
clientFn: (serviceBaseUrl) => chunkNRJTA5P3_cjs.createEncryptionClient({
|
|
698
|
-
baseUrl: serviceBaseUrl,
|
|
699
|
-
middlewares: middlewareFor("encryption")
|
|
700
|
-
})
|
|
701
|
-
}).add({
|
|
702
|
-
serviceId: "editor",
|
|
703
|
-
clientName: "editor",
|
|
704
|
-
clientFn: (serviceBaseUrl) => chunkAKDJSXVJ_cjs.createEditorClient({
|
|
705
|
-
baseUrl: serviceBaseUrl,
|
|
706
|
-
middlewares: middlewareFor("editor", [liveToken.attachTokenMiddleware]),
|
|
707
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
708
|
-
})
|
|
709
|
-
}).add({
|
|
710
|
-
serviceId: "sync-actions",
|
|
711
|
-
clientName: "syncActions",
|
|
712
|
-
clientFn: (serviceBaseUrl) => chunkSTAQJVW4_cjs.createSyncActionsClient({
|
|
713
|
-
baseUrl: serviceBaseUrl,
|
|
714
|
-
middlewares: middlewareFor("syncActions", [liveToken.attachTokenMiddleware]),
|
|
715
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
716
|
-
})
|
|
717
|
-
}).add({
|
|
718
|
-
serviceId: "telemetry",
|
|
719
|
-
clientName: "telemetry",
|
|
720
|
-
clientFn: (serviceBaseUrl) => chunkXISA4SYM_cjs.createTelemetryClient({
|
|
721
|
-
baseUrl: serviceBaseUrl,
|
|
722
|
-
middlewares: middlewareFor("telemetry", [liveToken.attachTokenMiddleware]),
|
|
723
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
724
|
-
})
|
|
725
|
-
}).add({
|
|
726
|
-
serviceId: "query",
|
|
727
|
-
clientName: "queryService",
|
|
728
|
-
clientFn: (serviceBaseUrl) => chunkYLHZ2H7O_cjs.createQueryServiceClient({
|
|
729
|
-
baseUrl: serviceBaseUrl,
|
|
730
|
-
middlewares: middlewareFor("queryService", [liveToken.attachTokenMiddleware]),
|
|
731
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
732
|
-
})
|
|
733
|
-
}).add({
|
|
734
|
-
serviceId: "queue",
|
|
735
|
-
clientName: "queue",
|
|
736
|
-
clientFn: (serviceBaseUrl) => chunkYOPRPXER_cjs.createQueueClient({
|
|
737
|
-
baseUrl: serviceBaseUrl,
|
|
738
|
-
middlewares: middlewareFor("queue", [liveToken.attachTokenMiddleware]),
|
|
739
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
740
|
-
})
|
|
741
|
-
}).add({
|
|
742
|
-
serviceId: "kai-assistant",
|
|
743
|
-
clientName: "chat",
|
|
744
|
-
clientFn: (serviceBaseUrl) => chunkJIAMBOU7_cjs.createChatClient({
|
|
745
|
-
storageApiUrl: baseUrl,
|
|
746
|
-
baseUrl: serviceBaseUrl,
|
|
747
|
-
middlewares: middlewareFor("chat", [liveToken.attachTokenMiddleware]),
|
|
748
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
749
|
-
})
|
|
750
|
-
}).add({
|
|
751
|
-
serviceId: "ai",
|
|
752
|
-
clientName: "ai",
|
|
753
|
-
clientFn: (serviceBaseUrl) => chunkJJXTE2SL_cjs.createAiClient({
|
|
754
|
-
baseUrl: serviceBaseUrl,
|
|
755
|
-
middlewares: middlewareFor("ai", [liveToken.attachTokenMiddleware]),
|
|
756
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
757
|
-
})
|
|
758
|
-
}).add({
|
|
759
|
-
serviceId: "import",
|
|
760
|
-
clientName: "import",
|
|
761
|
-
clientFn: (serviceBaseUrl) => chunkMLCMKHMK_cjs.createImportClient({
|
|
762
|
-
baseUrl: serviceBaseUrl,
|
|
763
|
-
middlewares: middlewareFor("import", [liveToken.attachTokenMiddleware]),
|
|
764
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
765
|
-
})
|
|
766
|
-
}).add({
|
|
767
|
-
serviceId: "kai-agent",
|
|
768
|
-
clientName: "kaiAgent",
|
|
769
|
-
clientFn: (serviceBaseUrl) => createKaiAgentClient({
|
|
770
|
-
baseUrl: serviceBaseUrl,
|
|
771
|
-
middlewares: middlewareFor("kaiAgent", [liveToken.attachTokenMiddleware]),
|
|
772
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
773
|
-
})
|
|
774
|
-
}).add({
|
|
775
|
-
serviceId: "oauth",
|
|
776
|
-
clientName: "oauth",
|
|
777
|
-
clientFn: (serviceBaseUrl) => chunkQQJXXNUE_cjs.createOauthClient({
|
|
778
|
-
baseUrl: serviceBaseUrl,
|
|
779
|
-
middlewares: middlewareFor("oauth", [liveToken.attachTokenMiddleware]),
|
|
780
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
781
|
-
})
|
|
782
|
-
}).add({
|
|
783
|
-
serviceId: "scheduler",
|
|
784
|
-
clientName: "scheduler",
|
|
785
|
-
clientFn: (serviceBaseUrl) => chunkG7VCXMQB_cjs.createSchedulerClient({
|
|
786
|
-
baseUrl: serviceBaseUrl,
|
|
787
|
-
middlewares: middlewareFor("scheduler", [liveToken.attachTokenMiddleware]),
|
|
788
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
789
|
-
})
|
|
790
|
-
}).add({
|
|
791
|
-
serviceId: "stream",
|
|
792
|
-
clientName: "stream",
|
|
793
|
-
clientFn: (serviceBaseUrl) => chunkEKWD4ODT_cjs.createStreamClient({
|
|
794
|
-
baseUrl: serviceBaseUrl,
|
|
795
|
-
middlewares: middlewareFor("stream", [liveToken.attachTokenMiddleware]),
|
|
796
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
797
|
-
})
|
|
798
|
-
}).add({
|
|
799
|
-
serviceId: "notification",
|
|
800
|
-
clientName: "notifications",
|
|
801
|
-
clientFn: (serviceBaseUrl) => chunkIZWNTRMT_cjs.createNotificationsClient({
|
|
802
|
-
baseUrl: serviceBaseUrl,
|
|
803
|
-
middlewares: middlewareFor("notifications", [liveToken.attachTokenMiddleware]),
|
|
804
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
805
|
-
})
|
|
806
|
-
}).add({
|
|
807
|
-
serviceId: "metastore",
|
|
808
|
-
clientName: "metastore",
|
|
809
|
-
clientFn: (serviceBaseUrl) => chunkZLW3243Q_cjs.createMetastoreClient({
|
|
810
|
-
baseUrl: serviceBaseUrl,
|
|
811
|
-
middlewares: middlewareFor("metastore", [liveToken.attachTokenMiddleware]),
|
|
812
|
-
auth: { type: "sapi-token", token: token.storageApi }
|
|
813
|
-
})
|
|
814
|
-
}).build();
|
|
815
|
-
const tag = chunkBR3SBEFE_cjs.createTagSdk({
|
|
816
|
-
metastoreClient: client.metastore
|
|
817
|
-
});
|
|
818
|
-
const storageSdk = chunkAWRMGLMT_cjs.createStorageSdk({
|
|
819
|
-
storageClient: storage
|
|
820
|
-
});
|
|
821
|
-
const vault = chunkIWIN6HKU_cjs.createVaultSdk({
|
|
822
|
-
vaultClient: client.vault,
|
|
823
|
-
encryptionClient: client.encryption
|
|
824
|
-
});
|
|
825
|
-
const variables = createVariablesSdk({
|
|
826
|
-
storageClient: storage
|
|
827
|
-
});
|
|
828
1624
|
const context = {
|
|
829
1625
|
stack,
|
|
830
1626
|
defaultBranch,
|
|
@@ -833,273 +1629,161 @@ var createClients = async ({
|
|
|
833
1629
|
},
|
|
834
1630
|
get st() {
|
|
835
1631
|
return storageTableStore.get();
|
|
836
|
-
}
|
|
837
|
-
serviceMeta: meta
|
|
1632
|
+
}
|
|
838
1633
|
};
|
|
839
|
-
const
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
1634
|
+
const storage = chunkS5XEXK36_cjs.createStorageClient({
|
|
1635
|
+
baseUrl,
|
|
1636
|
+
auth,
|
|
1637
|
+
middlewares: middlewareFor("storage", [liveProject.middleware]),
|
|
1638
|
+
onRefreshToken: onStorageTokenRefreshed
|
|
843
1639
|
});
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
// clients
|
|
847
|
-
storage,
|
|
848
|
-
management,
|
|
1640
|
+
const { client: services, meta: serviceMeta } = createServiceClients({
|
|
1641
|
+
baseUrl,
|
|
849
1642
|
auth,
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
};
|
|
866
|
-
const result = { init };
|
|
867
|
-
const handler = {
|
|
868
|
-
get(_, property) {
|
|
869
|
-
if (isBuiltInProperty(property)) return void 0;
|
|
870
|
-
if (property === "init") return init;
|
|
871
|
-
assert(clients, `API is not initialized. Call init() before accessing ${String(property)}`);
|
|
872
|
-
return clients[property];
|
|
873
|
-
}
|
|
1643
|
+
getServiceBaseUrl: context.stack.getServiceUrl,
|
|
1644
|
+
middlewareFor,
|
|
1645
|
+
attachTokenMiddleware: attach
|
|
1646
|
+
});
|
|
1647
|
+
const sdk = {
|
|
1648
|
+
configuration: chunkZ76DIRLA_cjs.createConfigurationSdk({
|
|
1649
|
+
storageClient: storage,
|
|
1650
|
+
encryptionClient: services.encryption,
|
|
1651
|
+
context
|
|
1652
|
+
}),
|
|
1653
|
+
tag: chunkFRLSKIUI_cjs.createTagSdk({ metastoreClient: services.metastore }),
|
|
1654
|
+
semanticLayer: chunk4HBUVR57_cjs.createSemanticLayerSdk({ metastoreClient: services.metastore }),
|
|
1655
|
+
storage: chunkCBVGOANJ_cjs.createStorageSdk({ storageClient: storage }),
|
|
1656
|
+
vault: chunkEYIPM2XB_cjs.createVaultSdk({ vaultClient: services.vault, encryptionClient: services.encryption }),
|
|
1657
|
+
variables: createVariablesSdk({ storageClient: storage })
|
|
874
1658
|
};
|
|
875
|
-
return
|
|
1659
|
+
return { context, serviceMeta, storage, ...services, sdk };
|
|
876
1660
|
};
|
|
877
1661
|
|
|
878
|
-
// src/
|
|
879
|
-
var
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
];
|
|
887
|
-
var ALWAYS_REDACTED_QUERY_PARAMS = /* @__PURE__ */ new Set([
|
|
888
|
-
"token",
|
|
889
|
-
"apikey",
|
|
890
|
-
"api_key",
|
|
891
|
-
"access_token",
|
|
892
|
-
"refresh_token",
|
|
893
|
-
"code",
|
|
894
|
-
"state",
|
|
895
|
-
"signature",
|
|
896
|
-
"sig",
|
|
897
|
-
"x-amz-signature",
|
|
898
|
-
"x-amz-credential",
|
|
899
|
-
"x-amz-security-token",
|
|
900
|
-
"password",
|
|
901
|
-
"secret"
|
|
902
|
-
]);
|
|
903
|
-
var REDACTED = "[REDACTED]";
|
|
904
|
-
var getRedactedUrl = (rawUrl) => {
|
|
905
|
-
const url = new URL(rawUrl);
|
|
906
|
-
if (url.username) url.username = REDACTED;
|
|
907
|
-
if (url.password) url.password = REDACTED;
|
|
908
|
-
url.searchParams.forEach((_value, key) => {
|
|
909
|
-
if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {
|
|
910
|
-
url.searchParams.set(key, REDACTED);
|
|
911
|
-
}
|
|
1662
|
+
// src/keboola/legacy/keboola.ts
|
|
1663
|
+
var createLegacyKeboola = (options = {}) => {
|
|
1664
|
+
const config = createConfig2();
|
|
1665
|
+
const middlewareFor = createMiddlewareFor(options.middlewares);
|
|
1666
|
+
const authClient = createDerivedStore({
|
|
1667
|
+
source: config.store,
|
|
1668
|
+
dependsOn: (state) => state.baseUrl,
|
|
1669
|
+
build: (baseUrl) => baseUrl ? chunkXPQBE77T_cjs.createAuthClient({ baseUrl, middlewares: middlewareFor("auth", []) }) : null
|
|
912
1670
|
});
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
const redactedSet = new Set(
|
|
922
|
-
[...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase())
|
|
923
|
-
);
|
|
924
|
-
const result = {};
|
|
925
|
-
headers.forEach((value, name) => {
|
|
926
|
-
result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;
|
|
1671
|
+
const management = createDerivedStore({
|
|
1672
|
+
source: config.store,
|
|
1673
|
+
dependsOn: (state) => ({ baseUrl: state.baseUrl, token: state.managementToken }),
|
|
1674
|
+
build: ({ baseUrl, token }) => baseUrl ? chunkYHMW7CZF_cjs.createManagementClient({
|
|
1675
|
+
baseUrl,
|
|
1676
|
+
auth: token ? { type: "management-token", token } : { type: "management-token" },
|
|
1677
|
+
middlewares: middlewareFor("management", [])
|
|
1678
|
+
}) : null
|
|
927
1679
|
});
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
});
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
data: error.data
|
|
950
|
-
});
|
|
951
|
-
var formatLog = (level, log) => {
|
|
952
|
-
const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];
|
|
953
|
-
parts.push(log.request.url);
|
|
954
|
-
if ("response" in log) parts.push(String(log.response.status));
|
|
955
|
-
return parts.join(" ");
|
|
956
|
-
};
|
|
957
|
-
var createSafeLogger = (logger, level = "error-only") => {
|
|
958
|
-
return {
|
|
959
|
-
info: (log) => {
|
|
960
|
-
if (level !== "all") return;
|
|
961
|
-
try {
|
|
962
|
-
if (logger?.info) {
|
|
963
|
-
logger.info(log);
|
|
964
|
-
return;
|
|
965
|
-
}
|
|
966
|
-
console.info(formatLog("info", log));
|
|
967
|
-
} catch {
|
|
968
|
-
}
|
|
969
|
-
},
|
|
970
|
-
error: (log) => {
|
|
971
|
-
try {
|
|
972
|
-
if (logger?.error) {
|
|
973
|
-
logger.error(log);
|
|
974
|
-
return;
|
|
975
|
-
}
|
|
976
|
-
console.error(formatLog("error", log));
|
|
977
|
-
} catch {
|
|
978
|
-
}
|
|
979
|
-
}
|
|
1680
|
+
const build = createDerivedAsyncStore({
|
|
1681
|
+
source: config.store,
|
|
1682
|
+
dependsOn: (state) => state.sapiToken && state.baseUrl ? state.baseUrl : null,
|
|
1683
|
+
build: (baseUrl) => createProjectClients2({
|
|
1684
|
+
baseUrl,
|
|
1685
|
+
getStorageToken: config.getStorageToken,
|
|
1686
|
+
onStorageTokenRefreshed: config.setStorageToken,
|
|
1687
|
+
middlewareFor,
|
|
1688
|
+
clientServiceUrls: options.clientServiceUrls
|
|
1689
|
+
})
|
|
1690
|
+
});
|
|
1691
|
+
if (options.baseUrl) config.setBaseUrl(options.baseUrl);
|
|
1692
|
+
const debug = () => {
|
|
1693
|
+
const info = config.debug();
|
|
1694
|
+
return {
|
|
1695
|
+
type: "Sapi",
|
|
1696
|
+
config: info,
|
|
1697
|
+
authReady: authClient.get() !== null,
|
|
1698
|
+
managementReady: !!info.managementToken,
|
|
1699
|
+
storage: build.store.get().state
|
|
1700
|
+
};
|
|
980
1701
|
};
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
const
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
return result;
|
|
1000
|
-
} catch (error) {
|
|
1001
|
-
if (error instanceof Error)
|
|
1002
|
-
safeLogger.error({
|
|
1003
|
-
correlationId,
|
|
1004
|
-
method,
|
|
1005
|
-
durationMs: performance.now() - start,
|
|
1006
|
-
request: requestLog,
|
|
1007
|
-
error: chunkIUN2ZSU3_cjs.isApiError(error) ? redactApiError(error, redactHeaders) : error
|
|
1008
|
-
});
|
|
1009
|
-
throw error;
|
|
1010
|
-
}
|
|
1702
|
+
const session = {
|
|
1703
|
+
setBaseUrl: config.setBaseUrl,
|
|
1704
|
+
isStorageReady: () => build.store.get().state === "ready",
|
|
1705
|
+
authenticateStorage: (sapiToken) => config.authenticate({ sapiToken }),
|
|
1706
|
+
authenticateStorageAsync: async (sapiToken) => {
|
|
1707
|
+
config.authenticate({ sapiToken });
|
|
1708
|
+
await build.settled();
|
|
1709
|
+
},
|
|
1710
|
+
authenticateManagement: (managementToken) => config.authenticate({ managementToken }),
|
|
1711
|
+
subscribe: (listener) => {
|
|
1712
|
+
const unsubscribeConfig = config.store.subscribe(() => listener(debug()));
|
|
1713
|
+
const unsubscribeBuild = build.store.subscribe(() => listener(debug()));
|
|
1714
|
+
return () => {
|
|
1715
|
+
unsubscribeConfig();
|
|
1716
|
+
unsubscribeBuild();
|
|
1717
|
+
};
|
|
1718
|
+
},
|
|
1719
|
+
debug
|
|
1011
1720
|
};
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
chunkIUN2ZSU3_cjs.HttpStatus.BAD_GATEWAY,
|
|
1019
|
-
chunkIUN2ZSU3_cjs.HttpStatus.SERVICE_UNAVAILABLE,
|
|
1020
|
-
chunkIUN2ZSU3_cjs.HttpStatus.GATEWAY_TIMEOUT
|
|
1021
|
-
];
|
|
1022
|
-
var DEFAULT_BACKOFF_FACTOR = 0.3;
|
|
1023
|
-
var defaultShouldRetry = (error) => error instanceof chunkIUN2ZSU3_cjs.ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);
|
|
1024
|
-
var createRetryMiddleware = (options) => {
|
|
1025
|
-
const {
|
|
1026
|
-
maxRetries = DEFAULT_MAX_RETRIES,
|
|
1027
|
-
backoffFactor = DEFAULT_BACKOFF_FACTOR,
|
|
1028
|
-
shouldRetry = defaultShouldRetry
|
|
1029
|
-
} = options ?? {};
|
|
1030
|
-
if (!Number.isInteger(maxRetries) || maxRetries < 0) {
|
|
1031
|
-
throw new RangeError("maxRetries must be a non-negative integer");
|
|
1032
|
-
}
|
|
1033
|
-
if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {
|
|
1034
|
-
throw new RangeError("backoffFactor must be a finite non-negative number");
|
|
1035
|
-
}
|
|
1036
|
-
return (next) => async (request) => {
|
|
1037
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
1038
|
-
try {
|
|
1039
|
-
return await next({ ...request, request: request.request.clone() });
|
|
1040
|
-
} catch (error) {
|
|
1041
|
-
if (attempt === maxRetries || !shouldRetry(error, attempt)) {
|
|
1042
|
-
throw error;
|
|
1043
|
-
}
|
|
1044
|
-
const delayMs = backoffFactor * 1e3 * Math.pow(2, attempt);
|
|
1045
|
-
await chunkAWRMGLMT_cjs.delay(delayMs, request.request.signal ?? void 0);
|
|
1046
|
-
}
|
|
1721
|
+
const api = createApi({
|
|
1722
|
+
getAuthClient: () => authClient.get(),
|
|
1723
|
+
getManagementClient: () => management.get(),
|
|
1724
|
+
getProjectClients: () => {
|
|
1725
|
+
const state = build.store.get();
|
|
1726
|
+
return state.state === "ready" ? state.value : null;
|
|
1047
1727
|
}
|
|
1048
|
-
|
|
1049
|
-
};
|
|
1728
|
+
});
|
|
1729
|
+
return { api, session };
|
|
1050
1730
|
};
|
|
1051
1731
|
|
|
1052
|
-
Object.defineProperty(exports, "
|
|
1732
|
+
Object.defineProperty(exports, "isEmptyDeep", {
|
|
1733
|
+
enumerable: true,
|
|
1734
|
+
get: function () { return chunkZ76DIRLA_cjs.isEmptyDeep; }
|
|
1735
|
+
});
|
|
1736
|
+
Object.defineProperty(exports, "schemaGuidedMerge", {
|
|
1053
1737
|
enumerable: true,
|
|
1054
|
-
get: function () { return
|
|
1738
|
+
get: function () { return chunkZ76DIRLA_cjs.schemaGuidedMerge; }
|
|
1055
1739
|
});
|
|
1056
1740
|
Object.defineProperty(exports, "keboolaUID", {
|
|
1057
1741
|
enumerable: true,
|
|
1058
|
-
get: function () { return
|
|
1742
|
+
get: function () { return chunkFRLSKIUI_cjs.keboolaUID; }
|
|
1743
|
+
});
|
|
1744
|
+
Object.defineProperty(exports, "generateUUID", {
|
|
1745
|
+
enumerable: true,
|
|
1746
|
+
get: function () { return chunkEWMXK3EI_cjs.generateUUID; }
|
|
1059
1747
|
});
|
|
1060
1748
|
Object.defineProperty(exports, "PollException", {
|
|
1061
1749
|
enumerable: true,
|
|
1062
|
-
get: function () { return
|
|
1750
|
+
get: function () { return chunkCBVGOANJ_cjs.PollException; }
|
|
1063
1751
|
});
|
|
1064
1752
|
Object.defineProperty(exports, "createStorageSdk", {
|
|
1065
1753
|
enumerable: true,
|
|
1066
|
-
get: function () { return
|
|
1754
|
+
get: function () { return chunkCBVGOANJ_cjs.createStorageSdk; }
|
|
1067
1755
|
});
|
|
1068
1756
|
Object.defineProperty(exports, "delay", {
|
|
1069
1757
|
enumerable: true,
|
|
1070
|
-
get: function () { return
|
|
1758
|
+
get: function () { return chunkCBVGOANJ_cjs.delay; }
|
|
1071
1759
|
});
|
|
1072
1760
|
Object.defineProperty(exports, "poll", {
|
|
1073
1761
|
enumerable: true,
|
|
1074
|
-
get: function () { return
|
|
1075
|
-
});
|
|
1076
|
-
Object.defineProperty(exports, "isEmptyDeep", {
|
|
1077
|
-
enumerable: true,
|
|
1078
|
-
get: function () { return chunkUFQVOZZ6_cjs.isEmptyDeep; }
|
|
1079
|
-
});
|
|
1080
|
-
Object.defineProperty(exports, "schemaGuidedMerge", {
|
|
1081
|
-
enumerable: true,
|
|
1082
|
-
get: function () { return chunkUFQVOZZ6_cjs.schemaGuidedMerge; }
|
|
1762
|
+
get: function () { return chunkCBVGOANJ_cjs.poll; }
|
|
1083
1763
|
});
|
|
1084
1764
|
Object.defineProperty(exports, "ServiceUnavailableError", {
|
|
1085
1765
|
enumerable: true,
|
|
1086
|
-
get: function () { return
|
|
1766
|
+
get: function () { return chunkS5XEXK36_cjs.ServiceUnavailableError; }
|
|
1087
1767
|
});
|
|
1088
1768
|
Object.defineProperty(exports, "series", {
|
|
1089
1769
|
enumerable: true,
|
|
1090
|
-
get: function () { return
|
|
1770
|
+
get: function () { return chunkS5XEXK36_cjs.series; }
|
|
1091
1771
|
});
|
|
1092
1772
|
Object.defineProperty(exports, "concurrent", {
|
|
1093
1773
|
enumerable: true,
|
|
1094
|
-
get: function () { return
|
|
1774
|
+
get: function () { return chunkFMS5PNM2_cjs.concurrent; }
|
|
1095
1775
|
});
|
|
1096
1776
|
Object.defineProperty(exports, "UserError", {
|
|
1097
1777
|
enumerable: true,
|
|
1098
1778
|
get: function () { return chunkRRC5RKF7_cjs.UserError; }
|
|
1099
1779
|
});
|
|
1780
|
+
Object.defineProperty(exports, "dedupe", {
|
|
1781
|
+
enumerable: true,
|
|
1782
|
+
get: function () { return chunkYHMW7CZF_cjs.dedupe; }
|
|
1783
|
+
});
|
|
1100
1784
|
Object.defineProperty(exports, "isManagementClientAuthError", {
|
|
1101
1785
|
enumerable: true,
|
|
1102
|
-
get: function () { return
|
|
1786
|
+
get: function () { return chunkYHMW7CZF_cjs.isManagementClientAuthError; }
|
|
1103
1787
|
});
|
|
1104
1788
|
Object.defineProperty(exports, "ManagementClientAuthError", {
|
|
1105
1789
|
enumerable: true,
|
|
@@ -1107,7 +1791,7 @@ Object.defineProperty(exports, "ManagementClientAuthError", {
|
|
|
1107
1791
|
});
|
|
1108
1792
|
Object.defineProperty(exports, "parseLogLines", {
|
|
1109
1793
|
enumerable: true,
|
|
1110
|
-
get: function () { return
|
|
1794
|
+
get: function () { return chunkAFIQYB2O_cjs.parseLogLines; }
|
|
1111
1795
|
});
|
|
1112
1796
|
Object.defineProperty(exports, "isPlainObject", {
|
|
1113
1797
|
enumerable: true,
|
|
@@ -1145,15 +1829,24 @@ Object.defineProperty(exports, "isFetchClientError", {
|
|
|
1145
1829
|
enumerable: true,
|
|
1146
1830
|
get: function () { return chunkIUN2ZSU3_cjs.isFetchClientError; }
|
|
1147
1831
|
});
|
|
1832
|
+
exports.KeboolaError = KeboolaError;
|
|
1833
|
+
exports.KeboolaErrorType = KeboolaErrorType;
|
|
1148
1834
|
exports.assert = assert;
|
|
1149
1835
|
exports.coalesce = coalesce;
|
|
1150
|
-
exports.
|
|
1836
|
+
exports.createDerivedAsyncStore = createDerivedAsyncStore;
|
|
1151
1837
|
exports.createDerivedStore = createDerivedStore;
|
|
1152
|
-
exports.
|
|
1838
|
+
exports.createKeboola = createKeboola;
|
|
1839
|
+
exports.createLegacyKeboola = createLegacyKeboola;
|
|
1840
|
+
exports.createLocalStorage = createLocalStorage;
|
|
1153
1841
|
exports.createLoggingMiddleware = createLoggingMiddleware;
|
|
1842
|
+
exports.createMemoryStorage = createMemoryStorage;
|
|
1843
|
+
exports.createNullStorage = createNullStorage;
|
|
1844
|
+
exports.createPersistor = createPersistor;
|
|
1154
1845
|
exports.createRetryMiddleware = createRetryMiddleware;
|
|
1846
|
+
exports.createSessionStorage = createSessionStorage;
|
|
1155
1847
|
exports.createStore = createStore;
|
|
1156
1848
|
exports.deepMerge = deepMerge;
|
|
1849
|
+
exports.isKeboolaError = isKeboolaError;
|
|
1157
1850
|
exports.isStorageTokenMutatingRequest = isStorageTokenMutatingRequest;
|
|
1158
1851
|
exports.shallowEqual = shallowEqual;
|
|
1159
1852
|
//# sourceMappingURL=index.cjs.map
|