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