@keboola/api-client 8.0.2 → 10.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 +488 -0
- package/dist/ai/index.cjs +3 -4
- package/dist/ai/index.js +2 -3
- package/dist/assets/index.cjs +3 -4
- package/dist/assets/index.js +2 -3
- package/dist/backends-BgUzAQul.d.cts +16 -0
- package/dist/backends-BgUzAQul.d.ts +16 -0
- package/dist/chat/index.cjs +3 -4
- package/dist/chat/index.js +2 -3
- package/dist/{chunk-HUMEK64L.cjs → chunk-2ZXOVTCN.cjs} +59 -16
- package/dist/chunk-2ZXOVTCN.cjs.map +1 -0
- package/dist/chunk-37VZRDNG.cjs +50 -0
- package/dist/chunk-37VZRDNG.cjs.map +1 -0
- package/dist/chunk-3FZHFTLG.cjs +12 -0
- package/dist/chunk-3FZHFTLG.cjs.map +1 -0
- package/dist/{chunk-Y26EBVMH.js → chunk-47CIRFCO.js} +3 -4
- package/dist/chunk-47CIRFCO.js.map +1 -0
- package/dist/chunk-64BDZOM2.js +48 -0
- package/dist/chunk-64BDZOM2.js.map +1 -0
- package/dist/chunk-AHYMMDIC.cjs +29 -0
- package/dist/chunk-AHYMMDIC.cjs.map +1 -0
- package/dist/{chunk-QKCFPPQS.js → chunk-APILLKET.js} +3 -3
- package/dist/{chunk-QKCFPPQS.js.map → chunk-APILLKET.js.map} +1 -1
- package/dist/{chunk-WILFTDTS.js → chunk-ATVNCGTO.js} +3 -3
- package/dist/{chunk-WILFTDTS.js.map → chunk-ATVNCGTO.js.map} +1 -1
- package/dist/{chunk-OYSQWNNG.cjs → chunk-AU2OPVRI.cjs} +8 -9
- package/dist/chunk-AU2OPVRI.cjs.map +1 -0
- package/dist/{chunk-OVGB3W3A.cjs → chunk-BADSOKHM.cjs} +5 -6
- package/dist/chunk-BADSOKHM.cjs.map +1 -0
- package/dist/{chunk-YLK5KBXD.js → chunk-BUY6KV2P.js} +3 -4
- package/dist/chunk-BUY6KV2P.js.map +1 -0
- package/dist/{chunk-CSWK4LWY.js → chunk-CQRPG6ZN.js} +3 -4
- package/dist/chunk-CQRPG6ZN.js.map +1 -0
- package/dist/{chunk-4KJRGFNV.cjs → chunk-DRIO222J.cjs} +5 -6
- package/dist/chunk-DRIO222J.cjs.map +1 -0
- package/dist/{chunk-UYZTOVYS.cjs → chunk-EKG3AIWF.cjs} +117 -28
- package/dist/chunk-EKG3AIWF.cjs.map +1 -0
- package/dist/{chunk-D2SWTZFS.js → chunk-FBGUBMJ7.js} +20 -4
- package/dist/chunk-FBGUBMJ7.js.map +1 -0
- package/dist/chunk-GM3AKU5T.js +10 -0
- package/dist/chunk-GM3AKU5T.js.map +1 -0
- package/dist/{chunk-YIWAUNKU.js → chunk-GOWOD3O4.js} +3 -4
- package/dist/chunk-GOWOD3O4.js.map +1 -0
- package/dist/{chunk-J5JUQRPD.js → chunk-GUJ5RTYJ.js} +3 -4
- package/dist/chunk-GUJ5RTYJ.js.map +1 -0
- package/dist/{chunk-TXDMA4CT.cjs → chunk-H466MBV4.cjs} +5 -6
- package/dist/chunk-H466MBV4.cjs.map +1 -0
- package/dist/{chunk-KCGEV4ZA.cjs → chunk-HZSJXB5C.cjs} +5 -6
- package/dist/chunk-HZSJXB5C.cjs.map +1 -0
- package/dist/{chunk-H5DZOHH7.js → chunk-I7BLN5NZ.js} +3 -4
- package/dist/chunk-I7BLN5NZ.js.map +1 -0
- package/dist/{chunk-V2MQG3FZ.js → chunk-IA7WBVH3.js} +3 -4
- package/dist/chunk-IA7WBVH3.js.map +1 -0
- package/dist/{chunk-XLFQJDYZ.cjs → chunk-IQOXQMON.cjs} +4 -4
- package/dist/{chunk-XLFQJDYZ.cjs.map → chunk-IQOXQMON.cjs.map} +1 -1
- package/dist/{chunk-YGAWVMHH.cjs → chunk-IVIWWOM4.cjs} +5 -6
- package/dist/chunk-IVIWWOM4.cjs.map +1 -0
- package/dist/{chunk-4PT6E6VA.js → chunk-J5WWYWPL.js} +3 -4
- package/dist/chunk-J5WWYWPL.js.map +1 -0
- package/dist/{chunk-NFGQHJVB.cjs → chunk-KZLC2XSZ.cjs} +5 -6
- package/dist/chunk-KZLC2XSZ.cjs.map +1 -0
- package/dist/{chunk-4HORTOGH.js → chunk-LUHYZXJH.js} +3 -4
- package/dist/chunk-LUHYZXJH.js.map +1 -0
- package/dist/{chunk-VFZVLZC6.js → chunk-LY7IR43M.js} +3 -4
- package/dist/chunk-LY7IR43M.js.map +1 -0
- package/dist/{chunk-LUQJU3I3.js → chunk-MIAVX53Y.js} +49 -6
- package/dist/chunk-MIAVX53Y.js.map +1 -0
- package/dist/{chunk-NBUPHAAO.cjs → chunk-MQZT4HJH.cjs} +6 -7
- package/dist/chunk-MQZT4HJH.cjs.map +1 -0
- package/dist/{chunk-A5IFX4KC.js → chunk-MUKQ6HZE.js} +3 -4
- package/dist/chunk-MUKQ6HZE.js.map +1 -0
- package/dist/chunk-NFA5ITNG.cjs +14 -0
- package/dist/chunk-NFA5ITNG.cjs.map +1 -0
- package/dist/{chunk-J7EQLDUU.cjs → chunk-NRDZL6JO.cjs} +8 -9
- package/dist/chunk-NRDZL6JO.cjs.map +1 -0
- package/dist/{chunk-5YTV36EI.js → chunk-NXYJKXJ4.js} +3 -4
- package/dist/chunk-NXYJKXJ4.js.map +1 -0
- package/dist/{chunk-IDYRJ4K3.cjs → chunk-OWGJ3PVA.cjs} +23 -4
- package/dist/chunk-OWGJ3PVA.cjs.map +1 -0
- package/dist/{chunk-W3AFDHXQ.cjs → chunk-PG4D5KCD.cjs} +6 -7
- package/dist/chunk-PG4D5KCD.cjs.map +1 -0
- package/dist/{chunk-AK4ZHM77.cjs → chunk-PHQ66FNI.cjs} +5 -6
- package/dist/chunk-PHQ66FNI.cjs.map +1 -0
- package/dist/{chunk-MQABO6OL.cjs → chunk-Q24BTT5D.cjs} +4 -4
- package/dist/{chunk-MQABO6OL.cjs.map → chunk-Q24BTT5D.cjs.map} +1 -1
- package/dist/{chunk-EEG7YZUY.js → chunk-RHZK7AL7.js} +3 -4
- package/dist/chunk-RHZK7AL7.js.map +1 -0
- package/dist/{chunk-BBRS2HLH.cjs → chunk-SBWZKVAG.cjs} +5 -6
- package/dist/chunk-SBWZKVAG.cjs.map +1 -0
- package/dist/{chunk-S4PI2LUQ.cjs → chunk-SDN6SU7K.cjs} +4 -4
- package/dist/{chunk-S4PI2LUQ.cjs.map → chunk-SDN6SU7K.cjs.map} +1 -1
- package/dist/{chunk-6S4JS7OJ.js → chunk-SUA3D6YF.js} +3 -3
- package/dist/{chunk-6S4JS7OJ.js.map → chunk-SUA3D6YF.js.map} +1 -1
- package/dist/{chunk-FB3E7VS6.cjs → chunk-U3W6XYQQ.cjs} +5 -6
- package/dist/chunk-U3W6XYQQ.cjs.map +1 -0
- package/dist/{chunk-5XKPYMQL.cjs → chunk-ULZPXG4L.cjs} +4 -4
- package/dist/{chunk-5XKPYMQL.cjs.map → chunk-ULZPXG4L.cjs.map} +1 -1
- package/dist/{chunk-2Q75RQ3X.js → chunk-VVDMWSSL.js} +3 -4
- package/dist/chunk-VVDMWSSL.js.map +1 -0
- package/dist/{chunk-VUVBYSYM.js → chunk-W2VWZGA3.js} +3 -4
- package/dist/chunk-W2VWZGA3.js.map +1 -0
- package/dist/{chunk-N37PZ2MB.js → chunk-WDAQJ346.js} +3 -3
- package/dist/{chunk-N37PZ2MB.js.map → chunk-WDAQJ346.js.map} +1 -1
- package/dist/{chunk-53WUPUXH.cjs → chunk-XBCR6YKE.cjs} +8 -9
- package/dist/chunk-XBCR6YKE.cjs.map +1 -0
- package/dist/{chunk-CONUMVLZ.cjs → chunk-XP5FQTAA.cjs} +6 -7
- package/dist/chunk-XP5FQTAA.cjs.map +1 -0
- package/dist/{chunk-MQ554O4E.js → chunk-XZAUQZIO.js} +3 -4
- package/dist/chunk-XZAUQZIO.js.map +1 -0
- package/dist/chunk-Y5QJJWDQ.js +12 -0
- package/dist/chunk-Y5QJJWDQ.js.map +1 -0
- package/dist/{chunk-TD2PFSP6.js → chunk-YJHFK3MV.js} +117 -28
- package/dist/chunk-YJHFK3MV.js.map +1 -0
- package/dist/{chunk-PWA6XFXA.cjs → chunk-YTF4RQ52.cjs} +5 -6
- package/dist/chunk-YTF4RQ52.cjs.map +1 -0
- package/dist/{chunk-BZO2GTJP.js → chunk-ZIQM4R3L.js} +3 -4
- package/dist/chunk-ZIQM4R3L.js.map +1 -0
- package/dist/constants/index.cjs +23 -0
- package/dist/constants/index.cjs.map +1 -1
- package/dist/constants/index.d.cts +54 -1
- package/dist/constants/index.d.ts +54 -1
- package/dist/constants/index.js +11 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/dataScience/index.cjs +4 -5
- package/dist/dataScience/index.js +2 -3
- package/dist/domain/permissions/index.cjs +5 -5
- package/dist/domain/permissions/index.cjs.map +1 -1
- package/dist/domain/permissions/index.d.cts +3 -2
- package/dist/domain/permissions/index.d.ts +3 -2
- package/dist/domain/permissions/index.js +5 -5
- package/dist/domain/permissions/index.js.map +1 -1
- package/dist/editor/index.cjs +3 -4
- package/dist/editor/index.js +2 -3
- package/dist/encryption/index.cjs +3 -4
- package/dist/encryption/index.d.cts +2 -1
- package/dist/encryption/index.d.ts +2 -1
- package/dist/encryption/index.js +2 -3
- package/dist/encryption/types.d.cts +2 -1
- package/dist/encryption/types.d.ts +2 -1
- package/dist/import/index.cjs +3 -4
- package/dist/import/index.js +2 -3
- package/dist/index.cjs +181 -84
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3461 -657
- package/dist/index.d.ts +3461 -657
- package/dist/index.js +131 -35
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +6 -7
- package/dist/management/index.d.cts +7 -1
- package/dist/management/index.d.ts +7 -1
- package/dist/management/index.js +4 -5
- package/dist/management/types.d.cts +2 -2
- package/dist/management/types.d.ts +2 -2
- package/dist/metastore/index.cjs +3 -4
- package/dist/metastore/index.js +2 -3
- package/dist/notifications/index.cjs +3 -4
- package/dist/notifications/index.js +2 -3
- package/dist/oauth/index.cjs +3 -4
- package/dist/oauth/index.js +2 -3
- package/dist/{project-BKbb7xWn.d.ts → project-BxSa1Ci9.d.ts} +2 -1
- package/dist/{project-cYJhOvzB.d.cts → project-NJuUPx8-.d.cts} +2 -1
- package/dist/queryService/index.cjs +3 -4
- package/dist/queryService/index.js +2 -3
- package/dist/queue/index.cjs +3 -4
- package/dist/queue/index.js +2 -3
- package/dist/{registry-Xwk-vCjf.d.ts → registry-ClVf-Wb3.d.cts} +416 -20
- package/dist/{registry-Xwk-vCjf.d.cts → registry-ClVf-Wb3.d.ts} +416 -20
- package/dist/scheduler/index.cjs +3 -4
- package/dist/scheduler/index.js +2 -3
- package/dist/sdk/configurations/index.cjs +3 -3
- package/dist/sdk/configurations/index.d.cts +1413 -224
- package/dist/sdk/configurations/index.d.ts +1413 -224
- package/dist/sdk/configurations/index.js +2 -2
- package/dist/sdk/storage/index.d.cts +4 -3
- package/dist/sdk/storage/index.d.ts +4 -3
- package/dist/sdk/vault/index.d.cts +3 -2
- package/dist/sdk/vault/index.d.ts +3 -2
- package/dist/status/index.cjs +3 -4
- package/dist/status/index.js +2 -3
- package/dist/storage/index.cjs +10 -11
- package/dist/storage/index.d.cts +3 -2
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.js +3 -4
- package/dist/storage/types.d.cts +4 -3
- package/dist/storage/types.d.ts +4 -3
- package/dist/{storageClient-DAglYVkx.d.ts → storageClient-Bk4H2HIw.d.ts} +1 -1
- package/dist/{storageClient-CZpLyDuY.d.cts → storageClient-CB4U57Pr.d.cts} +1 -1
- package/dist/{storageSdk-CoqeaoSG.d.ts → storageSdk-BDrsuMDA.d.ts} +1 -1
- package/dist/{storageSdk-uL-u41Dm.d.cts → storageSdk-wn97Zloc.d.cts} +1 -1
- package/dist/stream/index.cjs +3 -4
- package/dist/stream/index.js +2 -3
- package/dist/syncActions/index.cjs +3 -4
- package/dist/syncActions/index.js +2 -3
- package/dist/telemetry/index.cjs +3 -4
- package/dist/telemetry/index.js +2 -3
- package/dist/{types-Bu8AEdZo.d.cts → types-CMEwVQ78.d.cts} +2 -20
- package/dist/{types-CWK543pL.d.ts → types-D64zThBJ.d.ts} +1 -1
- package/dist/{types-D5FF6mS6.d.cts → types-DsqDUWJn.d.cts} +1 -1
- package/dist/{types-bjHzGr0s.d.ts → types-GmAeMsok.d.ts} +2 -20
- package/dist/{types-DMC601TE.d.cts → types-YEfQ5pAy.d.cts} +20 -1
- package/dist/{types-DMC601TE.d.ts → types-YEfQ5pAy.d.ts} +20 -1
- package/dist/vault/index.cjs +3 -4
- package/dist/vault/index.js +2 -3
- package/dist/verify/index.cjs +3 -4
- package/dist/verify/index.d.cts +2 -1
- package/dist/verify/index.d.ts +2 -1
- package/dist/verify/index.js +2 -3
- package/package.json +7 -3
- package/surface/ai.md +14 -0
- package/surface/assets.md +7 -0
- package/surface/chat.md +19 -0
- package/surface/context.md +40 -0
- package/surface/dataScience.md +19 -0
- package/surface/editor.md +17 -0
- package/surface/encryption.md +9 -0
- package/surface/import.md +7 -0
- package/surface/kaiAgent.md +26 -0
- package/surface/management.md +109 -0
- package/surface/notifications.md +10 -0
- package/surface/oauth.md +10 -0
- package/surface/queryService.md +12 -0
- package/surface/queue.md +8 -0
- package/surface/scheduler.md +12 -0
- package/surface/sdk.md +62 -0
- package/surface/status.md +7 -0
- package/surface/storage.md +182 -0
- package/surface/stream.md +42 -0
- package/surface/syncActions.md +16 -0
- package/surface/telemetry.md +10 -0
- package/surface/vault.md +11 -0
- package/dist/chunk-2Q75RQ3X.js.map +0 -1
- package/dist/chunk-4HORTOGH.js.map +0 -1
- package/dist/chunk-4KJRGFNV.cjs.map +0 -1
- package/dist/chunk-4PT6E6VA.js.map +0 -1
- package/dist/chunk-53WUPUXH.cjs.map +0 -1
- package/dist/chunk-5YTV36EI.js.map +0 -1
- package/dist/chunk-A5IFX4KC.js.map +0 -1
- package/dist/chunk-AK4ZHM77.cjs.map +0 -1
- package/dist/chunk-BBRS2HLH.cjs.map +0 -1
- package/dist/chunk-BZO2GTJP.js.map +0 -1
- package/dist/chunk-CONUMVLZ.cjs.map +0 -1
- package/dist/chunk-CSWK4LWY.js.map +0 -1
- package/dist/chunk-D2SWTZFS.js.map +0 -1
- package/dist/chunk-EEG7YZUY.js.map +0 -1
- package/dist/chunk-FB3E7VS6.cjs.map +0 -1
- package/dist/chunk-H5DZOHH7.js.map +0 -1
- package/dist/chunk-HUMEK64L.cjs.map +0 -1
- package/dist/chunk-IDYRJ4K3.cjs.map +0 -1
- package/dist/chunk-J5JUQRPD.js.map +0 -1
- package/dist/chunk-J7EQLDUU.cjs.map +0 -1
- package/dist/chunk-KCGEV4ZA.cjs.map +0 -1
- package/dist/chunk-LUQJU3I3.js.map +0 -1
- package/dist/chunk-MQ554O4E.js.map +0 -1
- package/dist/chunk-NBUPHAAO.cjs.map +0 -1
- package/dist/chunk-NFGQHJVB.cjs.map +0 -1
- package/dist/chunk-OVGB3W3A.cjs.map +0 -1
- package/dist/chunk-OYSQWNNG.cjs.map +0 -1
- package/dist/chunk-PWA6XFXA.cjs.map +0 -1
- package/dist/chunk-R7MQGDLC.cjs +0 -61
- package/dist/chunk-R7MQGDLC.cjs.map +0 -1
- package/dist/chunk-SI5TFV5M.js +0 -54
- package/dist/chunk-SI5TFV5M.js.map +0 -1
- package/dist/chunk-TD2PFSP6.js.map +0 -1
- package/dist/chunk-TXDMA4CT.cjs.map +0 -1
- package/dist/chunk-UYZTOVYS.cjs.map +0 -1
- package/dist/chunk-V2MQG3FZ.js.map +0 -1
- package/dist/chunk-VFZVLZC6.js.map +0 -1
- package/dist/chunk-VKHQ6BWE.cjs +0 -30
- package/dist/chunk-VKHQ6BWE.cjs.map +0 -1
- package/dist/chunk-VUVBYSYM.js.map +0 -1
- package/dist/chunk-W3AFDHXQ.cjs.map +0 -1
- package/dist/chunk-Y26EBVMH.js.map +0 -1
- package/dist/chunk-YGAWVMHH.cjs.map +0 -1
- package/dist/chunk-YIWAUNKU.js.map +0 -1
- package/dist/chunk-YLK5KBXD.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
import { createStorageTable } from './chunk-ZOREOLGE.js';
|
|
2
|
+
import { ProjectFeature } from './chunk-GM3AKU5T.js';
|
|
2
3
|
import { createVaultSdk } from './chunk-7ETZQGY7.js';
|
|
3
4
|
import { generateUUID, createTagSdk } from './chunk-JURD5MC3.js';
|
|
4
5
|
export { generateUUID, keboolaUID } from './chunk-JURD5MC3.js';
|
|
5
6
|
import { delay, createStorageSdk } from './chunk-KQ2QNGRX.js';
|
|
6
7
|
export { PollException, createStorageSdk, delay, poll } from './chunk-KQ2QNGRX.js';
|
|
7
|
-
import { createConfigurationSdk } from './chunk-
|
|
8
|
-
export { isEmptyDeep, schemaGuidedMerge } from './chunk-
|
|
8
|
+
import { createConfigurationSdk } from './chunk-YJHFK3MV.js';
|
|
9
|
+
export { isEmptyDeep, schemaGuidedMerge } from './chunk-YJHFK3MV.js';
|
|
10
|
+
import './chunk-64BDZOM2.js';
|
|
9
11
|
import { createProject } from './chunk-UABYNGBZ.js';
|
|
10
|
-
import { createStorageClient, ServiceUnavailableError } from './chunk-
|
|
11
|
-
export { ServiceUnavailableError, series } from './chunk-
|
|
12
|
+
import { createStorageClient, ServiceUnavailableError } from './chunk-CQRPG6ZN.js';
|
|
13
|
+
export { ServiceUnavailableError, series } from './chunk-CQRPG6ZN.js';
|
|
12
14
|
export { concurrent } from './chunk-EBCZUGUX.js';
|
|
13
|
-
import { createStreamClient } from './chunk-
|
|
14
|
-
import { createSyncActionsClient } from './chunk-
|
|
15
|
-
import { createTelemetryClient } from './chunk-
|
|
16
|
-
import { createVaultClient } from './chunk-
|
|
15
|
+
import { createStreamClient } from './chunk-I7BLN5NZ.js';
|
|
16
|
+
import { createSyncActionsClient } from './chunk-BUY6KV2P.js';
|
|
17
|
+
import { createTelemetryClient } from './chunk-NXYJKXJ4.js';
|
|
18
|
+
import { createVaultClient } from './chunk-J5WWYWPL.js';
|
|
17
19
|
export { UserError } from './chunk-G3N5KDEY.js';
|
|
18
|
-
import { createManagementClient } from './chunk-
|
|
19
|
-
export { isManagementClientAuthError } from './chunk-
|
|
20
|
-
export { ManagementClientAuthError } from './chunk-
|
|
21
|
-
import { createVerifyClient } from './chunk-
|
|
22
|
-
import { createMetastoreClient } from './chunk-
|
|
23
|
-
import { createNotificationsClient } from './chunk-
|
|
24
|
-
import { createOauthClient } from './chunk-
|
|
25
|
-
import { createSchedulerClient } from './chunk-
|
|
26
|
-
import { createQueryServiceClient } from './chunk-
|
|
27
|
-
import { createQueueClient } from './chunk-
|
|
28
|
-
import { createStatusClient } from './chunk-
|
|
20
|
+
import { createManagementClient } from './chunk-MIAVX53Y.js';
|
|
21
|
+
export { isManagementClientAuthError } from './chunk-MIAVX53Y.js';
|
|
22
|
+
export { ManagementClientAuthError } from './chunk-APILLKET.js';
|
|
23
|
+
import { createVerifyClient } from './chunk-LUHYZXJH.js';
|
|
24
|
+
import { createMetastoreClient } from './chunk-VVDMWSSL.js';
|
|
25
|
+
import { createNotificationsClient } from './chunk-ZIQM4R3L.js';
|
|
26
|
+
import { createOauthClient } from './chunk-47CIRFCO.js';
|
|
27
|
+
import { createSchedulerClient } from './chunk-XZAUQZIO.js';
|
|
28
|
+
import { createQueryServiceClient } from './chunk-GUJ5RTYJ.js';
|
|
29
|
+
import { createQueueClient } from './chunk-LY7IR43M.js';
|
|
30
|
+
import { createStatusClient } from './chunk-WDAQJ346.js';
|
|
29
31
|
import './chunk-7J2R6XHB.js';
|
|
30
|
-
import { createAiClient } from './chunk-
|
|
31
|
-
import { createAssetsClient } from './chunk-
|
|
32
|
-
import { createChatClient } from './chunk-
|
|
32
|
+
import { createAiClient } from './chunk-IA7WBVH3.js';
|
|
33
|
+
import { createAssetsClient } from './chunk-SUA3D6YF.js';
|
|
34
|
+
import { createChatClient } from './chunk-W2VWZGA3.js';
|
|
33
35
|
import './chunk-4RC5E3SL.js';
|
|
34
|
-
import { createDataScienceClient } from './chunk-
|
|
35
|
-
export { parseLogLines } from './chunk-
|
|
36
|
+
import { createDataScienceClient } from './chunk-MUKQ6HZE.js';
|
|
37
|
+
export { parseLogLines } from './chunk-MUKQ6HZE.js';
|
|
36
38
|
import { isPlainObject } from './chunk-MSI6FVGG.js';
|
|
37
39
|
export { isPlainObject } from './chunk-MSI6FVGG.js';
|
|
38
|
-
import { createEditorClient } from './chunk-
|
|
39
|
-
import { createEncryptionClient } from './chunk-
|
|
40
|
-
import { createImportClient } from './chunk-
|
|
41
|
-
import { isApiError, ApiError, createOpenapiFetchClient, createGenericFetchClient } from './chunk-
|
|
42
|
-
export { ApiError, HttpContentType, HttpHeader, createGenericFetchClient, isAbortError, isApiError, isFetchClientError } from './chunk-
|
|
43
|
-
import { KeboolaHttpHeader, HttpStatus, ProjectFeatures } from './chunk-SI5TFV5M.js';
|
|
44
|
-
export { KeboolaHttpHeader } from './chunk-SI5TFV5M.js';
|
|
40
|
+
import { createEditorClient } from './chunk-GOWOD3O4.js';
|
|
41
|
+
import { createEncryptionClient } from './chunk-ATVNCGTO.js';
|
|
42
|
+
import { createImportClient } from './chunk-RHZK7AL7.js';
|
|
43
|
+
import { KeboolaHttpHeader, HttpStatus, isApiError, ApiError, createOpenapiFetchClient, createGenericFetchClient } from './chunk-FBGUBMJ7.js';
|
|
44
|
+
export { ApiError, HttpContentType, HttpHeader, KeboolaHttpHeader, createGenericFetchClient, isAbortError, isApiError, isFetchClientError } from './chunk-FBGUBMJ7.js';
|
|
45
45
|
import { z } from 'zod';
|
|
46
46
|
|
|
47
47
|
var agentSettingsSchema = z.object({
|
|
@@ -423,6 +423,98 @@ var createStack = ({ stackInfo, clientServiceUrls }) => {
|
|
|
423
423
|
};
|
|
424
424
|
};
|
|
425
425
|
|
|
426
|
+
// src/sdks/variables/variablesSdk.ts
|
|
427
|
+
var VARIABLES_COMPONENT_ID = "keboola.variables";
|
|
428
|
+
var mergeVariableDefinitions = (target, source) => {
|
|
429
|
+
const targetNames = new Set(target.map((definition) => definition.name));
|
|
430
|
+
return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];
|
|
431
|
+
};
|
|
432
|
+
var mergeVariableValues = (target, source) => {
|
|
433
|
+
const sourceByName = new Map(source.map((value) => [value.name, value.value]));
|
|
434
|
+
const targetNames = new Set(target.map((value) => value.name));
|
|
435
|
+
return [
|
|
436
|
+
...target.map(
|
|
437
|
+
(value) => sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value
|
|
438
|
+
),
|
|
439
|
+
...source.filter((value) => !targetNames.has(value.name))
|
|
440
|
+
];
|
|
441
|
+
};
|
|
442
|
+
var createVariablesSdk = ({ storageClient }) => {
|
|
443
|
+
const configs = storageClient.componentsAndConfigurations;
|
|
444
|
+
const readVariables = async (configId, valuesRowId, branchId) => {
|
|
445
|
+
const config = await configs.getConfiguration({
|
|
446
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
447
|
+
configId,
|
|
448
|
+
branchId
|
|
449
|
+
});
|
|
450
|
+
const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];
|
|
451
|
+
const rawDefinitions = config.configuration?.variables;
|
|
452
|
+
const rawValues = row?.configuration?.values;
|
|
453
|
+
return {
|
|
454
|
+
definitions: Array.isArray(rawDefinitions) ? rawDefinitions : [],
|
|
455
|
+
values: Array.isArray(rawValues) ? rawValues : []
|
|
456
|
+
};
|
|
457
|
+
};
|
|
458
|
+
const createVariables = async (definitions, values, branchId) => {
|
|
459
|
+
const config = await configs.createConfiguration({
|
|
460
|
+
branchId,
|
|
461
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
462
|
+
name: "Variables definition",
|
|
463
|
+
configuration: { variables: definitions }
|
|
464
|
+
});
|
|
465
|
+
try {
|
|
466
|
+
const row = await configs.createConfigurationRow({
|
|
467
|
+
branchId,
|
|
468
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
469
|
+
configId: config.id,
|
|
470
|
+
name: "Default values",
|
|
471
|
+
configuration: { values }
|
|
472
|
+
});
|
|
473
|
+
return { variablesId: config.id, variablesValuesId: row.id };
|
|
474
|
+
} catch (error) {
|
|
475
|
+
await configs.deleteConfiguration({
|
|
476
|
+
branchId,
|
|
477
|
+
componentId: VARIABLES_COMPONENT_ID,
|
|
478
|
+
configId: config.id
|
|
479
|
+
}).catch((cleanupError) => {
|
|
480
|
+
if (error instanceof Error && error.cause === void 0) {
|
|
481
|
+
error.cause = cleanupError;
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
throw error;
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
return {
|
|
488
|
+
/** Copy a variables config into a fresh, independent config + values row. */
|
|
489
|
+
copy: async ({
|
|
490
|
+
variablesId,
|
|
491
|
+
variablesValuesId,
|
|
492
|
+
branchId = "default"
|
|
493
|
+
}) => {
|
|
494
|
+
const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);
|
|
495
|
+
return createVariables(definitions, values, branchId);
|
|
496
|
+
},
|
|
497
|
+
/** Merge the source's variables into the target's and create a fresh merged config + values row. */
|
|
498
|
+
merge: async ({
|
|
499
|
+
targetVariablesId,
|
|
500
|
+
targetValuesId,
|
|
501
|
+
sourceVariablesId,
|
|
502
|
+
sourceValuesId,
|
|
503
|
+
branchId = "default"
|
|
504
|
+
}) => {
|
|
505
|
+
const [target, source] = await Promise.all([
|
|
506
|
+
readVariables(targetVariablesId, targetValuesId, branchId),
|
|
507
|
+
readVariables(sourceVariablesId, sourceValuesId, branchId)
|
|
508
|
+
]);
|
|
509
|
+
return createVariables(
|
|
510
|
+
mergeVariableDefinitions(target.definitions, source.definitions),
|
|
511
|
+
mergeVariableValues(target.values, source.values),
|
|
512
|
+
branchId
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
};
|
|
517
|
+
|
|
426
518
|
// src/createMiddlewareFor.ts
|
|
427
519
|
var createMiddlewareFor = (middlewares) => {
|
|
428
520
|
return (target, baseline = []) => {
|
|
@@ -569,9 +661,9 @@ var createClients = async ({
|
|
|
569
661
|
source: liveProject.store,
|
|
570
662
|
build: createStorageTable,
|
|
571
663
|
dependsOn: (project) => ({
|
|
572
|
-
useLegacyBucketPrefix: !project.hasFeature(
|
|
573
|
-
hasProtectedDefaultBranch: project.hasFeature(
|
|
574
|
-
hasStorageBranches: project.hasFeature(
|
|
664
|
+
useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),
|
|
665
|
+
hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),
|
|
666
|
+
hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches)
|
|
575
667
|
})
|
|
576
668
|
});
|
|
577
669
|
const storage = createStorageClient({
|
|
@@ -742,6 +834,9 @@ var createClients = async ({
|
|
|
742
834
|
vaultClient: client.vault,
|
|
743
835
|
encryptionClient: client.encryption
|
|
744
836
|
});
|
|
837
|
+
const variables = createVariablesSdk({
|
|
838
|
+
storageClient: storage
|
|
839
|
+
});
|
|
745
840
|
const context = {
|
|
746
841
|
stack,
|
|
747
842
|
defaultBranch,
|
|
@@ -770,7 +865,8 @@ var createClients = async ({
|
|
|
770
865
|
configuration,
|
|
771
866
|
tag,
|
|
772
867
|
storage: storageSdk,
|
|
773
|
-
vault
|
|
868
|
+
vault,
|
|
869
|
+
variables
|
|
774
870
|
}
|
|
775
871
|
};
|
|
776
872
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/clients/kaiAgent/kaiAgentClient.ts","../src/utils/assert.ts","../src/utils/coalesce.ts","../src/utils/createStore.ts","../src/utils/deepMerge.ts","../src/domain/defaultBranch.ts","../src/domain/stack.ts","../src/createMiddlewareFor.ts","../src/serviceClientRegistry/utils.ts","../src/serviceClientRegistry/createServiceClientRegistry.ts","../src/client.ts","../src/middlewares/loggingMiddleware.ts","../src/middlewares/retryMiddleware.ts","../src/devClient.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\nimport { KeboolaHttpHeader } from '../../constants';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ChatRequest,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\ntype AgentSettings = z.infer<typeof agentSettingsSchema>;\ntype UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, token }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: { [KeboolaHttpHeader.STORAGE_API_TOKEN]: token },\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery) => {\n const { data } = await client.get('/api/history', { query: params });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']) => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n return data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n return data;\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n return {\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n approveToolCall,\n submitToolOutput,\n stopChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n getUserAgentSettings,\n updateUserAgentSettings,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n","export function assert<T>(value: T | undefined | null, message: string): asserts value is T {\n if (value == null) {\n throw new Error(message);\n }\n}\n","type TaskFn<T> = () => T;\n\n/**\n * Coalesces concurrent triggers onto a single, never-parallel run of `task`.\n * Triggers fired while a run is busy collapse into one trailing run, and each\n * resolves with the first run that started after it — so it never sees stale state.\n *\n * Example — A triggers, then B and C trigger while A's run is still going:\n * 1. trigger A → run #1 starts\n * 2. trigger B, C → run #1 busy, so they wait\n * 3. run #1 done → A resolves\n * 4. run #2 starts → covers B and C together (one trailing run, not two)\n * 5. run #2 done → B and C resolve\n *\n * @returns a trigger; each call returns a promise of the task result.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void trigger()`).\n */\nexport const coalesce = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let running = false;\n const waiters: PromiseWithResolvers<Awaited<T>>[] = [];\n\n const drain = async () => {\n running = true;\n const batch = waiters.splice(0);\n\n try {\n const result = await task();\n batch.forEach((waiter) => waiter.resolve(result));\n } catch (error) {\n batch.forEach((waiter) => waiter.reject(error));\n }\n // Drain any triggers that arrived during the task; tail position, so no stack growth.\n if (waiters.length > 0) return drain();\n running = false;\n };\n\n return () => {\n const waiter = Promise.withResolvers<Awaited<T>>();\n waiters.push(waiter);\n if (!running) void drain();\n return waiter.promise;\n };\n};\n","type Listener<T> = (value: T) => void;\n\nexport type ReadableStore<T> = {\n get: () => T;\n subscribe: (listener: Listener<T>) => () => void;\n};\n\nexport type Store<T> = ReadableStore<T> & {\n set: (value: T) => void;\n};\n\nexport const createStore = <T>(initial: T): Store<T> => {\n let value = initial;\n const listeners = new Set<Listener<T>>();\n\n return {\n get: () => value,\n set: (next) => {\n if (Object.is(next, value)) return;\n value = next;\n listeners.forEach((listener) => listener(value));\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nconst isPlainObjectOrArray = (value: object): boolean => {\n if (Array.isArray(value)) return true;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nexport const shallowEqual = <T>(a: T, b: T): boolean => {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n if (!isPlainObjectOrArray(a) || !isPlainObjectOrArray(b)) return false;\n const aKeys = Object.keys(a) as (keyof T)[];\n const bKeys = Object.keys(b) as (keyof T)[];\n return aKeys.length === bKeys.length && aKeys.every((key) => Object.is(a[key], b[key]));\n};\n\ntype DerivedStoreOptions<S, K, T> = {\n source: ReadableStore<S>;\n dependsOn: (state: S) => K;\n build: (key: K) => T;\n keyEquals?: (a: K, b: K) => boolean;\n};\n\nexport const createDerivedStore = <S, K, T>({\n source,\n dependsOn,\n build,\n keyEquals = shallowEqual,\n}: DerivedStoreOptions<S, K, T>): ReadableStore<T> => {\n let key = dependsOn(source.get());\n const store = createStore(build(key));\n\n // Intentionally a permanent subscription with no teardown: a derived store is bound to its\n // source's lifetime (both live as long as the client) so there is nothing to dispose. Add\n // lazy subscribe/unsubscribe only if a use case ever creates short-lived derived stores.\n source.subscribe((state) => {\n const next = dependsOn(state);\n if (keyEquals(key, next)) return;\n key = next;\n store.set(build(next));\n });\n\n return { get: store.get, subscribe: store.subscribe };\n};\n","import { isPlainObject } from './isPlainObject';\n\n/**\n * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every\n * other value (primitives, arrays, or a type mismatch between the two sides) replaces the\n * base value. `undefined` patch values are skipped, so a partial patch leaves untouched\n * fields alone. Pure — neither argument is mutated; the result preserves `base`'s type.\n */\nexport const deepMerge = <T extends Record<string, unknown>>(\n base: T,\n patch: Record<string, unknown>,\n): T => {\n const out: Record<string, unknown> = { ...base };\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n const current = out[key];\n out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;\n }\n\n return out as T;\n};\n","import type { DevBranch } from '../clients/storage/branches/types';\nimport { assert } from '../utils';\n\ntype BranchType = 'default' | 'dev';\n\ntype Options = {\n devBranches: DevBranch[];\n};\n\nexport const createDefaultBranch = ({ devBranches }: Options) => {\n const defaultBranch = devBranches.find((branch) => branch.isDefault);\n assert(defaultBranch, 'No default branch found for the project.');\n\n const getType = (branchId?: string | number): BranchType => {\n if (branchId == null || branchId === 'default') return 'default';\n return Number(branchId) === defaultBranch.id ? 'default' : 'dev';\n };\n\n return {\n id: defaultBranch.id,\n name: defaultBranch.name,\n getType,\n isDev: (branchId?: string | number) => getType(branchId) === 'dev',\n isDefault: (branchId?: string | number) => getType(branchId) === 'default',\n };\n};\n","import type { ServiceId, StackInfo } from '../clients/storage/types';\n\nexport type ServiceUrls = Partial<Record<ServiceId, (url: string) => string | undefined | null>>;\n\nconst SERVICE_URL_OVERRIDES: ServiceUrls = {\n // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.\n // I assume the service is versioned.\n 'kai-assistant': (url) => `${url}/api`,\n};\n\ntype Options = {\n stackInfo: StackInfo;\n clientServiceUrls?: ServiceUrls;\n};\n\nexport const createStack = ({ stackInfo, clientServiceUrls }: Options) => {\n const { services, components, features, ...infoRest } = stackInfo;\n\n const serviceMap = new Map(\n services.map((service) => {\n const devOverride = clientServiceUrls?.[service.id]?.(service.url);\n const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);\n const url = devOverride ?? prodOverride ?? service.url;\n return [service.id, url];\n }),\n );\n\n const componentMap = new Map(components.map((component) => [component.id, component]));\n const featureSet = new Set(features);\n\n const hasFeature = (...feature: string[]) => {\n if (feature.length === 0) return false;\n return feature.every((x) => featureSet.has(x));\n };\n\n const hasComponent = (...componentId: string[]) => {\n if (componentId.length === 0) return false;\n return componentId.every((x) => componentMap.has(x));\n };\n\n const getComponent = (componentId: string) => componentMap.get(componentId) ?? null;\n\n const hasService = (serviceId: ServiceId) => serviceMap.has(serviceId);\n\n const getServiceUrl = (serviceId: ServiceId) => serviceMap.get(serviceId) ?? null;\n\n return {\n ...infoRest,\n services,\n features,\n components,\n hasFeature,\n getServiceUrl,\n hasService,\n getComponent,\n hasComponent,\n };\n};\n","import type { MiddlewareFn } from './fetchClient';\n\n/**\n * Service clients reached through the registry — the key is the `clientName`\n * the user accesses them by (e.g. `api.dataScience`), not the `serviceId`.\n */\nexport type ServiceClientName =\n | 'vault'\n | 'dataScience'\n | 'encryption'\n | 'editor'\n | 'syncActions'\n | 'telemetry'\n | 'queryService'\n | 'queue'\n | 'chat'\n | 'ai'\n | 'import'\n | 'kaiAgent'\n | 'oauth'\n | 'stream'\n | 'notifications'\n | 'scheduler';\n\n/** Clients instantiated directly (not stack-discovered), keyed by their property name. */\nexport type NonServiceClientName = 'storage' | 'management' | 'assets' | 'status' | 'metastore';\n\nexport type MiddlewareTarget = ServiceClientName | NonServiceClientName;\n\nexport type Middlewares =\n | MiddlewareFn[]\n | ({ all?: MiddlewareFn[] } & Partial<Record<MiddlewareTarget, MiddlewareFn[]>>);\n\nexport const createMiddlewareFor = (middlewares: Middlewares | undefined) => {\n return (target: MiddlewareTarget, baseline: MiddlewareFn[] = []): MiddlewareFn[] => {\n if (Array.isArray(middlewares)) return [...baseline, ...middlewares];\n\n const all = middlewares?.all ?? [];\n const targeted = middlewares?.[target] ?? [];\n return [...baseline, ...all, ...targeted];\n };\n};\n","export const isBuiltInProperty = (property: string | symbol) =>\n typeof property === 'symbol' ||\n property === 'then' ||\n property === 'constructor' ||\n property === 'toString' ||\n property === 'valueOf';\n\n/**\n * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.\n */\nexport const createDummyClient = <T extends Record<string, unknown>>({\n onCall,\n}: {\n onCall: (path: string[], args: unknown[]) => void;\n}): T => {\n const createProxy = (path: string[] = []) =>\n new Proxy(() => {}, {\n // Create a new proxy for nested property access\n get: (_target, prop) => {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(prop)) return undefined;\n return createProxy([...path, prop]);\n },\n // When called as a function, invoke the interceptor\n apply: (_target, _thisArgs, args) => onCall(path, args),\n });\n\n return createProxy() as unknown as T;\n};\n","import { createDummyClient } from './utils';\n\ntype OnUnavailableFn = (info: {\n serviceId: string;\n path: string[];\n args: unknown[];\n clientName: string;\n}) => void;\n\ntype ClientConfig<ServiceId extends string, ClientName extends string> = {\n serviceId: ServiceId;\n clientName: ClientName;\n clientFn: (serviceUrl: string) => unknown;\n};\n\ntype ClientMeta<ServiceId extends string> = {\n clientName: string;\n serviceId: ServiceId;\n isAvailable: boolean;\n};\n\ntype Options<ServiceId extends string> = {\n getServiceBaseUrl: (serviceId: ServiceId) => string | null;\n onUnavailable?: OnUnavailableFn;\n};\n\ntype BuildResult<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n client: {\n [Config in Configs[number] as Config['clientName']]: ReturnType<Config['clientFn']>;\n };\n meta: ClientMeta<ServiceId>[];\n};\n\ntype Registry<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n add: <const Config extends ClientConfig<ServiceId, ClientName>>(\n config: Config,\n ) => Registry<ServiceId, ClientName, [...Configs, Config]>;\n build: () => BuildResult<ServiceId, ClientName, Configs>;\n};\n\nexport const createServiceClientRegistry =\n <ServiceId extends string, ClientName extends string = string>() =>\n ({\n getServiceBaseUrl,\n onUnavailable,\n }: Options<ServiceId>): Registry<ServiceId, ClientName, []> => {\n const dummy = (serviceId: string, clientName: string) =>\n createDummyClient({\n onCall: (path, args) => {\n onUnavailable?.({\n serviceId,\n path,\n args,\n clientName,\n });\n },\n });\n\n const configs: ClientConfig<ServiceId, ClientName>[] = [];\n\n const resolveClient = ({\n serviceId,\n clientFn,\n clientName,\n }: ClientConfig<ServiceId, ClientName>) => {\n const serviceBaseUrl = getServiceBaseUrl(serviceId);\n return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);\n };\n\n type AnyConfig = ClientConfig<ServiceId, ClientName>;\n const registry: Registry<ServiceId, ClientName, AnyConfig[]> = {\n add: (config) => {\n configs.push(config);\n return registry;\n },\n build: () => {\n const clientMap: Record<string, unknown> = {};\n const clientMeta: ClientMeta<ServiceId>[] = [];\n\n configs.forEach((config) => {\n clientMap[config.clientName] = resolveClient(config);\n clientMeta.push({\n clientName: config.clientName,\n serviceId: config.serviceId,\n isAvailable: !!getServiceBaseUrl(config.serviceId),\n });\n });\n\n // The dynamically-built map can't be statically proven against the\n // per-config mapped type; the public key safety comes from the fluent\n // `add` chain asserted at the bottom of this factory.\n return {\n client: clientMap,\n meta: clientMeta,\n } as BuildResult<ServiceId, ClientName, AnyConfig[]>;\n },\n };\n\n return registry as Registry<ServiceId, ClientName, []>;\n };\n","import { createAiClient } from './clients/ai';\nimport { createAssetsClient } from './clients/assets';\nimport { createChatClient } from './clients/chat';\nimport { createDataScienceClient } from './clients/dataScience';\nimport { createEditorClient } from './clients/editor';\nimport { createEncryptionClient } from './clients/encryption';\nimport { createImportClient } from './clients/import';\nimport { createKaiAgentClient } from './clients/kaiAgent';\nimport { createManagementClient } from './clients/management';\nimport { createMetastoreClient } from './clients/metastore';\nimport { createNotificationsClient } from './clients/notifications';\nimport { createOauthClient } from './clients/oauth';\nimport { createQueryServiceClient } from './clients/queryService';\nimport { createQueueClient } from './clients/queue';\nimport { createSchedulerClient } from './clients/scheduler';\nimport { createStatusClient } from './clients/status';\nimport { createStorageClient } from './clients/storage';\nimport type { ServiceId, StorageToken } from './clients/storage/types';\nimport { createStreamClient } from './clients/stream';\nimport { createSyncActionsClient } from './clients/syncActions';\nimport { createTelemetryClient } from './clients/telemetry';\nimport type { BaseClientOptions } from './clients/types';\nimport { createVaultClient } from './clients/vault';\nimport { createDefaultBranch } from './domain/defaultBranch';\nimport { createProject } from './domain/project';\nimport { createStack, type ServiceUrls } from './domain/stack';\nimport { createStorageTable } from './domain/storageTable';\nimport { createConfigurationSdk } from './sdks/configurations';\nimport { createStorageSdk } from './sdks/storage';\nimport { createTagSdk } from './sdks/tag';\nimport { createVaultSdk } from './sdks/vault';\nimport { KeboolaHttpHeader, ProjectFeatures } from './constants';\nimport {\n createMiddlewareFor,\n type Middlewares,\n type ServiceClientName,\n} from './createMiddlewareFor';\nimport { ServiceUnavailableError } from './errors';\nimport type { MiddlewareFn } from './fetchClient';\nimport { createServiceClientRegistry, isBuiltInProperty } from './serviceClientRegistry';\nimport { assert, coalesce, createDerivedStore, createStore } from './utils';\n\nexport type ApiClientOptions = {\n token: {\n storageApi: string;\n managementApi?: string;\n };\n assetsBaseUrl: string;\n statusBaseUrl: string;\n metastoreBaseUrl: string;\n middlewares?: Middlewares;\n clientServiceUrls?: ServiceUrls;\n} & BaseClientOptions;\n\nconst createAttachTokenMiddleware =\n (getToken: () => string): MiddlewareFn =>\n (next) =>\n (request) => {\n request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());\n return next(request);\n };\n\n// Storage API endpoints that mutate fields carried by the verified token, so the\n// live project must re-verify after them. Each pattern is matched against the URL pathname.\nconst STORAGE_TOKEN_MUTATING_PATTERNS = [\n // Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.\n // At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)\n // under /buckets/{id}/... don't trigger a re-verify.\n /\\/buckets(\\/[^/]+)?$/,\n // Project feature toggles — changes token.owner.features. Anchored to\n // /projects/{id}/features so /manage/features and /users/{id}/features don't match.\n /\\/projects\\/[^/]+\\/features(\\/[^/]+)?$/,\n];\n\nexport const isStorageTokenMutatingRequest = (request: Request): boolean => {\n if (request.method === 'GET') return false;\n const { pathname } = new URL(request.url);\n return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));\n};\n\nconst createProjectRefreshMiddleware =\n (\n shouldRefresh: (request: Request) => boolean,\n requestRefresh: () => Promise<void>,\n ): MiddlewareFn =>\n (next) =>\n async (request) => {\n const response = await next(request);\n // Await the re-verify before resolving the mutating request, so a caller that\n // reads `api.context.project` right after it can never observe pre-mutation state.\n if (shouldRefresh(request.request)) await requestRefresh();\n return response;\n };\n\nexport const createLiveProject = ({\n initialToken,\n verify,\n}: {\n initialToken: StorageToken;\n verify: () => Promise<StorageToken>;\n}) => {\n const store = createStore(createProject({ sapiToken: initialToken }));\n const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));\n const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);\n return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware };\n};\n\nconst createLiveToken = ({ initialToken }: { initialToken: string }) => {\n const store = createStore(initialToken);\n const attachTokenMiddleware = createAttachTokenMiddleware(() => store.get());\n return { attachTokenMiddleware, set: store.set };\n};\n\nconst createClients = async ({\n baseUrl,\n token,\n assetsBaseUrl,\n statusBaseUrl,\n metastoreBaseUrl,\n clientServiceUrls,\n middlewares,\n}: ApiClientOptions) => {\n const middlewareFor = createMiddlewareFor(middlewares);\n const liveToken = createLiveToken({ initialToken: token.storageApi });\n\n const _storage = createStorageClient({\n baseUrl,\n token: token.storageApi,\n middlewares: [liveToken.attachTokenMiddleware],\n });\n\n const [stackInfo, sapiToken, devBranches] = await Promise.all([\n _storage.getStackInfo({ exclude: 'componentDetails' }),\n _storage.tokens.verify(),\n _storage.branches.getDevBranches(),\n ]);\n const stack = createStack({ stackInfo, clientServiceUrls });\n const defaultBranch = createDefaultBranch({ devBranches });\n\n const liveProject = createLiveProject({\n initialToken: sapiToken,\n verify: () => _storage.tokens.verify(),\n });\n\n const storageTableStore = createDerivedStore({\n source: liveProject.store,\n build: createStorageTable,\n dependsOn: (project) => ({\n useLegacyBucketPrefix: !project.hasFeature(ProjectFeatures.DISABLE_LEGACY_BUCKET_PREFIX),\n hasProtectedDefaultBranch: project.hasFeature(ProjectFeatures.SOX_PROTECTED_DEFAULT_BRANCH),\n hasStorageBranches: project.hasFeature(ProjectFeatures.STORAGE_BRANCHES),\n }),\n });\n\n const storage = createStorageClient({\n baseUrl,\n token: token.storageApi,\n middlewares: middlewareFor('storage', [liveProject.middleware]),\n onRefreshToken: liveToken.set,\n });\n\n const management = createManagementClient({\n baseUrl,\n token: token.managementApi,\n middlewares: middlewareFor('management', [liveProject.middleware]),\n });\n\n const { client, meta } = createServiceClientRegistry<ServiceId, ServiceClientName>()({\n getServiceBaseUrl: (serviceId) => stack.getServiceUrl(serviceId),\n onUnavailable: ({ serviceId, path, clientName }) => {\n throw new ServiceUnavailableError(serviceId, path, clientName);\n },\n })\n .add({\n serviceId: 'vault',\n clientName: 'vault',\n clientFn: (serviceBaseUrl) =>\n createVaultClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('vault', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'data-science',\n clientName: 'dataScience',\n clientFn: (serviceBaseUrl) =>\n createDataScienceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('dataScience', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'encryption',\n clientName: 'encryption',\n clientFn: (serviceBaseUrl) =>\n createEncryptionClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('encryption'),\n }),\n })\n .add({\n serviceId: 'editor',\n clientName: 'editor',\n clientFn: (serviceBaseUrl) =>\n createEditorClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('editor', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'sync-actions',\n clientName: 'syncActions',\n clientFn: (serviceBaseUrl) =>\n createSyncActionsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('syncActions', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'telemetry',\n clientName: 'telemetry',\n clientFn: (serviceBaseUrl) =>\n createTelemetryClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('telemetry', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'query',\n clientName: 'queryService',\n clientFn: (serviceBaseUrl) =>\n createQueryServiceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queryService', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'queue',\n clientName: 'queue',\n clientFn: (serviceBaseUrl) =>\n createQueueClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queue', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'kai-assistant',\n clientName: 'chat',\n clientFn: (serviceBaseUrl) =>\n createChatClient({\n storageApiUrl: baseUrl,\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('chat', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'ai',\n clientName: 'ai',\n clientFn: (serviceBaseUrl) =>\n createAiClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('ai', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'import',\n clientName: 'import',\n clientFn: (serviceBaseUrl) =>\n createImportClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('import', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'kai-agent',\n clientName: 'kaiAgent',\n clientFn: (serviceBaseUrl) =>\n createKaiAgentClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('kaiAgent', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'oauth',\n clientName: 'oauth',\n clientFn: (serviceBaseUrl) =>\n createOauthClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('oauth', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'scheduler',\n clientName: 'scheduler',\n clientFn: (serviceBaseUrl) =>\n createSchedulerClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('scheduler', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'stream',\n clientName: 'stream',\n clientFn: (serviceBaseUrl) =>\n createStreamClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('stream', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'notification',\n clientName: 'notifications',\n clientFn: (serviceBaseUrl) =>\n createNotificationsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('notifications', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .build();\n\n const metastore = createMetastoreClient({\n baseUrl: metastoreBaseUrl,\n middlewares: middlewareFor('metastore', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n });\n\n const assets = createAssetsClient({\n baseUrl: assetsBaseUrl,\n middlewares: middlewareFor('assets'),\n });\n\n const status = createStatusClient({\n baseUrl: statusBaseUrl,\n middlewares: middlewareFor('status'),\n });\n\n const tag = createTagSdk({\n metastoreClient: metastore,\n });\n\n const storageSdk = createStorageSdk({\n storageClient: storage,\n });\n\n const vault = createVaultSdk({\n vaultClient: client.vault,\n encryptionClient: client.encryption,\n });\n\n // Session/environment context the client is bound to, grouped so it stays distinct from the\n // operation clients below. `project` is a getter so each read reflects the live re-verified state.\n const context = {\n stack,\n defaultBranch,\n get project() {\n return liveProject.getProject();\n },\n get st() {\n return storageTableStore.get();\n },\n serviceMeta: meta,\n };\n\n const configuration = createConfigurationSdk({\n storageClient: storage,\n encryptionClient: client.encryption,\n context,\n });\n\n return {\n context,\n\n // clients\n storage,\n assets,\n status,\n management,\n ...client,\n\n sdk: {\n configuration,\n tag,\n storage: storageSdk,\n vault,\n },\n };\n};\n\ntype Clients = Awaited<ReturnType<typeof createClients>>;\nexport type ClientContext = Clients['context'];\nexport type ApiClient = {\n init: (options: ApiClientOptions) => Promise<void>;\n} & Clients;\n\nexport const createApiClient = (): ApiClient => {\n let clients: Clients | null = null;\n\n const init = async (options: ApiClientOptions) => {\n if (clients) throw new Error('API is already initialized.');\n\n clients = await createClients(options);\n };\n\n const result = { init } as {\n init: typeof init;\n } & Clients;\n\n const handler: ProxyHandler<typeof result> = {\n get(_, property) {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(property)) return undefined;\n\n if (property === 'init') return init;\n assert(clients, `API is not initialized. Call init() before accessing ${String(property)}`);\n return clients[property as keyof Clients];\n },\n };\n\n return new Proxy(result, handler);\n};\n","import { KeboolaHttpHeader } from '../constants';\nimport { ApiError } from '../errors';\nimport { type HttpMethod, isApiError, type MiddlewareFn } from '../fetchClient';\nimport { generateUUID } from '../utils';\n\nconst CORRELATION_ID_HEADER = 'X-Correlation-ID';\n\nconst ALWAYS_REDACTED_HEADERS = [\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n 'authorization',\n 'cookie',\n 'set-cookie',\n];\n\nconst ALWAYS_REDACTED_QUERY_PARAMS = new Set([\n 'token',\n 'apikey',\n 'api_key',\n 'access_token',\n 'refresh_token',\n 'code',\n 'state',\n 'signature',\n 'sig',\n 'x-amz-signature',\n 'x-amz-credential',\n 'x-amz-security-token',\n 'password',\n 'secret',\n]);\n\nconst REDACTED = '[REDACTED]';\n\nconst getRedactedUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n if (url.username) url.username = REDACTED;\n if (url.password) url.password = REDACTED;\n\n url.searchParams.forEach((_value, key) => {\n if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {\n url.searchParams.set(key, REDACTED);\n }\n });\n return url.toString();\n};\n\n// Returns the request's correlation ID, generating and attaching one if missing.\n//\n// Forwarded via the X-Correlation-ID header so downstream services log the same ID,\n// letting all log lines for a single user action be stitched together across service\n// boundaries. Reuse when the caller already set one (preserves the chain inside a\n// larger trace); otherwise mint a fresh UUID to start a new trace.\nconst ensureCorrelationId = (request: Request): string => {\n const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();\n request.headers.set(CORRELATION_ID_HEADER, correlationId);\n return correlationId;\n};\n\nconst getRedactedHeaders = (headers: Headers, redacted: string[]): Record<string, string> => {\n const redactedSet = new Set(\n [...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase()),\n );\n\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport type RequestLog = {\n url: string;\n headers: Record<string, string>;\n};\n\nexport type ResponseLog = {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n};\n\ntype BaseLog = {\n correlationId: string;\n method: HttpMethod;\n durationMs: number;\n request: RequestLog;\n};\n\ntype SuccessLog = BaseLog & {\n response: ResponseLog;\n};\n\ntype ErrorLog = BaseLog & {\n error: Error;\n};\n\nexport type Log = SuccessLog | ErrorLog;\n\nexport type Logger = {\n info?: (log: SuccessLog) => void;\n error?: (log: ErrorLog) => void;\n};\n\nexport type LogLevel = 'error-only' | 'all';\n\nexport type LoggingOptions = {\n logger?: Logger;\n level?: LogLevel;\n redactHeaders?: string[];\n};\n\nconst getRequestLog = (request: Request, redactedHeaders: string[]): RequestLog => ({\n url: getRedactedUrl(request.url),\n headers: getRedactedHeaders(request.headers, redactedHeaders),\n});\n\nconst getResponseLog = (response: Response, redactedHeaders: string[]): ResponseLog => ({\n status: response.status,\n statusText: response.statusText,\n headers: getRedactedHeaders(response.headers, redactedHeaders),\n});\n\n// On failure the logger receives the thrown error itself, but an ApiError carries the raw\n// fetch Request/Response whose headers were never redacted (only the middleware's own log\n// payload is). Hand the logger a copy with the same redaction applied to its headers and URL;\n// the original error is still thrown untouched so error handlers keep full fidelity.\nconst redactApiError = (error: ApiError, redactedHeaders: string[]): ApiError =>\n new ApiError({\n request: new Request(getRedactedUrl(error.request.url), {\n method: error.request.method,\n headers: getRedactedHeaders(error.request.headers, redactedHeaders),\n }),\n response: new Response(null, {\n status: error.response.status,\n statusText: error.response.statusText,\n headers: getRedactedHeaders(error.response.headers, redactedHeaders),\n }),\n data: error.data,\n });\n\nconst formatLog = (level: 'info' | 'error', log: Log): string => {\n const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];\n parts.push(log.request.url);\n if ('response' in log) parts.push(String(log.response.status));\n return parts.join(' ');\n};\n\nconst createSafeLogger = (logger?: Logger, level: LogLevel = 'error-only'): Required<Logger> => {\n return {\n info: (log) => {\n if (level !== 'all') return;\n try {\n if (logger?.info) {\n logger.info(log);\n return;\n }\n\n console.info(formatLog('info', log));\n } catch {\n /* never let logging break the request */\n }\n },\n error: (log) => {\n try {\n if (logger?.error) {\n logger.error(log);\n return;\n }\n\n console.error(formatLog('error', log));\n } catch {\n /* never let logging break the request */\n }\n },\n };\n};\n\nexport const createLoggingMiddleware = (options: LoggingOptions = {}): MiddlewareFn => {\n const safeLogger = createSafeLogger(options.logger, options.level);\n const redactHeaders = options.redactHeaders ?? [];\n\n return (next) => async (fetchRequest) => {\n const correlationId = ensureCorrelationId(fetchRequest.request);\n const start = performance.now();\n const method = fetchRequest.request.method.toLowerCase() as HttpMethod;\n const requestLog = getRequestLog(fetchRequest.request, redactHeaders);\n\n try {\n const result = await next(fetchRequest);\n safeLogger.info({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n response: getResponseLog(result.response, redactHeaders),\n });\n return result;\n } catch (error) {\n if (error instanceof Error)\n safeLogger.error({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n error: isApiError(error) ? redactApiError(error, redactHeaders) : error,\n });\n\n throw error;\n }\n };\n};\n","import { HttpStatus } from '../constants';\nimport { ApiError } from '../errors';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { delay } from '../utils/delay';\n\nconst DEFAULT_MAX_RETRIES = 5;\nconst DEFAULT_RETRYABLE_STATUSES: number[] = [\n HttpStatus.INTERNAL_SERVER_ERROR,\n HttpStatus.BAD_GATEWAY,\n HttpStatus.SERVICE_UNAVAILABLE,\n HttpStatus.GATEWAY_TIMEOUT,\n];\nconst DEFAULT_BACKOFF_FACTOR = 0.3;\n\nexport type RetryOptions = {\n maxRetries?: number;\n backoffFactor?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n};\n\nconst defaultShouldRetry = (error: unknown): boolean =>\n error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);\n\nexport const createRetryMiddleware = (options?: RetryOptions): MiddlewareFn => {\n const {\n maxRetries = DEFAULT_MAX_RETRIES,\n backoffFactor = DEFAULT_BACKOFF_FACTOR,\n shouldRetry = defaultShouldRetry,\n } = options ?? {};\n\n if (!Number.isInteger(maxRetries) || maxRetries < 0) {\n throw new RangeError('maxRetries must be a non-negative integer');\n }\n if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {\n throw new RangeError('backoffFactor must be a finite non-negative number');\n }\n\n return (next) => async (request) => {\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await next({ ...request, request: request.request.clone() });\n } catch (error) {\n if (attempt === maxRetries || !shouldRetry(error, attempt)) {\n throw error;\n }\n\n const delayMs = backoffFactor * 1000 * Math.pow(2, attempt);\n await delay(delayMs, request.request.signal ?? undefined);\n }\n }\n\n throw new Error('unreachable');\n };\n};\n","import { createVerifyClient } from './clients/verify';\n\nexport const createDevApiClient = () => ({\n verify: createVerifyClient(),\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/clients/kaiAgent/kaiAgentClient.ts","../src/utils/assert.ts","../src/utils/coalesce.ts","../src/utils/createStore.ts","../src/utils/deepMerge.ts","../src/domain/defaultBranch.ts","../src/domain/stack.ts","../src/sdks/variables/variablesSdk.ts","../src/createMiddlewareFor.ts","../src/serviceClientRegistry/utils.ts","../src/serviceClientRegistry/createServiceClientRegistry.ts","../src/client.ts","../src/middlewares/loggingMiddleware.ts","../src/middlewares/retryMiddleware.ts","../src/devClient.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { KeboolaHttpHeader } from '../../internal';\nimport type { SuggestionsApiResponse, SuggestionsRequestBody } from '../chat/suggestions';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n ApprovalBody,\n ChatRequest,\n GetChatPath,\n GetHistoryQuery,\n GetVotesQuery,\n UsageResponse,\n VoteRequest,\n} from './types';\n\nconst agentSettingsSchema = z.object({\n projectId: z.string(),\n customInstructions: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolPermissionValueSchema = z.enum(['always_allow', 'always_ask', 'blocked']);\n\nconst userAgentSettingsSchema = z.object({\n projectId: z.string(),\n userId: z.string(),\n customInstructions: z.string().nullable(),\n toolPermissions: z.record(z.string(), toolPermissionValueSchema).nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst toolInfoSchema = z.object({\n name: z.string(),\n description: z.string(),\n readOnly: z.boolean(),\n});\n\nconst toolsListResponseSchema = z.object({\n tools: z.array(toolInfoSchema),\n});\n\nconst skillInfoSchema = z.object({\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum(['first-party', 'vendored', 'project']),\n});\n\nconst builtInCommandSchema = z.object({\n name: z.string(),\n description: z.string(),\n});\n\nconst skillsListResponseSchema = z.object({\n skills: z.array(skillInfoSchema),\n commands: z.array(builtInCommandSchema),\n});\n\nconst sandboxFileEntrySchema = z.object({\n name: z.string(),\n path: z.string(),\n type: z.enum(['file', 'dir']),\n size: z.number().int().nonnegative().optional(),\n});\n\nconst sandboxFileListingSchema = z.object({\n entries: z.array(sandboxFileEntrySchema),\n});\n\nconst sandboxFileContentSchema = z.object({\n content: z.string(),\n encoding: z.enum(['utf-8', 'binary']),\n truncated: z.boolean(),\n size: z.number().int().nonnegative(),\n});\n\nconst sandboxGitBranchSchema = z.object({\n branch: z.string().nullable(),\n});\n\ntype AgentSettings = z.infer<typeof agentSettingsSchema>;\ntype UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;\ntype ToolsListResponse = z.infer<typeof toolsListResponseSchema>;\ntype SkillsListResponse = z.infer<typeof skillsListResponseSchema>;\ntype SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;\ntype SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;\ntype SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;\n\ntype UpdateAgentSettingsRequest = {\n customInstructions?: string | null;\n};\n\ntype UpdateUserAgentSettingsRequest = {\n customInstructions?: string | null;\n toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;\n};\n\nexport const createKaiAgentClient = ({ baseUrl, middlewares, token }: ClientInitOptions) => {\n const clientOptions = {\n baseUrl,\n middlewares,\n headers: { [KeboolaHttpHeader.STORAGE_API_TOKEN]: token },\n };\n\n const client = createOpenapiFetchClient<paths>(clientOptions);\n const genericClient = createGenericFetchClient(clientOptions);\n\n const getHistory = async (params?: GetHistoryQuery) => {\n const { data } = await client.get('/api/history', { query: params });\n return data;\n };\n\n const getChat = async (chatId: GetChatPath['id'], signal?: AbortSignal) => {\n const { data } = await client.get('/api/chat/{id}', { path: { id: chatId } }, { signal });\n return data;\n };\n\n const deleteChat = async (chatId: string) => {\n const { data } = await client.delete('/api/chat', { query: { id: chatId } });\n return data;\n };\n\n const createChat = async (request: ChatRequest) => {\n const { response } = await client.post('/api/chat', { body: request });\n return response;\n };\n\n const getVotes = async (chatId: GetVotesQuery['chatId']) => {\n const { data } = await client.get('/api/vote', { query: { chatId } });\n return data;\n };\n\n const submitVote = async (params: VoteRequest) => {\n await client.patch('/api/vote', { body: params });\n };\n\n const getUsage = async (signal?: AbortSignal): Promise<UsageResponse> => {\n const { data } = await client.get('/api/usage', {}, { signal });\n return data;\n };\n\n const approveToolCall = async (chatId: string, body: ApprovalBody): Promise<void> => {\n await client.post('/api/chat/{id}/approval', { path: { id: chatId }, body });\n };\n\n const submitToolOutput = async (\n chatId: string,\n body: { toolUseId: string; output?: string; errorText?: string },\n ): Promise<void> => {\n await client.post('/api/chat/{id}/ui-tool-result', { path: { id: chatId }, body });\n };\n\n const stopChat = async (chatId: string): Promise<{ stopped: boolean }> => {\n const { data } = await client.post('/api/chat/{id}/stop', { path: { id: chatId } });\n return data;\n };\n\n const getSuggestions = async (\n request: SuggestionsRequestBody,\n signal?: AbortSignal,\n ): Promise<SuggestionsApiResponse> => {\n const { data } = await client.post('/api/suggestions', { body: request }, { signal });\n return data;\n };\n\n const getAgentSettings = async (signal?: AbortSignal): Promise<AgentSettings> => {\n const { data } = await genericClient.get<AgentSettings>('/api/settings', {}, { signal });\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const updateAgentSettings = async (\n request: UpdateAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<AgentSettings> => {\n const { data } = await genericClient.patch<AgentSettings>(\n '/api/settings',\n { body: request },\n { signal },\n );\n const result = agentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid agent settings response format');\n }\n return result.data;\n };\n\n const getUserAgentSettings = async (signal?: AbortSignal): Promise<UserAgentSettings> => {\n const { data } = await genericClient.get<UserAgentSettings>(\n '/api/settings/user',\n {},\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const updateUserAgentSettings = async (\n request: UpdateUserAgentSettingsRequest,\n signal?: AbortSignal,\n ): Promise<UserAgentSettings> => {\n const { data } = await genericClient.patch<UserAgentSettings>(\n '/api/settings/user',\n { body: request },\n { signal },\n );\n const result = userAgentSettingsSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid user agent settings response format');\n }\n return result.data;\n };\n\n const getToolsList = async (signal?: AbortSignal): Promise<ToolsListResponse> => {\n const { data } = await genericClient.get<ToolsListResponse>(\n '/api/settings/tools',\n {},\n { signal },\n );\n const result = toolsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid tools list response format');\n }\n return result.data;\n };\n\n const getSkillsList = async (signal?: AbortSignal): Promise<SkillsListResponse> => {\n const { data } = await genericClient.get<SkillsListResponse>('/api/skills', {}, { signal });\n const result = skillsListResponseSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid skills list response format');\n }\n return result.data;\n };\n\n const listSandboxFiles = async (\n chatId: string,\n path?: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileListing> => {\n const { data } = await genericClient.get<SandboxFileListing>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,\n { query: path ? { path } : undefined },\n { signal },\n );\n const result = sandboxFileListingSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox files response format');\n }\n return result.data;\n };\n\n const readSandboxFile = async (\n chatId: string,\n path: string,\n signal?: AbortSignal,\n ): Promise<SandboxFileContent> => {\n const { data } = await genericClient.get<SandboxFileContent>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,\n { query: { path } },\n { signal },\n );\n const result = sandboxFileContentSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox file response format');\n }\n return result.data;\n };\n\n const getSandboxGitBranch = async (\n chatId: string,\n signal?: AbortSignal,\n ): Promise<SandboxGitBranch> => {\n const { data } = await genericClient.get<SandboxGitBranch>(\n `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,\n {},\n { signal },\n );\n const result = sandboxGitBranchSchema.safeParse(data);\n if (!result.success) {\n throw new Error('Invalid sandbox git-branch response format');\n }\n return result.data;\n };\n\n const chatStreamUrl = clientOptions.baseUrl + '/api/chat';\n\n return {\n getHistory,\n getChat,\n deleteChat,\n createChat,\n getVotes,\n submitVote,\n getUsage,\n approveToolCall,\n submitToolOutput,\n stopChat,\n getSuggestions,\n getAgentSettings,\n updateAgentSettings,\n getUserAgentSettings,\n updateUserAgentSettings,\n getToolsList,\n getSkillsList,\n listSandboxFiles,\n readSandboxFile,\n getSandboxGitBranch,\n chatStreamUrl,\n };\n};\n","export function assert<T>(value: T | undefined | null, message: string): asserts value is T {\n if (value == null) {\n throw new Error(message);\n }\n}\n","type TaskFn<T> = () => T;\n\n/**\n * Coalesces concurrent triggers onto a single, never-parallel run of `task`.\n * Triggers fired while a run is busy collapse into one trailing run, and each\n * resolves with the first run that started after it — so it never sees stale state.\n *\n * Example — A triggers, then B and C trigger while A's run is still going:\n * 1. trigger A → run #1 starts\n * 2. trigger B, C → run #1 busy, so they wait\n * 3. run #1 done → A resolves\n * 4. run #2 starts → covers B and C together (one trailing run, not two)\n * 5. run #2 done → B and C resolve\n *\n * @returns a trigger; each call returns a promise of the task result.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void trigger()`).\n */\nexport const coalesce = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let running = false;\n const waiters: PromiseWithResolvers<Awaited<T>>[] = [];\n\n const drain = async () => {\n running = true;\n const batch = waiters.splice(0);\n\n try {\n const result = await task();\n batch.forEach((waiter) => waiter.resolve(result));\n } catch (error) {\n batch.forEach((waiter) => waiter.reject(error));\n }\n // Drain any triggers that arrived during the task; tail position, so no stack growth.\n if (waiters.length > 0) return drain();\n running = false;\n };\n\n return () => {\n const waiter = Promise.withResolvers<Awaited<T>>();\n waiters.push(waiter);\n if (!running) void drain();\n return waiter.promise;\n };\n};\n","type Listener<T> = (value: T) => void;\n\nexport type ReadableStore<T> = {\n get: () => T;\n subscribe: (listener: Listener<T>) => () => void;\n};\n\nexport type Store<T> = ReadableStore<T> & {\n set: (value: T) => void;\n};\n\nexport const createStore = <T>(initial: T): Store<T> => {\n let value = initial;\n const listeners = new Set<Listener<T>>();\n\n return {\n get: () => value,\n set: (next) => {\n if (Object.is(next, value)) return;\n value = next;\n listeners.forEach((listener) => listener(value));\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nconst isPlainObjectOrArray = (value: object): boolean => {\n if (Array.isArray(value)) return true;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nexport const shallowEqual = <T>(a: T, b: T): boolean => {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n if (!isPlainObjectOrArray(a) || !isPlainObjectOrArray(b)) return false;\n const aKeys = Object.keys(a) as (keyof T)[];\n const bKeys = Object.keys(b) as (keyof T)[];\n return aKeys.length === bKeys.length && aKeys.every((key) => Object.is(a[key], b[key]));\n};\n\ntype DerivedStoreOptions<S, K, T> = {\n source: ReadableStore<S>;\n dependsOn: (state: S) => K;\n build: (key: K) => T;\n keyEquals?: (a: K, b: K) => boolean;\n};\n\nexport const createDerivedStore = <S, K, T>({\n source,\n dependsOn,\n build,\n keyEquals = shallowEqual,\n}: DerivedStoreOptions<S, K, T>): ReadableStore<T> => {\n let key = dependsOn(source.get());\n const store = createStore(build(key));\n\n // Intentionally a permanent subscription with no teardown: a derived store is bound to its\n // source's lifetime (both live as long as the client) so there is nothing to dispose. Add\n // lazy subscribe/unsubscribe only if a use case ever creates short-lived derived stores.\n source.subscribe((state) => {\n const next = dependsOn(state);\n if (keyEquals(key, next)) return;\n key = next;\n store.set(build(next));\n });\n\n return { get: store.get, subscribe: store.subscribe };\n};\n","import { isPlainObject } from './isPlainObject';\n\n/**\n * Recursively merge `patch` into `base`. Plain-object values are merged key-by-key; every\n * other value (primitives, arrays, or a type mismatch between the two sides) replaces the\n * base value. `undefined` patch values are skipped, so a partial patch leaves untouched\n * fields alone. Pure — neither argument is mutated; the result preserves `base`'s type.\n */\nexport const deepMerge = <T extends Record<string, unknown>>(\n base: T,\n patch: Record<string, unknown>,\n): T => {\n const out: Record<string, unknown> = { ...base };\n\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n const current = out[key];\n out[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;\n }\n\n return out as T;\n};\n","import type { DevBranch } from '../clients/storage/branches/types';\nimport { assert } from '../utils';\n\ntype BranchType = 'default' | 'dev';\n\ntype Options = {\n devBranches: DevBranch[];\n};\n\nexport const createDefaultBranch = ({ devBranches }: Options) => {\n const defaultBranch = devBranches.find((branch) => branch.isDefault);\n assert(defaultBranch, 'No default branch found for the project.');\n\n const getType = (branchId?: string | number): BranchType => {\n if (branchId == null || branchId === 'default') return 'default';\n return Number(branchId) === defaultBranch.id ? 'default' : 'dev';\n };\n\n return {\n id: defaultBranch.id,\n name: defaultBranch.name,\n getType,\n isDev: (branchId?: string | number) => getType(branchId) === 'dev',\n isDefault: (branchId?: string | number) => getType(branchId) === 'default',\n };\n};\n","import type { ServiceId, StackInfo } from '../clients/storage/types';\n\nexport type ServiceUrls = Partial<Record<ServiceId, (url: string) => string | undefined | null>>;\n\nconst SERVICE_URL_OVERRIDES: ServiceUrls = {\n // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.\n // I assume the service is versioned.\n 'kai-assistant': (url) => `${url}/api`,\n};\n\ntype Options = {\n stackInfo: StackInfo;\n clientServiceUrls?: ServiceUrls;\n};\n\nexport const createStack = ({ stackInfo, clientServiceUrls }: Options) => {\n const { services, components, features, ...infoRest } = stackInfo;\n\n const serviceMap = new Map(\n services.map((service) => {\n const devOverride = clientServiceUrls?.[service.id]?.(service.url);\n const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);\n const url = devOverride ?? prodOverride ?? service.url;\n return [service.id, url];\n }),\n );\n\n const componentMap = new Map(components.map((component) => [component.id, component]));\n const featureSet = new Set(features);\n\n const hasFeature = (...feature: string[]) => {\n if (feature.length === 0) return false;\n return feature.every((x) => featureSet.has(x));\n };\n\n const hasComponent = (...componentId: string[]) => {\n if (componentId.length === 0) return false;\n return componentId.every((x) => componentMap.has(x));\n };\n\n const getComponent = (componentId: string) => componentMap.get(componentId) ?? null;\n\n const hasService = (serviceId: ServiceId) => serviceMap.has(serviceId);\n\n const getServiceUrl = (serviceId: ServiceId) => serviceMap.get(serviceId) ?? null;\n\n return {\n ...infoRest,\n services,\n features,\n components,\n hasFeature,\n getServiceUrl,\n hasService,\n getComponent,\n hasComponent,\n };\n};\n","import type * as storage from '../../clients/storage';\n\nconst VARIABLES_COMPONENT_ID = 'keboola.variables';\n\ntype BranchId = number | string;\n\ntype VariableDefinition = { name: string; type?: string };\ntype VariableValue = { name: string; value?: unknown };\n\n/** Reference to a `keboola.variables` config + the values row a config points at. */\ntype VariablesRef = { variablesId: string; variablesValuesId: string };\n\ntype Options = {\n storageClient: ReturnType<typeof storage.createStorageClient>;\n};\n\n/** Union the definitions by name; on a name conflict the target's definition is kept. */\nexport const mergeVariableDefinitions = (\n target: VariableDefinition[],\n source: VariableDefinition[],\n): VariableDefinition[] => {\n const targetNames = new Set(target.map((definition) => definition.name));\n\n return [...target, ...source.filter((definition) => !targetNames.has(definition.name))];\n};\n\n/** Add values missing in the target; on a name conflict the value is updated to the source's. */\nexport const mergeVariableValues = (\n target: VariableValue[],\n source: VariableValue[],\n): VariableValue[] => {\n const sourceByName = new Map(source.map((value) => [value.name, value.value]));\n const targetNames = new Set(target.map((value) => value.name));\n\n return [\n ...target.map((value) =>\n sourceByName.has(value.name) ? { ...value, value: sourceByName.get(value.name) } : value,\n ),\n ...source.filter((value) => !targetNames.has(value.name)),\n ];\n};\n\n/**\n * Orchestration for `keboola.variables` configs: copy a config, or merge two configs into a fresh\n * one (union definitions, upsert values — source wins on a name conflict). Each result is a brand\n * new config + values row, so the caller can reference it without sharing lineage with the source.\n */\nexport const createVariablesSdk = ({ storageClient }: Options) => {\n const configs = storageClient.componentsAndConfigurations;\n\n const readVariables = async (\n configId: string,\n valuesRowId: string | undefined,\n branchId: BranchId,\n ) => {\n const config = await configs.getConfiguration({\n componentId: VARIABLES_COMPONENT_ID,\n configId,\n branchId,\n });\n // variables configs carry a single values row — read the referenced one, or the only one\n const row = config.rows.find((candidate) => candidate.id === valuesRowId) ?? config.rows[0];\n\n const rawDefinitions = config.configuration?.variables;\n const rawValues = row?.configuration?.values;\n\n // guard the array shape — a non-array from Storage would throw in the merge helpers' .map()\n return {\n definitions: (Array.isArray(rawDefinitions) ? rawDefinitions : []) as VariableDefinition[],\n values: (Array.isArray(rawValues) ? rawValues : []) as VariableValue[],\n };\n };\n\n const createVariables = async (\n definitions: VariableDefinition[],\n values: VariableValue[],\n branchId: BranchId,\n ): Promise<VariablesRef> => {\n const config = await configs.createConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n name: 'Variables definition',\n configuration: { variables: definitions },\n });\n\n try {\n const row = await configs.createConfigurationRow({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n name: 'Default values',\n configuration: { values },\n });\n\n return { variablesId: config.id, variablesValuesId: row.id };\n } catch (error) {\n // the values row failed — best-effort drop the orphaned config, but always surface the original error\n await configs\n .deleteConfiguration({\n branchId,\n componentId: VARIABLES_COMPONENT_ID,\n configId: config.id,\n })\n .catch((cleanupError: unknown) => {\n // keep the cleanup failure on the original error rather than letting it mask the real cause\n if (error instanceof Error && error.cause === undefined) {\n error.cause = cleanupError;\n }\n });\n throw error;\n }\n };\n\n return {\n /** Copy a variables config into a fresh, independent config + values row. */\n copy: async ({\n variablesId,\n variablesValuesId,\n branchId = 'default',\n }: {\n variablesId: string;\n variablesValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const { definitions, values } = await readVariables(variablesId, variablesValuesId, branchId);\n\n return createVariables(definitions, values, branchId);\n },\n\n /** Merge the source's variables into the target's and create a fresh merged config + values row. */\n merge: async ({\n targetVariablesId,\n targetValuesId,\n sourceVariablesId,\n sourceValuesId,\n branchId = 'default',\n }: {\n targetVariablesId: string;\n targetValuesId?: string;\n sourceVariablesId: string;\n sourceValuesId?: string;\n branchId?: BranchId;\n }): Promise<VariablesRef> => {\n const [target, source] = await Promise.all([\n readVariables(targetVariablesId, targetValuesId, branchId),\n readVariables(sourceVariablesId, sourceValuesId, branchId),\n ]);\n\n return createVariables(\n mergeVariableDefinitions(target.definitions, source.definitions),\n mergeVariableValues(target.values, source.values),\n branchId,\n );\n },\n };\n};\n","import type { MiddlewareFn } from './fetchClient';\n\n/**\n * Service clients reached through the registry — the key is the `clientName`\n * the user accesses them by (e.g. `api.dataScience`), not the `serviceId`.\n */\nexport type ServiceClientName =\n | 'vault'\n | 'dataScience'\n | 'encryption'\n | 'editor'\n | 'syncActions'\n | 'telemetry'\n | 'queryService'\n | 'queue'\n | 'chat'\n | 'ai'\n | 'import'\n | 'kaiAgent'\n | 'oauth'\n | 'stream'\n | 'notifications'\n | 'scheduler';\n\n/** Clients instantiated directly (not stack-discovered), keyed by their property name. */\nexport type NonServiceClientName = 'storage' | 'management' | 'assets' | 'status' | 'metastore';\n\nexport type MiddlewareTarget = ServiceClientName | NonServiceClientName;\n\nexport type Middlewares =\n | MiddlewareFn[]\n | ({ all?: MiddlewareFn[] } & Partial<Record<MiddlewareTarget, MiddlewareFn[]>>);\n\nexport const createMiddlewareFor = (middlewares: Middlewares | undefined) => {\n return (target: MiddlewareTarget, baseline: MiddlewareFn[] = []): MiddlewareFn[] => {\n if (Array.isArray(middlewares)) return [...baseline, ...middlewares];\n\n const all = middlewares?.all ?? [];\n const targeted = middlewares?.[target] ?? [];\n return [...baseline, ...all, ...targeted];\n };\n};\n","export const isBuiltInProperty = (property: string | symbol) =>\n typeof property === 'symbol' ||\n property === 'then' ||\n property === 'constructor' ||\n property === 'toString' ||\n property === 'valueOf';\n\n/**\n * Creates a dummy client that intercepts method calls and invokes the provided onCall callback.\n */\nexport const createDummyClient = <T extends Record<string, unknown>>({\n onCall,\n}: {\n onCall: (path: string[], args: unknown[]) => void;\n}): T => {\n const createProxy = (path: string[] = []) =>\n new Proxy(() => {}, {\n // Create a new proxy for nested property access\n get: (_target, prop) => {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(prop)) return undefined;\n return createProxy([...path, prop]);\n },\n // When called as a function, invoke the interceptor\n apply: (_target, _thisArgs, args) => onCall(path, args),\n });\n\n return createProxy() as unknown as T;\n};\n","import { createDummyClient } from './utils';\n\ntype OnUnavailableFn = (info: {\n serviceId: string;\n path: string[];\n args: unknown[];\n clientName: string;\n}) => void;\n\ntype ClientConfig<ServiceId extends string, ClientName extends string> = {\n serviceId: ServiceId;\n clientName: ClientName;\n clientFn: (serviceUrl: string) => unknown;\n};\n\ntype ClientMeta<ServiceId extends string> = {\n clientName: string;\n serviceId: ServiceId;\n isAvailable: boolean;\n};\n\ntype Options<ServiceId extends string> = {\n getServiceBaseUrl: (serviceId: ServiceId) => string | null;\n onUnavailable?: OnUnavailableFn;\n};\n\ntype BuildResult<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n client: {\n [Config in Configs[number] as Config['clientName']]: ReturnType<Config['clientFn']>;\n };\n meta: ClientMeta<ServiceId>[];\n};\n\ntype Registry<\n ServiceId extends string,\n ClientName extends string,\n Configs extends ClientConfig<ServiceId, ClientName>[],\n> = {\n add: <const Config extends ClientConfig<ServiceId, ClientName>>(\n config: Config,\n ) => Registry<ServiceId, ClientName, [...Configs, Config]>;\n build: () => BuildResult<ServiceId, ClientName, Configs>;\n};\n\nexport const createServiceClientRegistry =\n <ServiceId extends string, ClientName extends string = string>() =>\n ({\n getServiceBaseUrl,\n onUnavailable,\n }: Options<ServiceId>): Registry<ServiceId, ClientName, []> => {\n const dummy = (serviceId: string, clientName: string) =>\n createDummyClient({\n onCall: (path, args) => {\n onUnavailable?.({\n serviceId,\n path,\n args,\n clientName,\n });\n },\n });\n\n const configs: ClientConfig<ServiceId, ClientName>[] = [];\n\n const resolveClient = ({\n serviceId,\n clientFn,\n clientName,\n }: ClientConfig<ServiceId, ClientName>) => {\n const serviceBaseUrl = getServiceBaseUrl(serviceId);\n return serviceBaseUrl ? clientFn(serviceBaseUrl) : dummy(serviceId, clientName);\n };\n\n type AnyConfig = ClientConfig<ServiceId, ClientName>;\n const registry: Registry<ServiceId, ClientName, AnyConfig[]> = {\n add: (config) => {\n configs.push(config);\n return registry;\n },\n build: () => {\n const clientMap: Record<string, unknown> = {};\n const clientMeta: ClientMeta<ServiceId>[] = [];\n\n configs.forEach((config) => {\n clientMap[config.clientName] = resolveClient(config);\n clientMeta.push({\n clientName: config.clientName,\n serviceId: config.serviceId,\n isAvailable: !!getServiceBaseUrl(config.serviceId),\n });\n });\n\n // The dynamically-built map can't be statically proven against the\n // per-config mapped type; the public key safety comes from the fluent\n // `add` chain asserted at the bottom of this factory.\n return {\n client: clientMap,\n meta: clientMeta,\n } as BuildResult<ServiceId, ClientName, AnyConfig[]>;\n },\n };\n\n return registry as Registry<ServiceId, ClientName, []>;\n };\n","import { createAiClient } from './clients/ai';\nimport { createAssetsClient } from './clients/assets';\nimport { createChatClient } from './clients/chat';\nimport { createDataScienceClient } from './clients/dataScience';\nimport { createEditorClient } from './clients/editor';\nimport { createEncryptionClient } from './clients/encryption';\nimport { createImportClient } from './clients/import';\nimport { createKaiAgentClient } from './clients/kaiAgent';\nimport { createManagementClient } from './clients/management';\nimport { createMetastoreClient } from './clients/metastore';\nimport { createNotificationsClient } from './clients/notifications';\nimport { createOauthClient } from './clients/oauth';\nimport { createQueryServiceClient } from './clients/queryService';\nimport { createQueueClient } from './clients/queue';\nimport { createSchedulerClient } from './clients/scheduler';\nimport { createStatusClient } from './clients/status';\nimport { createStorageClient } from './clients/storage';\nimport type { ServiceId, StorageToken } from './clients/storage/types';\nimport { createStreamClient } from './clients/stream';\nimport { createSyncActionsClient } from './clients/syncActions';\nimport { createTelemetryClient } from './clients/telemetry';\nimport type { BaseClientOptions } from './clients/types';\nimport { createVaultClient } from './clients/vault';\nimport { ProjectFeature } from './constants/projectFeatures';\nimport { createDefaultBranch } from './domain/defaultBranch';\nimport { createProject } from './domain/project';\nimport { createStack, type ServiceUrls } from './domain/stack';\nimport { createStorageTable } from './domain/storageTable';\nimport { createConfigurationSdk } from './sdks/configurations';\nimport { createStorageSdk } from './sdks/storage';\nimport { createTagSdk } from './sdks/tag';\nimport { createVariablesSdk } from './sdks/variables';\nimport { createVaultSdk } from './sdks/vault';\nimport {\n createMiddlewareFor,\n type Middlewares,\n type ServiceClientName,\n} from './createMiddlewareFor';\nimport { ServiceUnavailableError } from './errors';\nimport type { MiddlewareFn } from './fetchClient';\nimport { KeboolaHttpHeader } from './internal';\nimport { createServiceClientRegistry, isBuiltInProperty } from './serviceClientRegistry';\nimport { assert, coalesce, createDerivedStore, createStore } from './utils';\n\nexport type ApiClientOptions = {\n token: {\n storageApi: string;\n managementApi?: string;\n };\n assetsBaseUrl: string;\n statusBaseUrl: string;\n metastoreBaseUrl: string;\n middlewares?: Middlewares;\n clientServiceUrls?: ServiceUrls;\n} & BaseClientOptions;\n\nconst createAttachTokenMiddleware =\n (getToken: () => string): MiddlewareFn =>\n (next) =>\n (request) => {\n request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, getToken());\n return next(request);\n };\n\n// Storage API endpoints that mutate fields carried by the verified token, so the\n// live project must re-verify after them. Each pattern is matched against the URL pathname.\nconst STORAGE_TOKEN_MUTATING_PATTERNS = [\n // Bucket lifecycle (create / delete / register) — changes token.bucketPermissions.\n // At most one trailing segment, so sub-resources (tables, listing, metadata, refresh)\n // under /buckets/{id}/... don't trigger a re-verify.\n /\\/buckets(\\/[^/]+)?$/,\n // Project feature toggles — changes token.owner.features. Anchored to\n // /projects/{id}/features so /manage/features and /users/{id}/features don't match.\n /\\/projects\\/[^/]+\\/features(\\/[^/]+)?$/,\n];\n\nexport const isStorageTokenMutatingRequest = (request: Request): boolean => {\n if (request.method === 'GET') return false;\n const { pathname } = new URL(request.url);\n return STORAGE_TOKEN_MUTATING_PATTERNS.some((pattern) => pattern.test(pathname));\n};\n\nconst createProjectRefreshMiddleware =\n (\n shouldRefresh: (request: Request) => boolean,\n requestRefresh: () => Promise<void>,\n ): MiddlewareFn =>\n (next) =>\n async (request) => {\n const response = await next(request);\n // Await the re-verify before resolving the mutating request, so a caller that\n // reads `api.context.project` right after it can never observe pre-mutation state.\n if (shouldRefresh(request.request)) await requestRefresh();\n return response;\n };\n\nexport const createLiveProject = ({\n initialToken,\n verify,\n}: {\n initialToken: StorageToken;\n verify: () => Promise<StorageToken>;\n}) => {\n const store = createStore(createProject({ sapiToken: initialToken }));\n const refresh = coalesce(async () => store.set(createProject({ sapiToken: await verify() })));\n const middleware = createProjectRefreshMiddleware(isStorageTokenMutatingRequest, refresh);\n return { store, getProject: () => store.get(), subscribe: store.subscribe, middleware };\n};\n\nconst createLiveToken = ({ initialToken }: { initialToken: string }) => {\n const store = createStore(initialToken);\n const attachTokenMiddleware = createAttachTokenMiddleware(() => store.get());\n return { attachTokenMiddleware, set: store.set };\n};\n\nconst createClients = async ({\n baseUrl,\n token,\n assetsBaseUrl,\n statusBaseUrl,\n metastoreBaseUrl,\n clientServiceUrls,\n middlewares,\n}: ApiClientOptions) => {\n const middlewareFor = createMiddlewareFor(middlewares);\n const liveToken = createLiveToken({ initialToken: token.storageApi });\n\n const _storage = createStorageClient({\n baseUrl,\n token: token.storageApi,\n middlewares: [liveToken.attachTokenMiddleware],\n });\n\n const [stackInfo, sapiToken, devBranches] = await Promise.all([\n _storage.getStackInfo({ exclude: 'componentDetails' }),\n _storage.tokens.verify(),\n _storage.branches.getDevBranches(),\n ]);\n const stack = createStack({ stackInfo, clientServiceUrls });\n const defaultBranch = createDefaultBranch({ devBranches });\n\n const liveProject = createLiveProject({\n initialToken: sapiToken,\n verify: () => _storage.tokens.verify(),\n });\n\n const storageTableStore = createDerivedStore({\n source: liveProject.store,\n build: createStorageTable,\n dependsOn: (project) => ({\n useLegacyBucketPrefix: !project.hasFeature(ProjectFeature.DisableLegacyBucketPrefix),\n hasProtectedDefaultBranch: project.hasFeature(ProjectFeature.SoxProtectedDefaultBranch),\n hasStorageBranches: project.hasFeature(ProjectFeature.StorageBranches),\n }),\n });\n\n const storage = createStorageClient({\n baseUrl,\n token: token.storageApi,\n middlewares: middlewareFor('storage', [liveProject.middleware]),\n onRefreshToken: liveToken.set,\n });\n\n const management = createManagementClient({\n baseUrl,\n token: token.managementApi,\n middlewares: middlewareFor('management', [liveProject.middleware]),\n });\n\n const { client, meta } = createServiceClientRegistry<ServiceId, ServiceClientName>()({\n getServiceBaseUrl: (serviceId) => stack.getServiceUrl(serviceId),\n onUnavailable: ({ serviceId, path, clientName }) => {\n throw new ServiceUnavailableError(serviceId, path, clientName);\n },\n })\n .add({\n serviceId: 'vault',\n clientName: 'vault',\n clientFn: (serviceBaseUrl) =>\n createVaultClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('vault', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'data-science',\n clientName: 'dataScience',\n clientFn: (serviceBaseUrl) =>\n createDataScienceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('dataScience', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'encryption',\n clientName: 'encryption',\n clientFn: (serviceBaseUrl) =>\n createEncryptionClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('encryption'),\n }),\n })\n .add({\n serviceId: 'editor',\n clientName: 'editor',\n clientFn: (serviceBaseUrl) =>\n createEditorClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('editor', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'sync-actions',\n clientName: 'syncActions',\n clientFn: (serviceBaseUrl) =>\n createSyncActionsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('syncActions', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'telemetry',\n clientName: 'telemetry',\n clientFn: (serviceBaseUrl) =>\n createTelemetryClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('telemetry', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'query',\n clientName: 'queryService',\n clientFn: (serviceBaseUrl) =>\n createQueryServiceClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queryService', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'queue',\n clientName: 'queue',\n clientFn: (serviceBaseUrl) =>\n createQueueClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('queue', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'kai-assistant',\n clientName: 'chat',\n clientFn: (serviceBaseUrl) =>\n createChatClient({\n storageApiUrl: baseUrl,\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('chat', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'ai',\n clientName: 'ai',\n clientFn: (serviceBaseUrl) =>\n createAiClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('ai', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'import',\n clientName: 'import',\n clientFn: (serviceBaseUrl) =>\n createImportClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('import', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'kai-agent',\n clientName: 'kaiAgent',\n clientFn: (serviceBaseUrl) =>\n createKaiAgentClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('kaiAgent', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'oauth',\n clientName: 'oauth',\n clientFn: (serviceBaseUrl) =>\n createOauthClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('oauth', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'scheduler',\n clientName: 'scheduler',\n clientFn: (serviceBaseUrl) =>\n createSchedulerClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('scheduler', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'stream',\n clientName: 'stream',\n clientFn: (serviceBaseUrl) =>\n createStreamClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('stream', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .add({\n serviceId: 'notification',\n clientName: 'notifications',\n clientFn: (serviceBaseUrl) =>\n createNotificationsClient({\n baseUrl: serviceBaseUrl,\n middlewares: middlewareFor('notifications', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n }),\n })\n .build();\n\n const metastore = createMetastoreClient({\n baseUrl: metastoreBaseUrl,\n middlewares: middlewareFor('metastore', [liveToken.attachTokenMiddleware]),\n token: token.storageApi,\n });\n\n const assets = createAssetsClient({\n baseUrl: assetsBaseUrl,\n middlewares: middlewareFor('assets'),\n });\n\n const status = createStatusClient({\n baseUrl: statusBaseUrl,\n middlewares: middlewareFor('status'),\n });\n\n const tag = createTagSdk({\n metastoreClient: metastore,\n });\n\n const storageSdk = createStorageSdk({\n storageClient: storage,\n });\n\n const vault = createVaultSdk({\n vaultClient: client.vault,\n encryptionClient: client.encryption,\n });\n\n const variables = createVariablesSdk({\n storageClient: storage,\n });\n\n // Session/environment context the client is bound to, grouped so it stays distinct from the\n // operation clients below. `project` is a getter so each read reflects the live re-verified state.\n const context = {\n stack,\n defaultBranch,\n get project() {\n return liveProject.getProject();\n },\n get st() {\n return storageTableStore.get();\n },\n serviceMeta: meta,\n };\n\n const configuration = createConfigurationSdk({\n storageClient: storage,\n encryptionClient: client.encryption,\n context,\n });\n\n return {\n context,\n\n // clients\n storage,\n assets,\n status,\n management,\n ...client,\n\n sdk: {\n configuration,\n tag,\n storage: storageSdk,\n vault,\n variables,\n },\n };\n};\n\ntype Clients = Awaited<ReturnType<typeof createClients>>;\nexport type ClientContext = Clients['context'];\nexport type ApiClient = {\n init: (options: ApiClientOptions) => Promise<void>;\n} & Clients;\n\nexport const createApiClient = (): ApiClient => {\n let clients: Clients | null = null;\n\n const init = async (options: ApiClientOptions) => {\n if (clients) throw new Error('API is already initialized.');\n\n clients = await createClients(options);\n };\n\n const result = { init } as {\n init: typeof init;\n } & Clients;\n\n const handler: ProxyHandler<typeof result> = {\n get(_, property) {\n // Don't intercept Symbol properties or special methods\n if (isBuiltInProperty(property)) return undefined;\n\n if (property === 'init') return init;\n assert(clients, `API is not initialized. Call init() before accessing ${String(property)}`);\n return clients[property as keyof Clients];\n },\n };\n\n return new Proxy(result, handler);\n};\n","import { ApiError } from '../errors';\nimport { type HttpMethod, isApiError, type MiddlewareFn } from '../fetchClient';\nimport { KeboolaHttpHeader } from '../internal';\nimport { generateUUID } from '../utils';\n\nconst CORRELATION_ID_HEADER = 'X-Correlation-ID';\n\nconst ALWAYS_REDACTED_HEADERS = [\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n 'authorization',\n 'cookie',\n 'set-cookie',\n];\n\nconst ALWAYS_REDACTED_QUERY_PARAMS = new Set([\n 'token',\n 'apikey',\n 'api_key',\n 'access_token',\n 'refresh_token',\n 'code',\n 'state',\n 'signature',\n 'sig',\n 'x-amz-signature',\n 'x-amz-credential',\n 'x-amz-security-token',\n 'password',\n 'secret',\n]);\n\nconst REDACTED = '[REDACTED]';\n\nconst getRedactedUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n if (url.username) url.username = REDACTED;\n if (url.password) url.password = REDACTED;\n\n url.searchParams.forEach((_value, key) => {\n if (ALWAYS_REDACTED_QUERY_PARAMS.has(key.toLowerCase())) {\n url.searchParams.set(key, REDACTED);\n }\n });\n return url.toString();\n};\n\n// Returns the request's correlation ID, generating and attaching one if missing.\n//\n// Forwarded via the X-Correlation-ID header so downstream services log the same ID,\n// letting all log lines for a single user action be stitched together across service\n// boundaries. Reuse when the caller already set one (preserves the chain inside a\n// larger trace); otherwise mint a fresh UUID to start a new trace.\nconst ensureCorrelationId = (request: Request): string => {\n const correlationId = request.headers.get(CORRELATION_ID_HEADER) ?? generateUUID();\n request.headers.set(CORRELATION_ID_HEADER, correlationId);\n return correlationId;\n};\n\nconst getRedactedHeaders = (headers: Headers, redacted: string[]): Record<string, string> => {\n const redactedSet = new Set(\n [...ALWAYS_REDACTED_HEADERS, ...redacted].map((h) => h.toLowerCase()),\n );\n\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport type RequestLog = {\n url: string;\n headers: Record<string, string>;\n};\n\nexport type ResponseLog = {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n};\n\ntype BaseLog = {\n correlationId: string;\n method: HttpMethod;\n durationMs: number;\n request: RequestLog;\n};\n\ntype SuccessLog = BaseLog & {\n response: ResponseLog;\n};\n\ntype ErrorLog = BaseLog & {\n error: Error;\n};\n\nexport type Log = SuccessLog | ErrorLog;\n\nexport type Logger = {\n info?: (log: SuccessLog) => void;\n error?: (log: ErrorLog) => void;\n};\n\nexport type LogLevel = 'error-only' | 'all';\n\nexport type LoggingOptions = {\n logger?: Logger;\n level?: LogLevel;\n redactHeaders?: string[];\n};\n\nconst getRequestLog = (request: Request, redactedHeaders: string[]): RequestLog => ({\n url: getRedactedUrl(request.url),\n headers: getRedactedHeaders(request.headers, redactedHeaders),\n});\n\nconst getResponseLog = (response: Response, redactedHeaders: string[]): ResponseLog => ({\n status: response.status,\n statusText: response.statusText,\n headers: getRedactedHeaders(response.headers, redactedHeaders),\n});\n\n// On failure the logger receives the thrown error itself, but an ApiError carries the raw\n// fetch Request/Response whose headers were never redacted (only the middleware's own log\n// payload is). Hand the logger a copy with the same redaction applied to its headers and URL;\n// the original error is still thrown untouched so error handlers keep full fidelity.\nconst redactApiError = (error: ApiError, redactedHeaders: string[]): ApiError =>\n new ApiError({\n request: new Request(getRedactedUrl(error.request.url), {\n method: error.request.method,\n headers: getRedactedHeaders(error.request.headers, redactedHeaders),\n }),\n response: new Response(null, {\n status: error.response.status,\n statusText: error.response.statusText,\n headers: getRedactedHeaders(error.response.headers, redactedHeaders),\n }),\n data: error.data,\n });\n\nconst formatLog = (level: 'info' | 'error', log: Log): string => {\n const parts = [`[${level.toUpperCase()}]`, `${Math.round(log.durationMs)}ms`, log.method];\n parts.push(log.request.url);\n if ('response' in log) parts.push(String(log.response.status));\n return parts.join(' ');\n};\n\nconst createSafeLogger = (logger?: Logger, level: LogLevel = 'error-only'): Required<Logger> => {\n return {\n info: (log) => {\n if (level !== 'all') return;\n try {\n if (logger?.info) {\n logger.info(log);\n return;\n }\n\n console.info(formatLog('info', log));\n } catch {\n /* never let logging break the request */\n }\n },\n error: (log) => {\n try {\n if (logger?.error) {\n logger.error(log);\n return;\n }\n\n console.error(formatLog('error', log));\n } catch {\n /* never let logging break the request */\n }\n },\n };\n};\n\nexport const createLoggingMiddleware = (options: LoggingOptions = {}): MiddlewareFn => {\n const safeLogger = createSafeLogger(options.logger, options.level);\n const redactHeaders = options.redactHeaders ?? [];\n\n return (next) => async (fetchRequest) => {\n const correlationId = ensureCorrelationId(fetchRequest.request);\n const start = performance.now();\n const method = fetchRequest.request.method.toLowerCase() as HttpMethod;\n const requestLog = getRequestLog(fetchRequest.request, redactHeaders);\n\n try {\n const result = await next(fetchRequest);\n safeLogger.info({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n response: getResponseLog(result.response, redactHeaders),\n });\n return result;\n } catch (error) {\n if (error instanceof Error)\n safeLogger.error({\n correlationId,\n method,\n durationMs: performance.now() - start,\n request: requestLog,\n error: isApiError(error) ? redactApiError(error, redactHeaders) : error,\n });\n\n throw error;\n }\n };\n};\n","import { ApiError } from '../errors';\nimport type { MiddlewareFn } from '../fetchClient';\nimport { HttpStatus } from '../internal';\nimport { delay } from '../utils/delay';\n\nconst DEFAULT_MAX_RETRIES = 5;\nconst DEFAULT_RETRYABLE_STATUSES: number[] = [\n HttpStatus.INTERNAL_SERVER_ERROR,\n HttpStatus.BAD_GATEWAY,\n HttpStatus.SERVICE_UNAVAILABLE,\n HttpStatus.GATEWAY_TIMEOUT,\n];\nconst DEFAULT_BACKOFF_FACTOR = 0.3;\n\nexport type RetryOptions = {\n maxRetries?: number;\n backoffFactor?: number;\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n};\n\nconst defaultShouldRetry = (error: unknown): boolean =>\n error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);\n\nexport const createRetryMiddleware = (options?: RetryOptions): MiddlewareFn => {\n const {\n maxRetries = DEFAULT_MAX_RETRIES,\n backoffFactor = DEFAULT_BACKOFF_FACTOR,\n shouldRetry = defaultShouldRetry,\n } = options ?? {};\n\n if (!Number.isInteger(maxRetries) || maxRetries < 0) {\n throw new RangeError('maxRetries must be a non-negative integer');\n }\n if (!Number.isFinite(backoffFactor) || backoffFactor < 0) {\n throw new RangeError('backoffFactor must be a finite non-negative number');\n }\n\n return (next) => async (request) => {\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await next({ ...request, request: request.request.clone() });\n } catch (error) {\n if (attempt === maxRetries || !shouldRetry(error, attempt)) {\n throw error;\n }\n\n const delayMs = backoffFactor * 1000 * Math.pow(2, attempt);\n await delay(delayMs, request.request.signal ?? undefined);\n }\n }\n\n throw new Error('unreachable');\n };\n};\n","import { createVerifyClient } from './clients/verify';\n\nexport const createDevApiClient = () => ({\n verify: createVerifyClient(),\n});\n"]}
|