@keboola/api-client 1.0.0 → 2.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.
Files changed (221) hide show
  1. package/dist/ai/index.cjs +5 -201
  2. package/dist/ai/index.cjs.map +1 -1
  3. package/dist/ai/index.js +2 -201
  4. package/dist/ai/index.js.map +1 -1
  5. package/dist/assets/index.cjs +5 -180
  6. package/dist/assets/index.cjs.map +1 -1
  7. package/dist/assets/index.js +2 -180
  8. package/dist/assets/index.js.map +1 -1
  9. package/dist/chat/index.cjs +6 -422
  10. package/dist/chat/index.cjs.map +1 -1
  11. package/dist/chat/index.d.cts +1 -1
  12. package/dist/chat/index.d.ts +1 -1
  13. package/dist/chat/index.js +3 -422
  14. package/dist/chat/index.js.map +1 -1
  15. package/dist/chat/suggestions.cjs +70 -152
  16. package/dist/chat/suggestions.cjs.map +1 -1
  17. package/dist/chat/suggestions.js +1 -138
  18. package/dist/chat/suggestions.js.map +1 -1
  19. package/dist/chat/types.d.cts +1 -1
  20. package/dist/chat/types.d.ts +1 -1
  21. package/dist/chunk-345V46LR.cjs +934 -0
  22. package/dist/chunk-345V46LR.cjs.map +1 -0
  23. package/dist/chunk-3B7L6MCG.js +189 -0
  24. package/dist/chunk-3B7L6MCG.js.map +1 -0
  25. package/dist/chunk-3T54WH4X.cjs +42 -0
  26. package/dist/chunk-3T54WH4X.cjs.map +1 -0
  27. package/dist/chunk-3Y6NK7TC.js +34 -0
  28. package/dist/chunk-3Y6NK7TC.js.map +1 -0
  29. package/dist/chunk-4N7XBMWP.js +930 -0
  30. package/dist/chunk-4N7XBMWP.js.map +1 -0
  31. package/dist/chunk-4RC5E3SL.js +140 -0
  32. package/dist/chunk-4RC5E3SL.js.map +1 -0
  33. package/dist/chunk-633QJMHH.cjs +73 -0
  34. package/dist/chunk-633QJMHH.cjs.map +1 -0
  35. package/dist/chunk-6RQDX6JY.cjs +132 -0
  36. package/dist/chunk-6RQDX6JY.cjs.map +1 -0
  37. package/dist/chunk-76AHKXLC.cjs +29 -0
  38. package/dist/chunk-76AHKXLC.cjs.map +1 -0
  39. package/dist/chunk-7FY6COWG.js +71 -0
  40. package/dist/chunk-7FY6COWG.js.map +1 -0
  41. package/dist/chunk-7J2R6XHB.js +3 -0
  42. package/dist/chunk-7J2R6XHB.js.map +1 -0
  43. package/dist/chunk-BGLICNTG.cjs +33 -0
  44. package/dist/chunk-BGLICNTG.cjs.map +1 -0
  45. package/dist/chunk-BR3SBEFE.cjs +182 -0
  46. package/dist/chunk-BR3SBEFE.cjs.map +1 -0
  47. package/dist/chunk-CVV4HROS.cjs +37 -0
  48. package/dist/chunk-CVV4HROS.cjs.map +1 -0
  49. package/dist/chunk-DCTDH77P.cjs +277 -0
  50. package/dist/chunk-DCTDH77P.cjs.map +1 -0
  51. package/dist/chunk-EBCZUGUX.js +35 -0
  52. package/dist/chunk-EBCZUGUX.js.map +1 -0
  53. package/dist/chunk-EY5LALX2.cjs +26 -0
  54. package/dist/chunk-EY5LALX2.cjs.map +1 -0
  55. package/dist/chunk-FBQHHAL5.js +40 -0
  56. package/dist/chunk-FBQHHAL5.js.map +1 -0
  57. package/dist/chunk-GF4XZK5N.cjs +43 -0
  58. package/dist/chunk-GF4XZK5N.cjs.map +1 -0
  59. package/dist/chunk-GNPQB3MT.js +27 -0
  60. package/dist/chunk-GNPQB3MT.js.map +1 -0
  61. package/dist/chunk-GO6SOMGL.js +181 -0
  62. package/dist/chunk-GO6SOMGL.js.map +1 -0
  63. package/dist/chunk-HCNNMUTR.cjs +36 -0
  64. package/dist/chunk-HCNNMUTR.cjs.map +1 -0
  65. package/dist/chunk-HPVTVQBJ.cjs +238 -0
  66. package/dist/chunk-HPVTVQBJ.cjs.map +1 -0
  67. package/dist/chunk-HYUGRMCY.cjs +247 -0
  68. package/dist/chunk-HYUGRMCY.cjs.map +1 -0
  69. package/dist/chunk-IJMQCOBC.js +34 -0
  70. package/dist/chunk-IJMQCOBC.js.map +1 -0
  71. package/dist/chunk-IY3VNVXD.cjs +183 -0
  72. package/dist/chunk-IY3VNVXD.cjs.map +1 -0
  73. package/dist/chunk-JKFIB6SQ.cjs +685 -0
  74. package/dist/chunk-JKFIB6SQ.cjs.map +1 -0
  75. package/dist/chunk-JLNOESHX.cjs +47 -0
  76. package/dist/chunk-JLNOESHX.cjs.map +1 -0
  77. package/dist/chunk-JURD5MC3.js +178 -0
  78. package/dist/chunk-JURD5MC3.js.map +1 -0
  79. package/dist/chunk-LV3ZWNDC.js +75 -0
  80. package/dist/chunk-LV3ZWNDC.js.map +1 -0
  81. package/dist/chunk-LZ6A6J2E.cjs +77 -0
  82. package/dist/chunk-LZ6A6J2E.cjs.map +1 -0
  83. package/dist/chunk-OKVYLO6C.js +108 -0
  84. package/dist/chunk-OKVYLO6C.js.map +1 -0
  85. package/dist/chunk-PD3LJYS2.js +218 -0
  86. package/dist/chunk-PD3LJYS2.js.map +1 -0
  87. package/dist/chunk-PV4HIVW2.js +130 -0
  88. package/dist/chunk-PV4HIVW2.js.map +1 -0
  89. package/dist/chunk-R7PD3BRA.js +261 -0
  90. package/dist/chunk-R7PD3BRA.js.map +1 -0
  91. package/dist/chunk-SAEG42HW.js +64 -0
  92. package/dist/chunk-SAEG42HW.js.map +1 -0
  93. package/dist/chunk-TIIRBQUA.cjs +110 -0
  94. package/dist/chunk-TIIRBQUA.cjs.map +1 -0
  95. package/dist/chunk-TXFQ4YIK.js +31 -0
  96. package/dist/chunk-TXFQ4YIK.js.map +1 -0
  97. package/dist/chunk-U5SE6W5M.cjs +158 -0
  98. package/dist/chunk-U5SE6W5M.cjs.map +1 -0
  99. package/dist/chunk-UABYNGBZ.js +39 -0
  100. package/dist/chunk-UABYNGBZ.js.map +1 -0
  101. package/dist/chunk-UXF53ZOV.js +220 -0
  102. package/dist/chunk-UXF53ZOV.js.map +1 -0
  103. package/dist/chunk-VAOCYA6B.js +20 -0
  104. package/dist/chunk-VAOCYA6B.js.map +1 -0
  105. package/dist/chunk-VS5PM7KL.js +45 -0
  106. package/dist/chunk-VS5PM7KL.js.map +1 -0
  107. package/dist/chunk-WQ7EZWBF.js +24 -0
  108. package/dist/chunk-WQ7EZWBF.js.map +1 -0
  109. package/dist/chunk-XPDEQND7.cjs +4 -0
  110. package/dist/chunk-XPDEQND7.cjs.map +1 -0
  111. package/dist/chunk-XUDMML5C.cjs +211 -0
  112. package/dist/chunk-XUDMML5C.cjs.map +1 -0
  113. package/dist/chunk-YPCD7M2N.cjs +22 -0
  114. package/dist/chunk-YPCD7M2N.cjs.map +1 -0
  115. package/dist/chunk-YUEYMIMI.cjs +67 -0
  116. package/dist/chunk-YUEYMIMI.cjs.map +1 -0
  117. package/dist/chunk-YXCVNX2Q.cjs +36 -0
  118. package/dist/chunk-YXCVNX2Q.cjs.map +1 -0
  119. package/dist/chunk-ZEMKE6DI.js +681 -0
  120. package/dist/chunk-ZEMKE6DI.js.map +1 -0
  121. package/dist/dataScience/index.cjs +8 -412
  122. package/dist/dataScience/index.cjs.map +1 -1
  123. package/dist/dataScience/index.js +2 -391
  124. package/dist/dataScience/index.js.map +1 -1
  125. package/dist/domain/permissions/index.cjs +131 -2
  126. package/dist/domain/permissions/index.cjs.map +1 -1
  127. package/dist/domain/permissions/index.d.cts +108 -2
  128. package/dist/domain/permissions/index.d.ts +108 -2
  129. package/dist/domain/permissions/index.js +106 -3
  130. package/dist/domain/permissions/index.js.map +1 -1
  131. package/dist/editor/index.cjs +5 -264
  132. package/dist/editor/index.cjs.map +1 -1
  133. package/dist/editor/index.js +2 -264
  134. package/dist/editor/index.js.map +1 -1
  135. package/dist/encryption/index.cjs +5 -190
  136. package/dist/encryption/index.cjs.map +1 -1
  137. package/dist/encryption/index.js +2 -190
  138. package/dist/encryption/index.js.map +1 -1
  139. package/dist/import/index.cjs +5 -196
  140. package/dist/import/index.cjs.map +1 -1
  141. package/dist/import/index.js +2 -196
  142. package/dist/import/index.js.map +1 -1
  143. package/dist/index.cjs +314 -3569
  144. package/dist/index.cjs.map +1 -1
  145. package/dist/index.d.cts +2004 -105
  146. package/dist/index.d.ts +2004 -105
  147. package/dist/index.js +176 -3464
  148. package/dist/index.js.map +1 -1
  149. package/dist/management/index.cjs +10 -881
  150. package/dist/management/index.cjs.map +1 -1
  151. package/dist/management/index.js +3 -880
  152. package/dist/management/index.js.map +1 -1
  153. package/dist/metastore/index.cjs +5 -337
  154. package/dist/metastore/index.cjs.map +1 -1
  155. package/dist/metastore/index.js +2 -337
  156. package/dist/metastore/index.js.map +1 -1
  157. package/dist/oauth/index.cjs +5 -226
  158. package/dist/oauth/index.cjs.map +1 -1
  159. package/dist/oauth/index.js +2 -226
  160. package/dist/oauth/index.js.map +1 -1
  161. package/dist/project-Bzslbq4u.d.ts +16 -0
  162. package/dist/project-CYhB6rYN.d.cts +16 -0
  163. package/dist/queryService/index.cjs +5 -248
  164. package/dist/queryService/index.cjs.map +1 -1
  165. package/dist/queryService/index.js +2 -248
  166. package/dist/queryService/index.js.map +1 -1
  167. package/dist/queue/index.cjs +5 -190
  168. package/dist/queue/index.cjs.map +1 -1
  169. package/dist/queue/index.js +2 -190
  170. package/dist/queue/index.js.map +1 -1
  171. package/dist/sdk/configurations/index.d.cts +2 -12
  172. package/dist/sdk/configurations/index.d.ts +2 -12
  173. package/dist/sdk/storage/index.cjs +49 -248
  174. package/dist/sdk/storage/index.cjs.map +1 -1
  175. package/dist/sdk/storage/index.d.cts +2 -2
  176. package/dist/sdk/storage/index.d.ts +2 -2
  177. package/dist/sdk/storage/index.js +1 -240
  178. package/dist/sdk/storage/index.js.map +1 -1
  179. package/dist/sdk/tag/index.cjs +6 -203
  180. package/dist/sdk/tag/index.cjs.map +1 -1
  181. package/dist/sdk/tag/index.js +2 -206
  182. package/dist/sdk/tag/index.js.map +1 -1
  183. package/dist/status/index.cjs +6 -176
  184. package/dist/status/index.cjs.map +1 -1
  185. package/dist/status/index.js +3 -176
  186. package/dist/status/index.js.map +1 -1
  187. package/dist/status/types.cjs +2 -0
  188. package/dist/status/types.js +1 -1
  189. package/dist/storage/index.cjs +9 -1023
  190. package/dist/storage/index.cjs.map +1 -1
  191. package/dist/storage/index.d.cts +1 -1
  192. package/dist/storage/index.d.ts +1 -1
  193. package/dist/storage/index.js +3 -1023
  194. package/dist/storage/index.js.map +1 -1
  195. package/dist/storage/types.d.cts +68 -5
  196. package/dist/storage/types.d.ts +68 -5
  197. package/dist/{storageClient-C8LDO4gr.d.ts → storageClient-BicsbzZy.d.ts} +7 -1
  198. package/dist/{storageClient-D05fdGHW.d.cts → storageClient-CmK1LPHr.d.cts} +7 -1
  199. package/dist/storageSdk-BZ7ZW6_h.d.cts +143 -0
  200. package/dist/storageSdk-DCcD68FQ.d.ts +143 -0
  201. package/dist/syncActions/index.cjs +5 -364
  202. package/dist/syncActions/index.cjs.map +1 -1
  203. package/dist/syncActions/index.js +2 -345
  204. package/dist/syncActions/index.js.map +1 -1
  205. package/dist/telemetry/index.cjs +5 -187
  206. package/dist/telemetry/index.cjs.map +1 -1
  207. package/dist/telemetry/index.js +2 -187
  208. package/dist/telemetry/index.js.map +1 -1
  209. package/dist/{types-DJ6nbNq5.d.cts → types-CNkgmuhe.d.cts} +1 -1
  210. package/dist/{types-BjrNNn5I.d.ts → types-DzwzVgyG.d.ts} +1 -1
  211. package/dist/vault/index.cjs +5 -219
  212. package/dist/vault/index.cjs.map +1 -1
  213. package/dist/vault/index.js +2 -219
  214. package/dist/vault/index.js.map +1 -1
  215. package/dist/verify/index.cjs +5 -184
  216. package/dist/verify/index.cjs.map +1 -1
  217. package/dist/verify/index.js +2 -184
  218. package/dist/verify/index.js.map +1 -1
  219. package/package.json +1 -1
  220. package/dist/storageSdk-CX03lGn-.d.ts +0 -18
  221. package/dist/storageSdk-DZV4nB3o.d.cts +0 -18
package/dist/index.js CHANGED
@@ -1,39 +1,36 @@
1
- import qs from 'qs';
2
- import * as z5 from 'zod';
1
+ import { createProject } from './chunk-UABYNGBZ.js';
2
+ import { generateUUID, createTagSdk } from './chunk-JURD5MC3.js';
3
+ export { generateUUID, keboolaUID } from './chunk-JURD5MC3.js';
4
+ import { delay, createStorageSdk } from './chunk-R7PD3BRA.js';
5
+ export { PollException, createStorageSdk, delay, poll } from './chunk-R7PD3BRA.js';
6
+ import { createTelemetryClient } from './chunk-TXFQ4YIK.js';
7
+ import { createVaultClient } from './chunk-SAEG42HW.js';
8
+ export { UserError } from './chunk-SAEG42HW.js';
9
+ import { createManagementClient } from './chunk-ZEMKE6DI.js';
10
+ export { ManagementClientAuthError, isManagementClientAuthError } from './chunk-ZEMKE6DI.js';
11
+ import { createVerifyClient } from './chunk-GNPQB3MT.js';
12
+ import { createMetastoreClient } from './chunk-GO6SOMGL.js';
13
+ import { createOauthClient } from './chunk-7FY6COWG.js';
14
+ import { createQueryServiceClient } from './chunk-LV3ZWNDC.js';
15
+ import { createQueueClient } from './chunk-3Y6NK7TC.js';
16
+ import { createStatusClient } from './chunk-VAOCYA6B.js';
17
+ import './chunk-7J2R6XHB.js';
18
+ import { createStorageTokenMiddleware, createStorageClient } from './chunk-4N7XBMWP.js';
19
+ export { series } from './chunk-4N7XBMWP.js';
20
+ export { concurrent } from './chunk-EBCZUGUX.js';
21
+ import { createSyncActionsClient } from './chunk-3B7L6MCG.js';
22
+ import { createAiClient } from './chunk-VS5PM7KL.js';
23
+ import { createAssetsClient } from './chunk-WQ7EZWBF.js';
24
+ import { createChatClient } from './chunk-PV4HIVW2.js';
25
+ import { suggestionsApiResponseSchema } from './chunk-4RC5E3SL.js';
26
+ import { createDataScienceClient } from './chunk-UXF53ZOV.js';
27
+ export { parseLogLines } from './chunk-UXF53ZOV.js';
28
+ import { createEditorClient } from './chunk-OKVYLO6C.js';
29
+ import { createEncryptionClient } from './chunk-IJMQCOBC.js';
30
+ import { createImportClient } from './chunk-FBQHHAL5.js';
31
+ import { KeboolaHttpHeader, HttpStatus, ApiError, createCallbackMiddleware, normalizeBaseUrl, createOpenapiFetchClient, createGenericFetchClient } from './chunk-PD3LJYS2.js';
32
+ export { ApiError, HttpContentType, HttpHeader, KeboolaHttpHeader, createGenericFetchClient, isAbortError, isApiError, isFetchClientError, normalizeBaseUrl } from './chunk-PD3LJYS2.js';
3
33
  import { z } from 'zod';
4
- import dayjs from 'dayjs';
5
- import utc from 'dayjs/plugin/utc';
6
-
7
- // src/errors/UserError.ts
8
- var UserError = class extends Error {
9
- constructor(message2) {
10
- super(message2);
11
- }
12
- };
13
-
14
- // src/errors/ApiError.ts
15
- var ApiError = class extends Error {
16
- response;
17
- request;
18
- data;
19
- constructor({ response, request, data }) {
20
- super(response.statusText);
21
- this.response = response;
22
- this.request = request;
23
- this.data = data;
24
- }
25
- };
26
-
27
- // src/errors/ManagementClientAuthError.ts
28
- var ManagementClientAuthError = class extends ApiError {
29
- title;
30
- message;
31
- constructor(title, message2, res) {
32
- super(res);
33
- this.title = title;
34
- this.message = message2;
35
- }
36
- };
37
34
 
38
35
  // src/errors/ServiceUnavailableError.ts
39
36
  var ServiceUnavailableError = class _ServiceUnavailableError extends Error {
@@ -45,399 +42,6 @@ var ServiceUnavailableError = class _ServiceUnavailableError extends Error {
45
42
  Object.setPrototypeOf(this, _ServiceUnavailableError.prototype);
46
43
  }
47
44
  };
48
-
49
- // src/constants.ts
50
- var KeboolaHttpHeader = {
51
- STORAGE_API_TOKEN: "X-StorageApi-Token",
52
- MANAGEMENT_API_TOKEN: "X-Kbc-Manageapitoken",
53
- STORAGE_API_URL: "x-storageapi-url"
54
- };
55
- var HttpStatus = {
56
- NO_CONTENT: 204,
57
- BAD_REQUEST: 400,
58
- UNPROCESSABLE_ENTITY: 422,
59
- INTERNAL_SERVER_ERROR: 500,
60
- BAD_GATEWAY: 502,
61
- SERVICE_UNAVAILABLE: 503,
62
- GATEWAY_TIMEOUT: 504
63
- };
64
- var ENCRYPTED_VALUE_PREFIX = "KBC::";
65
-
66
- // src/fetchClient/createFetchClient/utils.ts
67
- var HttpHeader = {
68
- CONTENT_TYPE: "content-type",
69
- CONTENT_DISPOSITION: "content-disposition"
70
- };
71
- var HttpContentType = {
72
- JSON: "application/json",
73
- TEXT_PLAIN: "text/plain",
74
- FORM_DATA: "multipart/form-data",
75
- TEXT_HTML: "text/html"
76
- };
77
- var defaultValidateStatus = ({ response }) => response.status >= 200 && response.status <= 299;
78
- function removeUndefined(obj) {
79
- const objCopy = { ...obj };
80
- for (const [key, value] of Object.entries(objCopy)) {
81
- if (value == null) delete objCopy[key];
82
- }
83
- return objCopy;
84
- }
85
- var parseData = async (response) => {
86
- if (response.status === HttpStatus.NO_CONTENT) return null;
87
- const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
88
- if (contentType && contentType == HttpContentType.JSON) {
89
- return response.json();
90
- }
91
- const text = await response.text();
92
- try {
93
- return JSON.parse(text);
94
- } catch {
95
- return text;
96
- }
97
- };
98
- var cleanHeadersInit = (headersInit) => {
99
- if (Array.isArray(headersInit)) return headersInit;
100
- if (headersInit instanceof Headers) return headersInit;
101
- if (headersInit == null) return headersInit;
102
- return removeUndefined(headersInit);
103
- };
104
- var createHeaders = (headersInitA, headersInitB) => {
105
- const headersA = new Headers(cleanHeadersInit(headersInitA));
106
- const headersB = new Headers(cleanHeadersInit(headersInitB));
107
- headersB.forEach((value, key) => {
108
- headersA.set(key, value);
109
- });
110
- return headersA;
111
- };
112
- var createPath = (path, pathParam = {}) => path.replace(/\{([^}]+)}/g, (_, key) => {
113
- if (!(key in pathParam))
114
- throw new Error(`Path parameter "${key}" is missing in the path "${path}"`);
115
- return encodeURIComponent(pathParam[key]);
116
- });
117
- var createSearch = (query, options = {}) => {
118
- return qs.stringify(query, {
119
- encodeValuesOnly: true,
120
- skipNulls: true,
121
- ...options
122
- });
123
- };
124
- var createBody = (body, headers) => {
125
- if (body == null) return null;
126
- if (body instanceof FormData) return body;
127
- if (typeof body === "string") return body;
128
- const stringifyBody = JSON.stringify(body);
129
- const stringBody = stringifyBody === "{}" ? null : stringifyBody;
130
- if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);
131
- return stringBody;
132
- };
133
- var parseContentDispositionHeader = (contentDisposition) => {
134
- const type = (() => {
135
- const typeMatch = contentDisposition?.match(/^\s*(inline|attachment)\s*;/i);
136
- return typeMatch?.[1]?.toLowerCase() ?? "unknown";
137
- })();
138
- const filename = (() => {
139
- const filenameMatch = contentDisposition?.match(/filename="([^"]+)"/i);
140
- if (filenameMatch) return filenameMatch[1];
141
- const encodedFilenameMatch = contentDisposition?.match(/filename\*=(?:UTF-8'')?([^;]+)/i);
142
- if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);
143
- const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);
144
- return unquotedFilenameMatch?.[1] ?? null;
145
- })();
146
- return { type, filename };
147
- };
148
- var createFetchRequest = ({
149
- url,
150
- method,
151
- params,
152
- options = {},
153
- defaultOptions
154
- }) => {
155
- const {
156
- baseUrl,
157
- validateStatus: defValidateStatus = defaultValidateStatus,
158
- headers: defaultHeaders,
159
- ...restDefaultOptions
160
- } = defaultOptions;
161
- const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;
162
- const headers = createHeaders(defaultHeaders, endpointHeaders);
163
- const path = createPath(url, params.path);
164
- const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });
165
- const body = createBody(params.body, headers);
166
- const urlInstance = new URL(baseUrl + path);
167
- urlInstance.search = search;
168
- const request = new Request(urlInstance, {
169
- ...restDefaultOptions,
170
- ...restOptions,
171
- headers,
172
- method: method.toUpperCase(),
173
- body
174
- });
175
- return { request, validateStatus: validateStatus ?? defValidateStatus };
176
- };
177
-
178
- // src/fetchClient/createFetchClient/createFetchClient.ts
179
- var isApiError = (error) => error instanceof ApiError;
180
- var isAbortError = (error) => error instanceof DOMException && error.name === "AbortError";
181
- var isFetchClientError = (error) => error instanceof TypeError || error instanceof SyntaxError || isApiError(error);
182
- var createCoreFetch = (fetchFn) => async ({ request, validateStatus }) => {
183
- const response = await fetchFn(request);
184
- const data = await parseData(response);
185
- const apiResponse = {
186
- request,
187
- response,
188
- data
189
- };
190
- const boolOrError = validateStatus(apiResponse);
191
- if (isApiError(boolOrError)) throw boolOrError;
192
- if (!boolOrError) throw new ApiError(apiResponse);
193
- return apiResponse;
194
- };
195
- var createFetchClient = ({
196
- middlewares = [],
197
- ...defaultOptions
198
- }) => {
199
- const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);
200
- const fetchWithMiddlewares = middlewares.reduceRight(
201
- (next, middleware) => middleware(next),
202
- coreFetch
203
- );
204
- const createFetchMethod = (method) => async (url, params, options = {}) => {
205
- const request = createFetchRequest({
206
- url,
207
- method,
208
- params,
209
- defaultOptions,
210
- options
211
- });
212
- const methodMiddlewares = options?.middlewares ?? [];
213
- return methodMiddlewares.reduceRight(
214
- (next, middleware) => middleware(next),
215
- fetchWithMiddlewares
216
- )(request);
217
- };
218
- return {
219
- get: createFetchMethod("get"),
220
- post: createFetchMethod("post"),
221
- put: createFetchMethod("put"),
222
- patch: createFetchMethod("patch"),
223
- delete: createFetchMethod("delete")
224
- };
225
- };
226
-
227
- // src/fetchClient/createFetchClient/middlewares.ts
228
- var createCallbackMiddleware = ({ onError, onSettled, onSuccess } = {}) => (next) => async (request) => {
229
- let response;
230
- try {
231
- response = await next(request);
232
- onSuccess?.();
233
- } catch (error) {
234
- onError?.(error);
235
- throw error;
236
- } finally {
237
- onSettled?.();
238
- }
239
- return response;
240
- };
241
-
242
- // src/fetchClient/createGenericFetchClient.ts
243
- var createGenericFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
244
-
245
- // src/fetchClient/createOpenapiFetchClient.ts
246
- var createOpenapiFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
247
-
248
- // src/clients/ai/aiClient.ts
249
- var createAiClient = ({ baseUrl, middlewares }) => {
250
- const client = createOpenapiFetchClient({
251
- baseUrl,
252
- middlewares
253
- });
254
- const describeConfigurationVersion = async (body) => {
255
- const { data } = await client.post("/describe/configuration-version", { body });
256
- return data;
257
- };
258
- const describeConfigurationMerge = async (body) => {
259
- const { data } = await client.post("/describe/configuration-merge", { body });
260
- return data;
261
- };
262
- const explainError = async (body) => {
263
- const { data } = await client.post("/explain", { body });
264
- return data;
265
- };
266
- const describeConfiguration = async (body) => {
267
- const { data } = await client.post("/describe/configuration", { body });
268
- return data;
269
- };
270
- const suggestComponent = async (body) => {
271
- const { data } = await client.post("/suggest/component", { body });
272
- return data;
273
- };
274
- const feedback = async (body) => {
275
- const { data } = await client.post("/feedback", { body });
276
- return data;
277
- };
278
- return {
279
- describeConfigurationVersion,
280
- describeConfigurationMerge,
281
- explainError,
282
- describeConfiguration,
283
- suggestComponent,
284
- feedback
285
- };
286
- };
287
-
288
- // src/clients/assets/assetsClient.ts
289
- var createAssetsClient = ({ baseUrl, middlewares }) => {
290
- const client = createGenericFetchClient({
291
- baseUrl,
292
- middlewares
293
- });
294
- const getPublishedChangelogPosts = async (signal) => {
295
- const { data } = await client.get(
296
- "/platform-changelog/published-posts.json",
297
- {},
298
- { signal }
299
- );
300
- return data;
301
- };
302
- return {
303
- getPublishedChangelogPosts
304
- };
305
- };
306
- var SUGGESTION_CATEGORIES = ["error", "maintenance", "documentation"];
307
- var suggestionCategorySchema = z.enum(SUGGESTION_CATEGORIES);
308
- var suggestionSchema = z.object({
309
- label: z.preprocess((v) => typeof v === "string" ? v.slice(0, 80) : v, z.string().max(80)),
310
- prompt: z.string(),
311
- priority: z.number().int().min(1).max(3),
312
- category: suggestionCategorySchema,
313
- reasoning: z.string()
314
- });
315
- z.object({
316
- suggestions: z.array(suggestionSchema).max(4)
317
- });
318
- var suggestionWithIdSchema = suggestionSchema.extend({
319
- id: z.string()
320
- });
321
- var suggestionsApiResponseSchema = z.object({
322
- suggestions: z.array(suggestionWithIdSchema).max(4),
323
- suggestionSessionId: z.string()
324
- });
325
- var recentFailedJobSchema = z.object({
326
- id: z.string(),
327
- status: z.enum(["error", "warning"]),
328
- component: z.string(),
329
- configId: z.string(),
330
- configName: z.string().optional(),
331
- createdTime: z.string(),
332
- durationSeconds: z.number().int().nonnegative().optional(),
333
- errorMessage: z.string().max(200).optional()
334
- });
335
- var deprecatedComponentSchema = z.object({
336
- id: z.string(),
337
- name: z.string(),
338
- type: z.string(),
339
- expiredOn: z.string(),
340
- configCount: z.number().int().nonnegative()
341
- });
342
- var userRecentEditSchema = z.object({
343
- component: z.string(),
344
- configId: z.string(),
345
- configName: z.string(),
346
- lastEdited: z.string()
347
- });
348
- var dashboardContextDataSchema = z.object({
349
- recentFailedJobs: z.array(recentFailedJobSchema).max(5),
350
- deprecatedComponents: z.array(deprecatedComponentSchema).max(5),
351
- userRecentEdits: z.array(userRecentEditSchema).max(5),
352
- currentUserEmail: z.string().email()
353
- });
354
- var JOB_STATUSES = [
355
- "created",
356
- "waiting",
357
- "processing",
358
- "success",
359
- "error",
360
- "terminating",
361
- "terminated",
362
- "cancelled",
363
- "warning"
364
- ];
365
- var jobDetailContextDataSchema = z.object({
366
- job: z.object({
367
- id: z.string(),
368
- status: z.enum(JOB_STATUSES),
369
- component: z.string(),
370
- configId: z.string().optional(),
371
- configName: z.string().optional(),
372
- createdTime: z.string(),
373
- startTime: z.string().optional(),
374
- endTime: z.string().optional(),
375
- durationSeconds: z.number().int().nonnegative().optional(),
376
- errorMessage: z.string().max(500).optional(),
377
- errorType: z.enum(["user", "application"]).optional(),
378
- backendSize: z.string().optional()
379
- }),
380
- component: z.object({
381
- id: z.string(),
382
- name: z.string(),
383
- type: z.string()
384
- }).optional(),
385
- runtimeHistory: z.object({
386
- averageDurationSeconds: z.number().nonnegative().optional(),
387
- minDurationSeconds: z.number().nonnegative().optional(),
388
- maxDurationSeconds: z.number().nonnegative().optional(),
389
- recentJobsCount: z.number().int().nonnegative(),
390
- isSlowerThanAverage: z.boolean().optional(),
391
- isFasterThanAverage: z.boolean().optional(),
392
- percentageDifference: z.number().optional()
393
- }).optional(),
394
- currentUserEmail: z.string().email()
395
- });
396
- var configurationDetailContextDataSchema = z.object({
397
- configuration: z.object({
398
- id: z.string(),
399
- name: z.string(),
400
- description: z.string().max(500).optional(),
401
- component: z.string(),
402
- hasRows: z.boolean(),
403
- rowCount: z.number().int().nonnegative().optional(),
404
- lastChangeDescription: z.string().max(200).optional()
405
- }),
406
- component: z.object({
407
- id: z.string(),
408
- name: z.string(),
409
- type: z.string()
410
- }).optional(),
411
- latestJobs: z.array(
412
- z.object({
413
- id: z.string(),
414
- status: z.enum(JOB_STATUSES),
415
- durationSeconds: z.number().int().nonnegative().optional(),
416
- errorMessage: z.string().max(200).optional(),
417
- createdTime: z.string()
418
- })
419
- ).max(5).optional(),
420
- currentUserEmail: z.string().email()
421
- });
422
- var dashboardSuggestionsRequestSchema = z.object({
423
- context: z.literal("dashboard"),
424
- data: dashboardContextDataSchema
425
- });
426
- var jobDetailSuggestionsRequestSchema = z.object({
427
- context: z.literal("job-detail"),
428
- data: jobDetailContextDataSchema
429
- });
430
- var configurationDetailSuggestionsRequestSchema = z.object({
431
- context: z.literal("configuration-detail"),
432
- data: configurationDetailContextDataSchema
433
- });
434
- z.discriminatedUnion("context", [
435
- dashboardSuggestionsRequestSchema,
436
- jobDetailSuggestionsRequestSchema,
437
- configurationDetailSuggestionsRequestSchema
438
- ]);
439
-
440
- // src/clients/chat/chatClient.ts
441
45
  var agentSettingsSchema = z.object({
442
46
  projectId: z.string(),
443
47
  customInstructions: z.string().nullable(),
@@ -461,43 +65,71 @@ var toolInfoSchema = z.object({
461
65
  var toolsListResponseSchema = z.object({
462
66
  tools: z.array(toolInfoSchema)
463
67
  });
464
- var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
465
- const client = createOpenapiFetchClient({
466
- baseUrl,
467
- headers: new Headers({
468
- [KeboolaHttpHeader.STORAGE_API_URL]: storageApiUrl
469
- }),
470
- middlewares
471
- });
68
+ var sandboxFileEntrySchema = z.object({
69
+ name: z.string(),
70
+ path: z.string(),
71
+ type: z.enum(["file", "dir"]),
72
+ size: z.number().int().nonnegative().optional()
73
+ });
74
+ var sandboxFileListingSchema = z.object({
75
+ entries: z.array(sandboxFileEntrySchema)
76
+ });
77
+ var sandboxFileContentSchema = z.object({
78
+ content: z.string(),
79
+ encoding: z.enum(["utf-8", "binary"]),
80
+ truncated: z.boolean(),
81
+ size: z.number().int().nonnegative()
82
+ });
83
+ var sandboxGitBranchSchema = z.object({
84
+ branch: z.string().nullable()
85
+ });
86
+ var createKaiAgentClient = ({ baseUrl, middlewares }) => {
87
+ const clientOptions = { baseUrl: normalizeBaseUrl(baseUrl), middlewares };
88
+ const client = createOpenapiFetchClient(clientOptions);
89
+ const genericClient = createGenericFetchClient(clientOptions);
472
90
  const getHistory = async (params) => {
473
- const { data } = await client.get("/history", { query: params });
91
+ const { data } = await client.get("/api/history", { query: params });
474
92
  return data;
475
93
  };
476
94
  const getChat = async (chatId, signal) => {
477
- const { data } = await client.get("/chat/{id}", { path: { id: chatId } }, { signal });
95
+ const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
478
96
  return data;
479
97
  };
480
98
  const deleteChat = async (chatId) => {
481
- const { data } = await client.delete("/chat", { query: { id: chatId } });
99
+ const { data } = await client.delete("/api/chat", { query: { id: chatId } });
482
100
  return data;
483
101
  };
102
+ const createChat = async (request) => {
103
+ const { response } = await client.post("/api/chat", { body: request });
104
+ return response;
105
+ };
484
106
  const getVotes = async (chatId) => {
485
- const { data } = await client.get("/vote", { query: { chatId } });
107
+ const { data } = await client.get("/api/vote", { query: { chatId } });
486
108
  return data;
487
109
  };
488
110
  const submitVote = async (params) => {
489
- await client.patch("/vote", { body: params });
490
- };
491
- const createChat = async (request) => {
492
- const { response } = await client.post("/chat", { body: request });
493
- return response;
111
+ await client.patch("/api/vote", { body: params });
494
112
  };
495
113
  const getUsage = async (signal) => {
496
- const { data } = await client.get("/usage", {}, { signal });
114
+ const { data } = await client.get("/api/usage", {}, { signal });
115
+ return data;
116
+ };
117
+ const approveToolCall = async (chatId, body) => {
118
+ await client.post("/api/chat/{id}/approval", { path: { id: chatId }, body });
119
+ };
120
+ const submitToolOutput = async (chatId, body) => {
121
+ await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
122
+ };
123
+ const stopChat = async (chatId) => {
124
+ const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
497
125
  return data;
498
126
  };
499
127
  const getSuggestions = async (request, signal) => {
500
- const { data } = await client.post("/suggestions", { body: request }, { signal });
128
+ const { data } = await genericClient.post(
129
+ "/api/suggestions",
130
+ { body: request },
131
+ { signal }
132
+ );
501
133
  const result = suggestionsApiResponseSchema.safeParse(data);
502
134
  if (!result.success) {
503
135
  throw new Error("Invalid suggestions response format");
@@ -505,7 +137,7 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
505
137
  return result.data;
506
138
  };
507
139
  const getAgentSettings = async (signal) => {
508
- const { data } = await client.get("/settings", {}, { signal });
140
+ const { data } = await genericClient.get("/api/settings", {}, { signal });
509
141
  const result = agentSettingsSchema.safeParse(data);
510
142
  if (!result.success) {
511
143
  throw new Error("Invalid agent settings response format");
@@ -513,7 +145,11 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
513
145
  return result.data;
514
146
  };
515
147
  const updateAgentSettings = async (request, signal) => {
516
- const { data } = await client.patch("/settings", { body: request }, { signal });
148
+ const { data } = await genericClient.patch(
149
+ "/api/settings",
150
+ { body: request },
151
+ { signal }
152
+ );
517
153
  const result = agentSettingsSchema.safeParse(data);
518
154
  if (!result.success) {
519
155
  throw new Error("Invalid agent settings response format");
@@ -521,7 +157,11 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
521
157
  return result.data;
522
158
  };
523
159
  const getUserAgentSettings = async (signal) => {
524
- const { data } = await client.get("/settings/user", {}, { signal });
160
+ const { data } = await genericClient.get(
161
+ "/api/settings/user",
162
+ {},
163
+ { signal }
164
+ );
525
165
  const result = userAgentSettingsSchema.safeParse(data);
526
166
  if (!result.success) {
527
167
  throw new Error("Invalid user agent settings response format");
@@ -529,7 +169,11 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
529
169
  return result.data;
530
170
  };
531
171
  const updateUserAgentSettings = async (request, signal) => {
532
- const { data } = await client.patch("/settings/user", { body: request }, { signal });
172
+ const { data } = await genericClient.patch(
173
+ "/api/settings/user",
174
+ { body: request },
175
+ { signal }
176
+ );
533
177
  const result = userAgentSettingsSchema.safeParse(data);
534
178
  if (!result.success) {
535
179
  throw new Error("Invalid user agent settings response format");
@@ -537,13 +181,54 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
537
181
  return result.data;
538
182
  };
539
183
  const getToolsList = async (signal) => {
540
- const { data } = await client.get("/settings/tools", {}, { signal });
184
+ const { data } = await genericClient.get(
185
+ "/api/settings/tools",
186
+ {},
187
+ { signal }
188
+ );
541
189
  const result = toolsListResponseSchema.safeParse(data);
542
190
  if (!result.success) {
543
191
  throw new Error("Invalid tools list response format");
544
192
  }
545
193
  return result.data;
546
194
  };
195
+ const listSandboxFiles = async (chatId, path, signal) => {
196
+ const { data } = await genericClient.get(
197
+ `/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,
198
+ { query: path ? { path } : void 0 },
199
+ { signal }
200
+ );
201
+ const result = sandboxFileListingSchema.safeParse(data);
202
+ if (!result.success) {
203
+ throw new Error("Invalid sandbox files response format");
204
+ }
205
+ return result.data;
206
+ };
207
+ const readSandboxFile = async (chatId, path, signal) => {
208
+ const { data } = await genericClient.get(
209
+ `/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,
210
+ { query: { path } },
211
+ { signal }
212
+ );
213
+ const result = sandboxFileContentSchema.safeParse(data);
214
+ if (!result.success) {
215
+ throw new Error("Invalid sandbox file response format");
216
+ }
217
+ return result.data;
218
+ };
219
+ const getSandboxGitBranch = async (chatId, signal) => {
220
+ const { data } = await genericClient.get(
221
+ `/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,
222
+ {},
223
+ { signal }
224
+ );
225
+ const result = sandboxGitBranchSchema.safeParse(data);
226
+ if (!result.success) {
227
+ throw new Error("Invalid sandbox git-branch response format");
228
+ }
229
+ return result.data;
230
+ };
231
+ const chatStreamUrl = clientOptions.baseUrl + "/api/chat";
547
232
  return {
548
233
  getHistory,
549
234
  getChat,
@@ -552,2844 +237,54 @@ var createChatClient = ({ baseUrl, middlewares, storageApiUrl }) => {
552
237
  getVotes,
553
238
  submitVote,
554
239
  getUsage,
240
+ approveToolCall,
241
+ submitToolOutput,
242
+ stopChat,
555
243
  getSuggestions,
556
244
  getAgentSettings,
557
245
  updateAgentSettings,
558
246
  getUserAgentSettings,
559
247
  updateUserAgentSettings,
560
- getToolsList
561
- };
562
- };
563
- var TailError = z5.object({
564
- context: z5.object({
565
- code: z5.string()
566
- })
567
- });
568
- dayjs.extend(utc);
569
- var ISO_TIMESTAMP_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z/;
570
- var LEADING_ISO_TIMESTAMP_REGEX = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)\s?/;
571
- var tryParseJsonl = (line) => {
572
- if (!line.startsWith("{")) return null;
573
- let parsed;
574
- try {
575
- parsed = JSON.parse(line);
576
- } catch {
577
- return null;
578
- }
579
- if (typeof parsed !== "object" || parsed === null) return null;
580
- const record = parsed;
581
- const { timestamp, message: message2 } = record;
582
- if (typeof timestamp !== "string" || typeof message2 !== "string") return null;
583
- return {
584
- timestamp,
585
- message: message2
586
- };
587
- };
588
- var parsePlainTextLine = (line) => {
589
- const match = line.match(LEADING_ISO_TIMESTAMP_REGEX);
590
- if (match) {
591
- return { timestamp: match[1], message: line.slice(match[0].length) };
592
- }
593
- return { timestamp: null, message: line };
594
- };
595
- var parseLogLine = (line) => tryParseJsonl(line) ?? parsePlainTextLine(line);
596
- var toLogEntryFromObject = (raw) => {
597
- if (typeof raw.message !== "string") return null;
598
- return {
599
- timestamp: typeof raw.timestamp === "string" ? raw.timestamp : null,
600
- message: raw.message
248
+ getToolsList,
249
+ listSandboxFiles,
250
+ readSandboxFile,
251
+ getSandboxGitBranch,
252
+ chatStreamUrl
601
253
  };
602
254
  };
603
- var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
604
- var parseLogLines = (raw) => {
605
- if (raw === null || raw === void 0 || raw === "") return [];
606
- if (Array.isArray(raw)) {
607
- return raw.flatMap((item) => {
608
- if (typeof item === "string") return item === "" ? [] : [parseLogLine(item)];
609
- if (isPlainObject(item)) {
610
- const entry = toLogEntryFromObject(item);
611
- return entry ? [entry] : [];
612
- }
613
- return [];
614
- });
615
- }
616
- if (isPlainObject(raw)) {
617
- const entry = toLogEntryFromObject(raw);
618
- return entry ? [entry] : [];
619
- }
620
- if (typeof raw !== "string") return [];
621
- const lines = raw.split("\n");
622
- const entries = [];
623
- for (const line of lines) {
624
- if (line === "") continue;
625
- entries.push(parseLogLine(line));
626
- }
627
- return entries;
628
- };
629
- var parseLastLogTimestamp = (logs) => {
630
- const entries = parseLogLines(logs);
631
- for (let i = entries.length - 1; i >= 0; i--) {
632
- const entry = entries[i];
633
- if (!entry) continue;
634
- if (entry.timestamp) return entry.timestamp;
635
- const match = entry.message.match(ISO_TIMESTAMP_REGEX);
636
- if (match) return match[0];
255
+
256
+ // src/utils/assert.ts
257
+ function assert(value, message) {
258
+ if (value == null) {
259
+ throw new Error(message);
637
260
  }
638
- return null;
639
- };
640
- var calculateNextLogTimestamp = (timestamp) => {
641
- if (timestamp === null) return null;
642
- return dayjs(timestamp).utc().add(1, "second").utc().format();
643
- };
644
- var prepareAppRun = (appRun) => {
645
- return {
646
- ...appRun,
647
- state: appRun.state ?? (appRun.stoppedAt ? "finished" : "running")
648
- // fallback state for historic non migrated runs
649
- };
650
- };
261
+ }
651
262
 
652
- // src/clients/dataScience/dataScienceClient.ts
653
- var createDataScienceClient = ({ baseUrl, middlewares }) => {
654
- const client = createOpenapiFetchClient({
655
- baseUrl,
656
- middlewares
657
- });
658
- const getAppRuns = async (appId, query, signal) => {
659
- const { data } = await client.get("/apps/{appId}/runs", { path: { appId }, query }, { signal });
660
- return data.map(prepareAppRun);
661
- };
662
- const getAppRun = async (appId, runId, signal) => {
663
- const { data } = await client.get(
664
- "/apps/{appId}/runs/{runId}",
665
- { path: { appId, runId } },
666
- { signal }
667
- );
668
- return prepareAppRun(data);
669
- };
670
- const getAppLogsDownload = async (id, signal) => {
671
- const { data, response } = await client.get(
672
- "/apps/{appId}/logs/download",
673
- { path: { appId: id } },
674
- { signal }
675
- );
676
- const contentDisposition = parseContentDispositionHeader(
677
- response.headers.get(HttpHeader.CONTENT_DISPOSITION)
678
- );
679
- return {
680
- logs: data,
681
- fileName: contentDisposition?.filename ?? "logs.txt"
682
- };
683
- };
684
- const getAppLogsTail = async (id, { query, signal } = {}) => {
685
- try {
686
- const { data } = await client.get(
687
- "/apps/{appId}/logs/tail",
688
- {
689
- query,
690
- path: {
691
- appId: id
692
- }
693
- },
694
- {
695
- signal
696
- }
697
- );
698
- const logs = data === "" ? null : data;
699
- const lastLogTimestamp = parseLastLogTimestamp(logs);
700
- const nextLogTimestamp = calculateNextLogTimestamp(lastLogTimestamp);
701
- return {
702
- entries: parseLogLines(logs),
703
- nextLogTimestamp
704
- };
705
- } catch (error) {
706
- if (isApiError(error) && error.response.status === HttpStatus.BAD_REQUEST && TailError.safeParse(error.data).data?.context?.code === "apps.appNotRunning") {
707
- return { entries: [], nextLogTimestamp: null };
708
- }
709
- throw error;
710
- }
711
- };
712
- const getApps = async (query, signal) => {
713
- const { data } = await client.get("/apps", { query }, { signal });
714
- return data;
715
- };
716
- const getApp = async (appId, signal) => {
717
- const { data } = await client.get("/apps/{appId}", { path: { appId } }, { signal });
718
- return data;
719
- };
720
- const createApp = async (body, signal) => {
721
- const { data } = await client.post("/apps", { body }, { signal });
722
- return data;
263
+ // src/domain/stack.ts
264
+ var SERVICE_URL_OVERRIDES = {
265
+ // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.
266
+ // I assume the service is versioned.
267
+ "kai-assistant": (url) => `${url}/api`
268
+ };
269
+ var createStack = ({ stackInfo, clientServiceUrls }) => {
270
+ const { services, components, features, ...infoRest } = stackInfo;
271
+ const serviceMap = new Map(
272
+ services.map((service) => {
273
+ const devOverride = clientServiceUrls?.[service.id]?.(service.url);
274
+ const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
275
+ const url = devOverride ?? prodOverride ?? service.url;
276
+ return [service.id, url];
277
+ })
278
+ );
279
+ const componentMap = new Map(components.map((component) => [component.id, component]));
280
+ const featureSet = new Set(features);
281
+ const hasFeature = (...feature) => {
282
+ if (feature.length === 0) return false;
283
+ return feature.every((x) => featureSet.has(x));
723
284
  };
724
- const patchApp = async (appId, body, signal) => {
725
- const { data } = await client.patch(
726
- "/apps/{appId}",
727
- {
728
- path: { appId },
729
- body
730
- },
731
- { signal }
732
- );
733
- return data;
734
- };
735
- const deleteApp = async (appId, signal) => {
736
- return client.delete("/apps/{appId}", { path: { appId } }, { signal });
737
- };
738
- const getAppPassword = async (appId, signal) => {
739
- const { data } = await client.get("/apps/{appId}/password", { path: { appId } }, { signal });
740
- return data;
741
- };
742
- const resetAppPassword = async (appId, signal) => {
743
- const { data } = await client.post(
744
- "/apps/{appId}/reset-password",
745
- { path: { appId } },
746
- { signal }
747
- );
748
- return data;
749
- };
750
- const getRuntimes = async (signal) => {
751
- const { data } = await client.get("/runtimes", {}, { signal });
752
- return data;
753
- };
754
- const getSandbox = async (appId, signal) => {
755
- const { data } = await client.get("/sandboxes/{appId}", { path: { appId } }, { signal });
756
- return data;
757
- };
758
- return {
759
- getAppRuns,
760
- getAppRun,
761
- getAppLogsDownload,
762
- getAppLogsTail,
763
- getApps,
764
- getApp,
765
- createApp,
766
- patchApp,
767
- deleteApp,
768
- getAppPassword,
769
- resetAppPassword,
770
- getRuntimes,
771
- getSandbox
772
- };
773
- };
774
-
775
- // src/clients/editor/editorClient.ts
776
- var createEditorClient = ({ baseUrl, middlewares }) => {
777
- const client = createOpenapiFetchClient({
778
- baseUrl,
779
- middlewares
780
- });
781
- const createSession = async (body) => {
782
- const { data } = await client.post("/sql/sessions", {
783
- body
784
- });
785
- return data;
786
- };
787
- const getSession = async ({ id }, signal) => {
788
- const { data } = await client.get(`/sql/sessions/{id}`, { path: { id } }, { signal });
789
- return data;
790
- };
791
- const getSessions = async (query, signal) => {
792
- const { data } = await client.get(`/sql/sessions`, { query }, { signal });
793
- return data;
794
- };
795
- const getSessionSchema = async ({
796
- id,
797
- onlyWorkspaceSchema = "1",
798
- loadTables = "1"
799
- }, signal) => {
800
- const { data } = await client.get(
801
- `/sql/sessions/{id}/schema`,
802
- {
803
- path: { id },
804
- query: { onlyWorkspaceSchema, loadTables }
805
- },
806
- { signal }
807
- );
808
- return data;
809
- };
810
- const createQueryJob = async ({ id }, body) => {
811
- const { data } = await client.post(`/sql/sessions/{id}/run-query`, {
812
- path: { id },
813
- body
814
- });
815
- return data;
816
- };
817
- const tablePreview = async ({ id }, body) => {
818
- const { data } = await client.post(`/sql/sessions/{id}/table-preview`, {
819
- path: { id },
820
- body
821
- });
822
- return data;
823
- };
824
- const tableDefinition = async ({ id, ...query }, signal) => {
825
- const { data } = await client.get(
826
- `/sql/sessions/{id}/table-ddl`,
827
- { path: { id }, query },
828
- { signal }
829
- );
830
- return data;
831
- };
832
- const load = async ({ id }, body) => {
833
- const { data } = await client.post(`/sql/sessions/{id}/load`, {
834
- path: { id },
835
- body
836
- });
837
- return data;
838
- };
839
- const unload = async ({ id }, body) => {
840
- const { data } = await client.post(`/sql/sessions/{id}/unload`, {
841
- path: { id },
842
- // BE error: The body is optional; however, without it, the request will fail with the message "Request content type must be application/json."
843
- // This is expected, as our client cannot correctly determine the content type without the body.
844
- // This issue should be addressed to indicate that the body is required in their Swagger schema.
845
- body: body ?? { tableId: null }
846
- });
847
- return data;
848
- };
849
- const resetWorkspacePassword = async (id) => {
850
- const { data } = await client.post(`/sql/sessions/{id}/reset-password`, {
851
- path: { id }
852
- });
853
- return data;
854
- };
855
- const getSessionCredentials = async (id, signal) => {
856
- const { data } = await client.get(
857
- `/sql/sessions/{id}/credentials`,
858
- { path: { id } },
859
- { signal }
860
- );
861
- return data;
862
- };
863
- return {
864
- createSession,
865
- getSession,
866
- getSessions,
867
- getSessionSchema,
868
- createQueryJob,
869
- tablePreview,
870
- tableDefinition,
871
- load,
872
- unload,
873
- resetWorkspacePassword,
874
- getSessionCredentials
875
- };
876
- };
877
-
878
- // src/clients/encryption/encryptionClient.ts
879
- var createEncryptionClient = ({ baseUrl, middlewares }) => {
880
- const client = createGenericFetchClient({
881
- baseUrl,
882
- middlewares
883
- });
884
- const _encrypt = async (data, signal) => {
885
- const response = await client.post(
886
- "/encrypt",
887
- {
888
- query: {
889
- projectId: data.projectId,
890
- branchType: data.branchType,
891
- componentId: data.componentId
892
- },
893
- body: data.data
894
- },
895
- { signal }
896
- );
897
- return response.data;
898
- };
899
- const encrypt = (data, signal) => _encrypt(data, signal);
900
- const encryptSecrets = (data, signal) => _encrypt(data, signal);
901
- return {
902
- encryptSecrets,
903
- encrypt
904
- };
905
- };
906
-
907
- // src/clients/import/importClient.ts
908
- var createImportClient = ({ baseUrl, middlewares }) => {
909
- const client = createGenericFetchClient({
910
- baseUrl,
911
- middlewares
912
- });
913
- const uploadFile = async (file, params = {}, signal) => {
914
- const formData = new FormData();
915
- formData.append("data", file);
916
- if (params.isPermanent) {
917
- formData.append("isPermanent", "1");
918
- }
919
- if (params.notify) {
920
- formData.append("notify", "1");
921
- }
922
- if (params.branchId) {
923
- formData.append("branchId", params.branchId);
924
- }
925
- if (params.tags) {
926
- for (const tag of params.tags) {
927
- formData.append("tags[]", tag);
928
- }
929
- }
930
- const { data } = await client.post(
931
- "/upload-file",
932
- { body: formData },
933
- { signal }
934
- );
935
- return data;
936
- };
937
- return {
938
- uploadFile
939
- };
940
- };
941
- var agentSettingsSchema2 = z.object({
942
- projectId: z.string(),
943
- customInstructions: z.string().nullable(),
944
- createdAt: z.string(),
945
- updatedAt: z.string()
946
- });
947
- var toolPermissionValueSchema2 = z.enum(["always_allow", "always_ask", "blocked"]);
948
- var userAgentSettingsSchema2 = z.object({
949
- projectId: z.string(),
950
- userId: z.string(),
951
- customInstructions: z.string().nullable(),
952
- toolPermissions: z.record(z.string(), toolPermissionValueSchema2).nullable(),
953
- createdAt: z.string(),
954
- updatedAt: z.string()
955
- });
956
- var toolInfoSchema2 = z.object({
957
- name: z.string(),
958
- description: z.string(),
959
- readOnly: z.boolean()
960
- });
961
- var toolsListResponseSchema2 = z.object({
962
- tools: z.array(toolInfoSchema2)
963
- });
964
- var createKaiAgentClient = ({ baseUrl, middlewares }) => {
965
- const clientOptions = { baseUrl, middlewares };
966
- const client = createOpenapiFetchClient(clientOptions);
967
- const genericClient = createGenericFetchClient(clientOptions);
968
- const getHistory = async (params) => {
969
- const { data } = await client.get("/api/history", { query: params });
970
- return data;
971
- };
972
- const getChat = async (chatId, signal) => {
973
- const { data } = await client.get("/api/chat/{id}", { path: { id: chatId } }, { signal });
974
- return data;
975
- };
976
- const deleteChat = async (chatId) => {
977
- const { data } = await client.delete("/api/chat", { query: { id: chatId } });
978
- return data;
979
- };
980
- const createChat = async (request) => {
981
- const { response } = await client.post("/api/chat", { body: request });
982
- return response;
983
- };
984
- const getVotes = async (chatId) => {
985
- const { data } = await client.get("/api/vote", { query: { chatId } });
986
- return data;
987
- };
988
- const submitVote = async (params) => {
989
- await client.patch("/api/vote", { body: params });
990
- };
991
- const getUsage = async (signal) => {
992
- const { data } = await client.get("/api/usage", {}, { signal });
993
- return data;
994
- };
995
- const approveToolCall = async (chatId, body) => {
996
- await client.post("/api/chat/{id}/approval", { path: { id: chatId }, body });
997
- };
998
- const submitToolOutput = async (chatId, body) => {
999
- await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
1000
- };
1001
- const stopChat = async (chatId) => {
1002
- const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
1003
- return data;
1004
- };
1005
- const getSuggestions = async (request, signal) => {
1006
- const { data } = await genericClient.post(
1007
- "/api/suggestions",
1008
- { body: request },
1009
- { signal }
1010
- );
1011
- const result = suggestionsApiResponseSchema.safeParse(data);
1012
- if (!result.success) {
1013
- throw new Error("Invalid suggestions response format");
1014
- }
1015
- return result.data;
1016
- };
1017
- const getAgentSettings = async (signal) => {
1018
- const { data } = await genericClient.get("/api/settings", {}, { signal });
1019
- const result = agentSettingsSchema2.safeParse(data);
1020
- if (!result.success) {
1021
- throw new Error("Invalid agent settings response format");
1022
- }
1023
- return result.data;
1024
- };
1025
- const updateAgentSettings = async (request, signal) => {
1026
- const { data } = await genericClient.patch(
1027
- "/api/settings",
1028
- { body: request },
1029
- { signal }
1030
- );
1031
- const result = agentSettingsSchema2.safeParse(data);
1032
- if (!result.success) {
1033
- throw new Error("Invalid agent settings response format");
1034
- }
1035
- return result.data;
1036
- };
1037
- const getUserAgentSettings = async (signal) => {
1038
- const { data } = await genericClient.get(
1039
- "/api/settings/user",
1040
- {},
1041
- { signal }
1042
- );
1043
- const result = userAgentSettingsSchema2.safeParse(data);
1044
- if (!result.success) {
1045
- throw new Error("Invalid user agent settings response format");
1046
- }
1047
- return result.data;
1048
- };
1049
- const updateUserAgentSettings = async (request, signal) => {
1050
- const { data } = await genericClient.patch(
1051
- "/api/settings/user",
1052
- { body: request },
1053
- { signal }
1054
- );
1055
- const result = userAgentSettingsSchema2.safeParse(data);
1056
- if (!result.success) {
1057
- throw new Error("Invalid user agent settings response format");
1058
- }
1059
- return result.data;
1060
- };
1061
- const getToolsList = async (signal) => {
1062
- const { data } = await genericClient.get(
1063
- "/api/settings/tools",
1064
- {},
1065
- { signal }
1066
- );
1067
- const result = toolsListResponseSchema2.safeParse(data);
1068
- if (!result.success) {
1069
- throw new Error("Invalid tools list response format");
1070
- }
1071
- return result.data;
1072
- };
1073
- const chatStreamUrl = baseUrl + "/api/chat";
1074
- return {
1075
- getHistory,
1076
- getChat,
1077
- deleteChat,
1078
- createChat,
1079
- getVotes,
1080
- submitVote,
1081
- getUsage,
1082
- approveToolCall,
1083
- submitToolOutput,
1084
- stopChat,
1085
- getSuggestions,
1086
- getAgentSettings,
1087
- updateAgentSettings,
1088
- getUserAgentSettings,
1089
- updateUserAgentSettings,
1090
- getToolsList,
1091
- chatStreamUrl
1092
- };
1093
- };
1094
-
1095
- // src/clients/verify/createVerifyClient.ts
1096
- var createVerifyClient = () => {
1097
- const storageApiToken = async (host, token, signal) => {
1098
- const { data } = await createGenericFetchClient({
1099
- baseUrl: `${host}/v2/storage`,
1100
- headers: new Headers({ [KeboolaHttpHeader.STORAGE_API_TOKEN]: token })
1101
- }).get("/tokens/verify", {}, { signal });
1102
- return data;
1103
- };
1104
- const managementApiToken = async (host, token, signal) => {
1105
- const { data } = await createGenericFetchClient({
1106
- baseUrl: host,
1107
- headers: new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: token })
1108
- }).get("/manage/tokens/verify", {}, { signal });
1109
- return data;
1110
- };
1111
- return {
1112
- storageApiToken,
1113
- managementApiToken
1114
- };
1115
- };
1116
-
1117
- // src/clients/management/authMiddleware.ts
1118
- var TOKEN_CACHE_TTL_MS = 6e4;
1119
- var isManagementClientAuthError = (error) => error instanceof ManagementClientAuthError;
1120
- var createAuth = (baseUrl) => {
1121
- const fetchClient = createGenericFetchClient({ baseUrl });
1122
- const createCurrentUserSessionToken = async (accessToken) => {
1123
- const headers = new Headers({ [KeboolaHttpHeader.MANAGEMENT_API_TOKEN]: accessToken });
1124
- const { data } = await fetchClient.post(
1125
- "/manage/current-user/session-token",
1126
- {},
1127
- { headers }
1128
- );
1129
- return data.token;
1130
- };
1131
- const createAdminAccountSessionToken = async () => {
1132
- const { data } = await fetchClient.post(
1133
- "/admin/account/session-token",
1134
- {},
1135
- {
1136
- // transform valid response, to invalid and throw custom error
1137
- validateStatus: (apiResponse) => {
1138
- const { response } = apiResponse;
1139
- const isTextContent = response.headers.get(HttpHeader.CONTENT_TYPE)?.includes(HttpContentType.TEXT_HTML);
1140
- if (isTextContent)
1141
- return new ManagementClientAuthError(
1142
- "Your session expired",
1143
- "You will be logged out automatically.",
1144
- apiResponse
1145
- );
1146
- return defaultValidateStatus(apiResponse);
1147
- }
1148
- }
1149
- );
1150
- return data.token;
1151
- };
1152
- return {
1153
- createCurrentUserSessionToken,
1154
- createAdminAccountSessionToken
1155
- };
1156
- };
1157
- var createAuthMiddleware = ({
1158
- accessToken,
1159
- baseUrl
1160
- }) => {
1161
- const auth = createAuth(baseUrl);
1162
- const verify = createVerifyClient();
1163
- let token = accessToken;
1164
- let tokenValidUntil = 0;
1165
- let inflightAuth = null;
1166
- const isDevelopment = process.env.NODE_ENV === "development";
1167
- const ensureValidToken = async () => {
1168
- if (token && Date.now() < tokenValidUntil) return token;
1169
- if (token) {
1170
- const tokenInfo = await verify.managementApiToken(baseUrl, token);
1171
- const isTokenValid = !tokenInfo.isDisabled && !tokenInfo.isExpired;
1172
- if (isTokenValid) {
1173
- tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
1174
- return token;
1175
- }
1176
- token = isDevelopment ? await auth.createCurrentUserSessionToken(token) : await auth.createAdminAccountSessionToken();
1177
- tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
1178
- return token;
1179
- }
1180
- token = await auth.createAdminAccountSessionToken();
1181
- tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
1182
- return token;
1183
- };
1184
- return (next) => async (request) => {
1185
- if (!inflightAuth) {
1186
- inflightAuth = ensureValidToken().finally(() => {
1187
- inflightAuth = null;
1188
- });
1189
- }
1190
- const validToken = await inflightAuth;
1191
- request.request.headers.set(KeboolaHttpHeader.MANAGEMENT_API_TOKEN, validToken);
1192
- return next(request);
1193
- };
1194
- };
1195
-
1196
- // src/clients/management/currentUser/currentUser.ts
1197
- var createCurrentUser = (client) => {
1198
- const getMaintainerInvitations = async (signal) => {
1199
- const { data } = await client.get(
1200
- "/manage/current-user/maintainers-invitations",
1201
- {},
1202
- { signal }
1203
- );
1204
- return data;
1205
- };
1206
- const getMaintainerInvitation = async (id, signal) => {
1207
- const { data } = await client.get(
1208
- "/manage/current-user/maintainers-invitations/{id}",
1209
- { path: { id } },
1210
- { signal }
1211
- );
1212
- return data;
1213
- };
1214
- const acceptMaintainerInvitation = async (id) => {
1215
- await client.put("/manage/current-user/maintainers-invitations/{id}", { path: { id } });
1216
- };
1217
- const rejectMaintainerInvitation = async (id) => {
1218
- await client.delete("/manage/current-user/maintainers-invitations/{id}", { path: { id } });
1219
- };
1220
- const getOrganizationInvitations = async (signal) => {
1221
- const { data } = await client.get(
1222
- "/manage/current-user/organizations-invitations",
1223
- {},
1224
- { signal }
1225
- );
1226
- return data;
1227
- };
1228
- const getOrganizationInvitation = async (id, signal) => {
1229
- const { data } = await client.get(
1230
- "/manage/current-user/organizations-invitations/{id}",
1231
- { path: { id } },
1232
- { signal }
1233
- );
1234
- return data;
1235
- };
1236
- const acceptOrganizationInvitation = async (id) => {
1237
- await client.put("/manage/current-user/organizations-invitations/{id}", { path: { id } });
1238
- };
1239
- const rejectOrganizationInvitation = async (id) => {
1240
- await client.delete("/manage/current-user/organizations-invitations/{id}", { path: { id } });
1241
- };
1242
- const getProjectInvitations = async (signal) => {
1243
- const { data } = await client.get("/manage/current-user/projects-invitations", {}, { signal });
1244
- return data;
1245
- };
1246
- const getProjectInvitation = async (id, signal) => {
1247
- const { data } = await client.get(
1248
- "/manage/current-user/projects-invitations/{id}",
1249
- { path: { id } },
1250
- { signal }
1251
- );
1252
- return data;
1253
- };
1254
- const acceptProjectInvitation = async (id) => {
1255
- await client.put("/manage/current-user/projects-invitations/{id}", { path: { id } });
1256
- };
1257
- const rejectProjectInvitation = async (id) => {
1258
- await client.delete("/manage/current-user/projects-invitations/{id}", { path: { id } });
1259
- };
1260
- const getProjectJoinRequests = async (signal) => {
1261
- const { data } = await client.get(
1262
- "/manage/current-user/projects-join-requests",
1263
- {},
1264
- { signal }
1265
- );
1266
- return data;
1267
- };
1268
- const deleteProjectJoinRequest = async (id) => {
1269
- await client.delete("/manage/current-user/projects-join-requests/{id}", { path: { id } });
1270
- };
1271
- return {
1272
- getMaintainerInvitations,
1273
- getMaintainerInvitation,
1274
- acceptMaintainerInvitation,
1275
- rejectMaintainerInvitation,
1276
- getOrganizationInvitations,
1277
- getOrganizationInvitation,
1278
- acceptOrganizationInvitation,
1279
- rejectOrganizationInvitation,
1280
- getProjectInvitations,
1281
- getProjectInvitation,
1282
- acceptProjectInvitation,
1283
- rejectProjectInvitation,
1284
- getProjectJoinRequests,
1285
- deleteProjectJoinRequest
1286
- };
1287
- };
1288
-
1289
- // src/clients/management/features/features.ts
1290
- var createFeatures = (client) => {
1291
- const getAllFeatures = async (query, signal) => {
1292
- const { data } = await client.get(
1293
- "/features",
1294
- { query },
1295
- { signal }
1296
- );
1297
- return data;
1298
- };
1299
- return {
1300
- getAllFeatures
1301
- };
1302
- };
1303
-
1304
- // src/clients/management/maintainers/maintainers.ts
1305
- var createMaintainers = (client) => {
1306
- const getMaintainers = async (signal) => {
1307
- const { data } = await client.get("/manage/maintainers", {}, { signal });
1308
- return data;
1309
- };
1310
- const getMaintainer = async (maintainerId, signal) => {
1311
- const { data } = await client.get(
1312
- "/manage/maintainers/{id}",
1313
- { path: { id: maintainerId } },
1314
- { signal }
1315
- );
1316
- return data;
1317
- };
1318
- const createMaintainer = async (body) => {
1319
- const { data } = await client.post("/manage/maintainers", { body });
1320
- return data;
1321
- };
1322
- const updateMaintainer = async ({
1323
- maintainerId,
1324
- ...body
1325
- }) => {
1326
- const { data } = await client.patch("/manage/maintainers/{id}", {
1327
- path: { id: maintainerId },
1328
- body
1329
- });
1330
- return data;
1331
- };
1332
- const deleteMaintainer = async (maintainerId) => {
1333
- await client.delete("/manage/maintainers/{id}", { path: { id: maintainerId } });
1334
- };
1335
- const getMaintainerUsers = async (maintainerId, signal) => {
1336
- const { data } = await client.get(
1337
- "/manage/maintainers/{id}/users",
1338
- { path: { id: maintainerId } },
1339
- { signal }
1340
- );
1341
- return data;
1342
- };
1343
- const addMaintainerUser = async ({
1344
- maintainerId,
1345
- ...body
1346
- }) => {
1347
- const { data } = await client.post("/manage/maintainers/{id}/users", {
1348
- path: { id: maintainerId },
1349
- body
1350
- });
1351
- return data;
1352
- };
1353
- const removeMaintainerUser = async ({
1354
- maintainerId,
1355
- adminId
1356
- }) => {
1357
- await client.delete("/manage/maintainers/{id}/users/{adminId}", {
1358
- path: { id: maintainerId, adminId }
1359
- });
1360
- };
1361
- const getMaintainerInvitations = async (maintainerId, signal) => {
1362
- const { data } = await client.get(
1363
- "/manage/maintainers/{id}/invitations",
1364
- { path: { id: maintainerId } },
1365
- { signal }
1366
- );
1367
- return data;
1368
- };
1369
- const getMaintainerInvitation = async ({ maintainerId, invitationId }, signal) => {
1370
- const { data } = await client.get(
1371
- "/manage/maintainers/{id}/invitations/{invitationId}",
1372
- { path: { id: maintainerId, invitationId } },
1373
- { signal }
1374
- );
1375
- return data;
1376
- };
1377
- const createMaintainerInvitation = async ({
1378
- maintainerId,
1379
- ...body
1380
- }) => {
1381
- const { data } = await client.post("/manage/maintainers/{id}/invitations", {
1382
- path: { id: maintainerId },
1383
- body
1384
- });
1385
- return data;
1386
- };
1387
- const deleteMaintainerInvitation = async ({
1388
- maintainerId,
1389
- invitationId
1390
- }) => {
1391
- await client.delete("/manage/maintainers/{id}/invitations/{invitationId}", {
1392
- path: { id: maintainerId, invitationId }
1393
- });
1394
- };
1395
- const createMaintainerOrganization = async ({
1396
- maintainerId,
1397
- ...body
1398
- }) => {
1399
- const { data } = await client.post("/manage/maintainers/{id}/organizations", {
1400
- path: { id: maintainerId },
1401
- body
1402
- });
1403
- return data;
1404
- };
1405
- const getMaintainerMetadata = async (maintainerId, signal) => {
1406
- const { data } = await client.get(
1407
- "/manage/maintainers/{id}/metadata",
1408
- { path: { id: maintainerId } },
1409
- { signal }
1410
- );
1411
- return data;
1412
- };
1413
- const setMaintainerMetadata = async ({
1414
- maintainerId,
1415
- ...body
1416
- }) => {
1417
- const { data } = await client.post("/manage/maintainers/{id}/metadata", {
1418
- path: { id: maintainerId },
1419
- body
1420
- });
1421
- return data;
1422
- };
1423
- const deleteMaintainerMetadata = async ({
1424
- maintainerId,
1425
- metadataId
1426
- }) => {
1427
- await client.delete("/manage/maintainers/{id}/metadata/{metadataId}", {
1428
- path: { id: maintainerId, metadataId }
1429
- });
1430
- };
1431
- return {
1432
- getMaintainers,
1433
- getMaintainer,
1434
- createMaintainer,
1435
- updateMaintainer,
1436
- deleteMaintainer,
1437
- getMaintainerUsers,
1438
- addMaintainerUser,
1439
- removeMaintainerUser,
1440
- getMaintainerInvitations,
1441
- getMaintainerInvitation,
1442
- createMaintainerInvitation,
1443
- deleteMaintainerInvitation,
1444
- createMaintainerOrganization,
1445
- getMaintainerMetadata,
1446
- setMaintainerMetadata,
1447
- deleteMaintainerMetadata
1448
- };
1449
- };
1450
-
1451
- // src/clients/management/organizations/organizations.ts
1452
- var createOrganizations = (client) => {
1453
- const getOrganizations = async (signal) => {
1454
- const { data } = await client.get("/manage/organizations", {}, { signal });
1455
- return data;
1456
- };
1457
- const getOrganization = async (organizationId, signal) => {
1458
- const { data } = await client.get(
1459
- "/manage/organizations/{id}",
1460
- { path: { id: organizationId } },
1461
- { signal }
1462
- );
1463
- return data;
1464
- };
1465
- const updateOrganization = async ({
1466
- organizationId,
1467
- ...body
1468
- }) => {
1469
- const { data } = await client.patch("/manage/organizations/{id}", {
1470
- path: { id: organizationId },
1471
- body
1472
- });
1473
- return data;
1474
- };
1475
- const deleteOrganization = async (organizationId) => {
1476
- await client.delete("/manage/organizations/{id}", { path: { id: organizationId } });
1477
- };
1478
- const forceMfa = async (organizationId) => {
1479
- const { data } = await client.patch("/manage/organizations/{id}/force-mfa", {
1480
- path: { id: organizationId }
1481
- });
1482
- return data;
1483
- };
1484
- const joinOrganization = async (organizationId) => {
1485
- await client.post("/manage/organizations/{id}/join-organization", {
1486
- path: { id: organizationId }
1487
- });
1488
- };
1489
- const getOrganizationUsers = async (organizationId, signal) => {
1490
- const { data } = await client.get(
1491
- "/manage/organizations/{id}/users",
1492
- { path: { id: organizationId } },
1493
- { signal }
1494
- );
1495
- return data;
1496
- };
1497
- const addOrganizationUser = async ({
1498
- organizationId,
1499
- ...body
1500
- }) => {
1501
- const { data } = await client.post("/manage/organizations/{id}/users", {
1502
- path: { id: organizationId },
1503
- body
1504
- });
1505
- return data;
1506
- };
1507
- const removeOrganizationUser = async ({
1508
- organizationId,
1509
- userId
1510
- }) => {
1511
- await client.delete("/manage/organizations/{id}/users/{userId}", {
1512
- path: { id: organizationId, userId }
1513
- });
1514
- };
1515
- const getOrganizationProjectsUsers = async (organizationId, signal) => {
1516
- const { data } = await client.get(
1517
- "/manage/organizations/{id}/projects-users",
1518
- { path: { id: organizationId } },
1519
- { signal }
1520
- );
1521
- return data;
1522
- };
1523
- const getOrganizationInvitations = async (organizationId, signal) => {
1524
- const { data } = await client.get(
1525
- "/manage/organizations/{id}/invitations",
1526
- { path: { id: organizationId } },
1527
- { signal }
1528
- );
1529
- return data;
1530
- };
1531
- const getOrganizationInvitation = async ({ organizationId, invitationId }, signal) => {
1532
- const { data } = await client.get(
1533
- "/manage/organizations/{id}/invitations/{invitationId}",
1534
- { path: { id: organizationId, invitationId } },
1535
- { signal }
1536
- );
1537
- return data;
1538
- };
1539
- const createOrganizationInvitation = async ({
1540
- organizationId,
1541
- ...body
1542
- }) => {
1543
- const { data } = await client.post("/manage/organizations/{id}/invitations", {
1544
- path: { id: organizationId },
1545
- body
1546
- });
1547
- return data;
1548
- };
1549
- const deleteOrganizationInvitation = async ({
1550
- organizationId,
1551
- invitationId
1552
- }) => {
1553
- await client.delete("/manage/organizations/{id}/invitations/{invitationId}", {
1554
- path: { id: organizationId, invitationId }
1555
- });
1556
- };
1557
- const getOrganizationProjects = async (organizationId, signal) => {
1558
- const { data } = await client.get(
1559
- "/manage/organizations/{id}/projects",
1560
- { path: { id: organizationId } },
1561
- { signal }
1562
- );
1563
- return data;
1564
- };
1565
- const createOrganizationProject = async ({
1566
- organizationId,
1567
- ...body
1568
- }) => {
1569
- const { data } = await client.post("/manage/organizations/{id}/projects", {
1570
- path: { id: organizationId },
1571
- body
1572
- });
1573
- return data;
1574
- };
1575
- const getOrganizationMetadata = async (organizationId, signal) => {
1576
- const { data } = await client.get(
1577
- "/manage/organizations/{id}/metadata",
1578
- { path: { id: organizationId } },
1579
- { signal }
1580
- );
1581
- return data;
1582
- };
1583
- const setOrganizationMetadata = async ({
1584
- organizationId,
1585
- ...body
1586
- }) => {
1587
- const { data } = await client.post("/manage/organizations/{id}/metadata", {
1588
- path: { id: organizationId },
1589
- body
1590
- });
1591
- return data;
1592
- };
1593
- const deleteOrganizationMetadata = async ({
1594
- organizationId,
1595
- metadataId
1596
- }) => {
1597
- await client.delete("/manage/organizations/{id}/metadata/{metadataId}", {
1598
- path: { id: organizationId, metadataId }
1599
- });
1600
- };
1601
- return {
1602
- getOrganizations,
1603
- getOrganization,
1604
- updateOrganization,
1605
- deleteOrganization,
1606
- forceMfa,
1607
- joinOrganization,
1608
- getOrganizationUsers,
1609
- addOrganizationUser,
1610
- removeOrganizationUser,
1611
- getOrganizationProjectsUsers,
1612
- getOrganizationInvitations,
1613
- getOrganizationInvitation,
1614
- createOrganizationInvitation,
1615
- deleteOrganizationInvitation,
1616
- getOrganizationProjects,
1617
- createOrganizationProject,
1618
- getOrganizationMetadata,
1619
- setOrganizationMetadata,
1620
- deleteOrganizationMetadata
1621
- };
1622
- };
1623
-
1624
- // src/clients/management/projects/projects.ts
1625
- var createProjects = (client) => {
1626
- const getProject = async (projectId, signal) => {
1627
- const { data } = await client.get(
1628
- "/projects/{projectId}",
1629
- { path: { projectId } },
1630
- { signal }
1631
- );
1632
- return data;
1633
- };
1634
- const addProjectFeature = async ({
1635
- projectId,
1636
- feature
1637
- }) => {
1638
- const { data } = await client.post("/projects/{projectId}/features", { path: { projectId }, body: { feature } });
1639
- return data;
1640
- };
1641
- const removeProjectFeature = async (path) => {
1642
- const { data } = await client.delete(
1643
- "/projects/{projectId}/features/{feature}",
1644
- { path }
1645
- );
1646
- return data;
1647
- };
1648
- const changeProjectUserRole = async ({
1649
- projectId,
1650
- userId,
1651
- role
1652
- }) => {
1653
- const { data } = await client.patch("/projects/{projectId}/users/{userId}", {
1654
- path: { projectId, userId },
1655
- body: { role }
1656
- });
1657
- return data;
1658
- };
1659
- const getProjectUsers = async (projectId, signal) => {
1660
- const { data } = await client.get(
1661
- "/projects/{projectId}/users",
1662
- { path: { projectId } },
1663
- { signal }
1664
- );
1665
- return data;
1666
- };
1667
- const getProjectMetadata = async (projectId, signal) => {
1668
- const { data } = await client.get(
1669
- "/projects/{projectId}/metadata",
1670
- { path: { projectId } },
1671
- { signal }
1672
- );
1673
- return data;
1674
- };
1675
- const setProjectMetadata = async ({
1676
- projectId,
1677
- provider,
1678
- metadata
1679
- }) => {
1680
- const { data } = await client.post("/projects/{projectId}/metadata", {
1681
- path: { projectId },
1682
- body: { provider, metadata }
1683
- });
1684
- return data;
1685
- };
1686
- const getProjectReviewers = async (projectId, signal) => {
1687
- const { data } = await client.get(
1688
- "/projects/{projectId}/reviewers",
1689
- { path: { projectId } },
1690
- { signal }
1691
- );
1692
- return data;
1693
- };
1694
- const setProjectReviewers = async ({
1695
- projectId,
1696
- adminIds
1697
- }) => {
1698
- const { data } = await client.put("/projects/{projectId}/reviewers", {
1699
- path: { projectId },
1700
- body: { adminIds }
1701
- });
1702
- return data;
1703
- };
1704
- return {
1705
- getProject,
1706
- addProjectFeature,
1707
- removeProjectFeature,
1708
- changeProjectUserRole,
1709
- getProjectUsers,
1710
- getProjectMetadata,
1711
- setProjectMetadata,
1712
- getProjectReviewers,
1713
- setProjectReviewers
1714
- };
1715
- };
1716
-
1717
- // src/clients/management/users/users.ts
1718
- var createUsers = (client) => {
1719
- const addUserAdminFeature = async ({ feature, userIdOrMail }, signal) => {
1720
- const { data } = await client.post(
1721
- "/users/{userIdOrMail}/features",
1722
- { path: { userIdOrMail: encodeURIComponent(userIdOrMail) }, body: { feature } },
1723
- { signal }
1724
- );
1725
- return data;
1726
- };
1727
- const removeUserAdminFeature = async ({ userIdOrMail, feature }, signal) => {
1728
- const { data } = await client.delete(
1729
- "/users/{userIdOrMail}/features/{feature}",
1730
- { path: { userIdOrMail: encodeURIComponent(userIdOrMail), feature } },
1731
- { signal }
1732
- );
1733
- return data;
1734
- };
1735
- return {
1736
- addUserAdminFeature,
1737
- removeUserAdminFeature
1738
- };
1739
- };
1740
-
1741
- // src/clients/management/managementClient.ts
1742
- var createManagementClient = ({
1743
- baseUrl,
1744
- callbacks,
1745
- token
1746
- }) => {
1747
- const callbackMiddleware = createCallbackMiddleware(callbacks);
1748
- const authMiddleware = createAuthMiddleware({
1749
- baseUrl,
1750
- accessToken: token
1751
- });
1752
- const middlewares = [
1753
- callbackMiddleware,
1754
- authMiddleware
1755
- // 👈 beware order of middlewares always matter
1756
- ];
1757
- const client = createGenericFetchClient({
1758
- baseUrl: `${baseUrl}/manage`,
1759
- middlewares
1760
- });
1761
- const openApiClient = createOpenapiFetchClient({
1762
- baseUrl,
1763
- middlewares
1764
- });
1765
- const verifyToken = async (signal) => {
1766
- const { data } = await openApiClient.get("/manage/tokens/verify", {}, { signal });
1767
- return data;
1768
- };
1769
- return {
1770
- currentUser: createCurrentUser(openApiClient),
1771
- features: createFeatures(client),
1772
- maintainers: createMaintainers(openApiClient),
1773
- organizations: createOrganizations(openApiClient),
1774
- projects: createProjects(client),
1775
- users: createUsers(client),
1776
- verifyToken
1777
- };
1778
- };
1779
-
1780
- // src/clients/metastore/repository/repository.ts
1781
- var createRepository = (client) => {
1782
- const getMetaObjects = async (input, signal) => {
1783
- const { data } = await client.get(
1784
- "/api/v1/repository/{objectType}",
1785
- {
1786
- path: input
1787
- },
1788
- { signal }
1789
- );
1790
- return data;
1791
- };
1792
- const getMetaObjectRevisions = async (input, signal) => {
1793
- const { data } = await client.get(
1794
- "/api/v1/repository/{objectType}/revisions",
1795
- {
1796
- path: input
1797
- },
1798
- { signal }
1799
- );
1800
- return data;
1801
- };
1802
- const getMetaObject = async (input, signal) => {
1803
- const { data } = await client.get(
1804
- "/api/v1/repository/{objectType}/{UUID}",
1805
- {
1806
- path: input
1807
- },
1808
- {
1809
- signal
1810
- }
1811
- );
1812
- return data;
1813
- };
1814
- const createMetaObject = async ({
1815
- objectType,
1816
- data,
1817
- ...body
1818
- }) => {
1819
- const { data: createdMetaObject } = await client.post("/api/v1/repository/{objectType}", {
1820
- path: { objectType },
1821
- body: {
1822
- data,
1823
- ...body
1824
- }
1825
- });
1826
- return createdMetaObject;
1827
- };
1828
- const deleteMetaObject = async (input) => {
1829
- const { data } = await client.delete("/api/v1/repository/{objectType}/{UUID}", {
1830
- path: input
1831
- });
1832
- return data;
1833
- };
1834
- const updateMetaObject = async ({
1835
- objectType,
1836
- UUID,
1837
- data,
1838
- ...body
1839
- }) => {
1840
- const { data: updatedMetaObject } = await client.patch(
1841
- "/api/v1/repository/{objectType}/{UUID}",
1842
- {
1843
- path: {
1844
- objectType,
1845
- UUID
1846
- },
1847
- body: {
1848
- data,
1849
- ...body
1850
- }
1851
- }
1852
- );
1853
- return updatedMetaObject;
1854
- };
1855
- const replaceMetaObject = async ({
1856
- objectType,
1857
- UUID,
1858
- data,
1859
- ...body
1860
- }) => {
1861
- const { data: replacedMetaObject } = await client.put(
1862
- "/api/v1/repository/{objectType}/{UUID}",
1863
- {
1864
- path: {
1865
- objectType,
1866
- UUID
1867
- },
1868
- body: {
1869
- data,
1870
- ...body
1871
- }
1872
- }
1873
- );
1874
- return replacedMetaObject;
1875
- };
1876
- const getMetaObjectRevision = async (input, signal) => {
1877
- const { data } = await client.get(
1878
- "/api/v1/repository/{objectType}/{UUID}/revisions/{revision}",
1879
- {
1880
- path: input
1881
- },
1882
- { signal }
1883
- );
1884
- return data;
1885
- };
1886
- const deleteMetaObjectRevision = async (input) => {
1887
- const { data } = await client.delete(
1888
- "/api/v1/repository/{objectType}/{UUID}/revisions/{revision}",
1889
- {
1890
- path: input
1891
- }
1892
- );
1893
- return data;
1894
- };
1895
- return {
1896
- // lists
1897
- getMetaObjects,
1898
- getMetaObjectRevisions,
1899
- // objects
1900
- getMetaObject,
1901
- createMetaObject,
1902
- deleteMetaObject,
1903
- updateMetaObject,
1904
- replaceMetaObject,
1905
- // revisons
1906
- getMetaObjectRevision,
1907
- deleteMetaObjectRevision
1908
- };
1909
- };
1910
-
1911
- // src/clients/metastore/schema/schema.ts
1912
- var createSchema = (client) => {
1913
- const getSchema = async (input, signal) => {
1914
- const { data } = await client.get(
1915
- "/api/v1/schema/{objectType}",
1916
- {
1917
- path: input
1918
- },
1919
- { signal }
1920
- );
1921
- return data;
1922
- };
1923
- const getVersionedSchema = async (input, signal) => {
1924
- const { data } = await client.get(
1925
- "/api/v1/schema/{objectType}/{version}",
1926
- {
1927
- path: input
1928
- },
1929
- { signal }
1930
- );
1931
- return data;
1932
- };
1933
- return {
1934
- getSchema,
1935
- getVersionedSchema
1936
- };
1937
- };
1938
-
1939
- // src/clients/metastore/metastoreClient.ts
1940
- var createMetastoreClient = ({ baseUrl, middlewares }) => {
1941
- const client = createOpenapiFetchClient({
1942
- baseUrl,
1943
- middlewares
1944
- });
1945
- const healthCheck = async (signal) => {
1946
- const { data } = await client.get("/health-check", {}, { signal });
1947
- return data;
1948
- };
1949
- return {
1950
- healthCheck,
1951
- repository: createRepository(client),
1952
- schema: createSchema(client)
1953
- };
1954
- };
1955
-
1956
- // src/clients/oauth/oauthClient.ts
1957
- var createOauthClient = ({ baseUrl, middlewares }) => {
1958
- const client = createGenericFetchClient({ baseUrl, middlewares });
1959
- const getCredentials = async (query, signal) => {
1960
- const { data } = await client.get(
1961
- "/credentials",
1962
- { query },
1963
- { signal }
1964
- );
1965
- return data;
1966
- };
1967
- const getCredential = async (componentId, id, signal) => {
1968
- const { data } = await client.get(
1969
- "/credentials/{componentId}/{id}",
1970
- { path: { componentId, id } },
1971
- { signal }
1972
- );
1973
- return data;
1974
- };
1975
- const _createCredentials = async (componentId, body, signal) => {
1976
- const { data } = await client.post(
1977
- "/credentials/{componentId}",
1978
- { path: { componentId }, body },
1979
- { signal }
1980
- );
1981
- return data;
1982
- };
1983
- const _createLegacyCredentials = async (componentId, { data: credentialsData, ...rest }, signal) => {
1984
- const { data } = await client.post(
1985
- "/credentials/{componentId}",
1986
- {
1987
- path: { componentId },
1988
- body: {
1989
- ...rest,
1990
- "#data": JSON.stringify(credentialsData)
1991
- }
1992
- },
1993
- { signal }
1994
- );
1995
- return data;
1996
- };
1997
- const createCredential = async (componentId, body, signal) => {
1998
- try {
1999
- return await _createCredentials(componentId, body, signal);
2000
- } catch (error) {
2001
- if (isApiError(error) && error.response.status === HttpStatus.UNPROCESSABLE_ENTITY) {
2002
- return _createLegacyCredentials(componentId, body, signal);
2003
- }
2004
- throw error;
2005
- }
2006
- };
2007
- const deleteCredential = async (componentId, id, signal) => {
2008
- await client.delete(
2009
- "/credentials/{componentId}/{id}",
2010
- { path: { componentId, id } },
2011
- { signal }
2012
- );
2013
- };
2014
- return {
2015
- getCredentials,
2016
- getCredential,
2017
- createCredential,
2018
- deleteCredential
2019
- };
2020
- };
2021
-
2022
- // src/clients/queryService/queryServiceClient.ts
2023
- var createQueryServiceClient = ({ baseUrl, middlewares }) => {
2024
- const client = createOpenapiFetchClient({
2025
- baseUrl,
2026
- middlewares
2027
- });
2028
- const createQueryJob = async (branchId, workspaceId, body) => {
2029
- const { data } = await client.post(
2030
- "/api/v1/branches/{branchId}/workspaces/{workspaceId}/queries",
2031
- { path: { branchId, workspaceId }, body }
2032
- );
2033
- return data;
2034
- };
2035
- const cancelQueryJob = async (queryJobId) => {
2036
- const { data } = await client.post("/api/v1/queries/{queryJobId}/cancel", {
2037
- path: { queryJobId },
2038
- body: { reason: "Cancelled by user" }
2039
- });
2040
- return data;
2041
- };
2042
- const getQueryJob = async (queryJobId) => {
2043
- const { data } = await client.get("/api/v1/queries/{queryJobId}", { path: { queryJobId } });
2044
- return data;
2045
- };
2046
- const getQueryResults = async (queryJobId, statementId, query) => {
2047
- const { data } = await client.get("/api/v1/queries/{queryJobId}/{statementId}/results", {
2048
- path: { queryJobId, statementId },
2049
- query
2050
- });
2051
- return data;
2052
- };
2053
- const getQueryHistory = async (branchId, workspaceId, query) => {
2054
- const { data } = await client.get(
2055
- "/api/v1/branches/{branchId}/workspaces/{workspaceId}/queries",
2056
- {
2057
- path: { branchId, workspaceId },
2058
- query
2059
- }
2060
- );
2061
- return data;
2062
- };
2063
- const exportResults = async (queryJobId, statementId, query, signal) => {
2064
- const { data, response } = await client.get(
2065
- "/api/v1/queries/{queryJobId}/{statementId}/export",
2066
- {
2067
- path: { queryJobId, statementId },
2068
- query
2069
- },
2070
- { signal }
2071
- );
2072
- const mimeType = response.headers.get(HttpHeader.CONTENT_TYPE) ?? "text/csv";
2073
- const contentDisposition = parseContentDispositionHeader(
2074
- response.headers.get(HttpHeader.CONTENT_DISPOSITION)
2075
- );
2076
- return {
2077
- mimeType,
2078
- content: data,
2079
- fileName: contentDisposition?.filename ?? "export.csv"
2080
- };
2081
- };
2082
- return {
2083
- createQueryJob,
2084
- cancelQueryJob,
2085
- getQueryJob,
2086
- getQueryResults,
2087
- getQueryHistory,
2088
- exportResults
2089
- };
2090
- };
2091
-
2092
- // src/clients/queue/queueClient.ts
2093
- var createQueueClient = ({ baseUrl, middlewares }) => {
2094
- const client = createOpenapiFetchClient({
2095
- baseUrl,
2096
- middlewares
2097
- });
2098
- const getJob = async (jobId, signal) => {
2099
- const { data } = await client.get(
2100
- "/jobs/{jobId}",
2101
- {
2102
- path: { jobId }
2103
- },
2104
- { signal }
2105
- );
2106
- return data;
2107
- };
2108
- const searchJobs = async (query, signal) => {
2109
- const { data } = await client.get(
2110
- "/search/jobs",
2111
- {
2112
- query
2113
- },
2114
- { signal }
2115
- );
2116
- return data;
2117
- };
2118
- return { getJob, searchJobs };
2119
- };
2120
-
2121
- // src/clients/status/statusClient.ts
2122
- var createStatusClient = ({ baseUrl, middlewares }) => {
2123
- const client = createGenericFetchClient({
2124
- baseUrl,
2125
- middlewares
2126
- });
2127
- const getSummary = async (signal) => {
2128
- const { data } = await client.get("/summary.json", {}, { signal });
2129
- return data;
2130
- };
2131
- return {
2132
- getSummary
2133
- };
2134
- };
2135
-
2136
- // src/clients/storage/configurationVersions/configurationVersions.ts
2137
- var createConfigurationVersions = (client) => {
2138
- const listConfigurationVersions = async ({ branchId, componentId, configId }, signal) => {
2139
- const { data } = await client.get(
2140
- "/branch/{branchId}/components/{componentId}/configs/{configId}/versions",
2141
- { path: { branchId, componentId, configId } },
2142
- { signal }
2143
- );
2144
- return data;
2145
- };
2146
- const getConfigurationVersion = async ({ branchId, componentId, configId, versionId }, signal) => {
2147
- const { data } = await client.get(
2148
- "/branch/{branchId}/components/{componentId}/configs/{configId}/versions/{versionId}",
2149
- { path: { branchId, componentId, configId, versionId } },
2150
- { signal }
2151
- );
2152
- return data;
2153
- };
2154
- return {
2155
- listConfigurationVersions,
2156
- getConfigurationVersion
2157
- };
2158
- };
2159
-
2160
- // src/clients/storage/mergeRequests/mergeRequests.ts
2161
- var createMergeRequests = (client) => {
2162
- const getMergeRequests = async (signal) => {
2163
- const { data } = await client.get("/v2/storage/merge-request", {}, { signal });
2164
- return data;
2165
- };
2166
- const getMergeRequest = async (id, signal) => {
2167
- const { data } = await client.get(
2168
- "/v2/storage/merge-request/{id}",
2169
- { path: { id } },
2170
- { signal }
2171
- );
2172
- return data;
2173
- };
2174
- const getMergeRequestWithActivityLog = async (id, signal) => {
2175
- const { data } = await client.get(
2176
- "/v2/storage/merge-request/{id}",
2177
- { path: { id }, query: { include: "activityLog" } },
2178
- { signal }
2179
- );
2180
- return data;
2181
- };
2182
- const createMergeRequest = async (params) => {
2183
- const { data } = await client.post("/v2/storage/merge-request", { body: params });
2184
- return data;
2185
- };
2186
- const updateMergeRequest = async (id, params) => {
2187
- const { data } = await client.put("/v2/storage/merge-request/{id}", {
2188
- path: { id },
2189
- body: params
2190
- });
2191
- return data;
2192
- };
2193
- const requestReview = async (id) => {
2194
- const { data } = await client.put("/v2/storage/merge-request/{id}/request-review", {
2195
- path: { id }
2196
- });
2197
- return data;
2198
- };
2199
- const approveMergeRequest = async (id) => {
2200
- const { data } = await client.put("/v2/storage/merge-request/{id}/approve", {
2201
- path: { id }
2202
- });
2203
- return data;
2204
- };
2205
- const requestChangesMergeRequest = async (id, reason) => {
2206
- const { data } = await client.put("/v2/storage/merge-request/{id}/request-changes", {
2207
- path: { id },
2208
- body: reason ? { reason } : void 0
2209
- });
2210
- return data;
2211
- };
2212
- const getMergeRequestConflicts = async (id, signal) => {
2213
- const { data } = await client.get(
2214
- "/v2/storage/merge-request/{id}/conflicts",
2215
- { path: { id } },
2216
- { signal }
2217
- );
2218
- return data;
2219
- };
2220
- return {
2221
- getMergeRequests,
2222
- getMergeRequest,
2223
- getMergeRequestWithActivityLog,
2224
- createMergeRequest,
2225
- updateMergeRequest,
2226
- requestReview,
2227
- approveMergeRequest,
2228
- requestChangesMergeRequest,
2229
- getMergeRequestConflicts
2230
- };
2231
- };
2232
-
2233
- // src/clients/storage/branches/mappers.ts
2234
- var mapBranchMetadata = (data) => ({
2235
- ...data,
2236
- timestamp: new Date(data.timestamp)
2237
- });
2238
-
2239
- // src/clients/storage/branches/branches.ts
2240
- var createBranches = (client) => {
2241
- const getDevBranches = async (signal) => {
2242
- const { data } = await client.get("/dev-branches", {}, { signal });
2243
- return data;
2244
- };
2245
- const createDevBranchJob = async (body) => {
2246
- const { data } = await client.post(
2247
- "/dev-branches",
2248
- {
2249
- body
2250
- }
2251
- );
2252
- return data;
2253
- };
2254
- const updateDevBranch = async ({
2255
- id,
2256
- name,
2257
- description
2258
- }) => {
2259
- const { data } = await client.put(
2260
- "/dev-branches/{id}",
2261
- {
2262
- path: { id },
2263
- body: {
2264
- name,
2265
- description
2266
- }
2267
- }
2268
- );
2269
- return data;
2270
- };
2271
- const deleteDevBranchJob = async (id) => {
2272
- const { data } = await client.delete(
2273
- "/dev-branches/{id}",
2274
- {
2275
- path: { id }
2276
- }
2277
- );
2278
- return data;
2279
- };
2280
- const getDevBranchMetadata = async (id, signal) => {
2281
- const { data } = await client.get(
2282
- "/branch/{id}/metadata",
2283
- { path: { id } },
2284
- { signal }
2285
- );
2286
- return data.map(mapBranchMetadata);
2287
- };
2288
- const saveDevBranchMetadata = async (id, metadata, signal) => {
2289
- const { data } = await client.post("/branch/{id}/metadata", { path: { id }, body: { metadata } }, { signal });
2290
- return data.map(mapBranchMetadata);
2291
- };
2292
- const deleteDevBranchMetadata = async (id, metadataId, signal) => {
2293
- await client.delete(
2294
- "/branch/{id}/metadata/{metadataId}",
2295
- { path: { id, metadataId } },
2296
- { signal }
2297
- );
2298
- };
2299
- return {
2300
- getDevBranches,
2301
- createDevBranchJob,
2302
- updateDevBranch,
2303
- deleteDevBranchJob,
2304
- getDevBranchMetadata,
2305
- saveDevBranchMetadata,
2306
- deleteDevBranchMetadata
2307
- };
2308
- };
2309
-
2310
- // src/clients/storage/buckets/buckets.ts
2311
- var createBuckets = (client) => {
2312
- const getBuckets = async (query = {}, signal) => {
2313
- const { data } = await client.get(
2314
- `/buckets`,
2315
- { query },
2316
- { signal, queryArrayFormat: "comma" }
2317
- );
2318
- return data;
2319
- };
2320
- const getBucket = async (id, signal) => {
2321
- const { data } = await client.get(
2322
- `/buckets/{id}`,
2323
- { path: { id } },
2324
- { signal }
2325
- );
2326
- return data;
2327
- };
2328
- const createBucket = async (body) => {
2329
- const { data } = await client.post(`/buckets`, {
2330
- body
2331
- });
2332
- return data;
2333
- };
2334
- const updateBucket = async (id, body) => {
2335
- const { data } = await client.patch(
2336
- `/buckets/{id}`,
2337
- { path: { id }, body }
2338
- );
2339
- return data;
2340
- };
2341
- const deleteBucket = async (id) => {
2342
- await client.delete(`/buckets/{id}`, { path: { id } });
2343
- };
2344
- const deleteBucketAsync = async (id, options = {}) => {
2345
- const { data } = await client.delete(`/buckets/{id}`, { path: { id }, query: { async: true, ...options } });
2346
- return data;
2347
- };
2348
- const createScheduledRefresh = async (input) => {
2349
- const { branchId, bucketId, cronExpression } = input;
2350
- const { data } = await client.post(`/branch/{branchId}/buckets/{bucketId}/scheduled-tasks/refresh`, {
2351
- path: { branchId, bucketId },
2352
- body: { cronExpression }
2353
- });
2354
- return data;
2355
- };
2356
- const deleteScheduledTask = async (taskId) => {
2357
- await client.delete(`/scheduled-tasks/{taskId}`, {
2358
- path: { taskId }
2359
- });
2360
- };
2361
- return {
2362
- getBuckets,
2363
- getBucket,
2364
- createBucket,
2365
- updateBucket,
2366
- deleteBucket,
2367
- deleteBucketAsync,
2368
- createScheduledRefresh,
2369
- deleteScheduledTask
2370
- };
2371
- };
2372
-
2373
- // src/utils/assert.ts
2374
- function assert(value, message2) {
2375
- if (value == null) {
2376
- throw new Error(message2);
2377
- }
2378
- }
2379
-
2380
- // src/utils/concurrent.ts
2381
- var concurrent = async ({
2382
- items,
2383
- process: process2,
2384
- concurrency = 2,
2385
- middlewares = []
2386
- }) => {
2387
- if (concurrency < 1) throw new Error("Concurrency must be greater than 0");
2388
- if (items.length === 0) return [];
2389
- if (concurrency === Infinity)
2390
- return Promise.all(items.map((item, index) => process2(item, index, items.length)));
2391
- const n = items.length;
2392
- const results = new Array(n);
2393
- const processWithMiddlewares = middlewares.reduceRight(
2394
- (next, middleware) => middleware(next),
2395
- process2
2396
- );
2397
- const queue = items.map((item, index) => async () => {
2398
- results[index] = await processWithMiddlewares(item, index, items.length);
2399
- });
2400
- const workers = Array.from(
2401
- { length: Math.min(concurrency, items.length) },
2402
- async function processQueue() {
2403
- while (queue.length) {
2404
- await queue.shift()?.();
2405
- }
2406
- }
2407
- );
2408
- await Promise.all(workers);
2409
- return results;
2410
- };
2411
-
2412
- // src/utils/createAbortError.ts
2413
- var createAbortError = (reason) => new DOMException(reason, "AbortError");
2414
-
2415
- // src/utils/delay.ts
2416
- var delay = (timeout, signal) => new Promise((resolve, reject) => {
2417
- if (signal?.aborted) return reject(createAbortError(signal.reason));
2418
- const timeoutId = setTimeout(resolve, timeout);
2419
- signal?.addEventListener(
2420
- "abort",
2421
- () => {
2422
- clearTimeout(timeoutId);
2423
- reject(createAbortError(signal.reason));
2424
- },
2425
- { once: true }
2426
- );
2427
- });
2428
-
2429
- // src/utils/poll.ts
2430
- var message = {
2431
- PollPredicateError: "Poll predicate failed",
2432
- PollTimeoutError: "Poll timeout exceeded",
2433
- PollPollTimeoutError: "Poll data failed condition"
2434
- };
2435
- var PollException = class extends Error {
2436
- result;
2437
- constructor(type, result) {
2438
- super(type, { cause: message[type] });
2439
- this.result = result;
2440
- }
2441
- };
2442
- var poll = async ({
2443
- pollFn,
2444
- interval,
2445
- isDone,
2446
- isFailed,
2447
- abortSignal,
2448
- maxAttempts = Infinity
2449
- }) => {
2450
- if (abortSignal?.aborted) throw createAbortError(abortSignal.reason);
2451
- if (interval < 1) throw new Error("Invalid poll interval");
2452
- if (maxAttempts < 1) throw new Error("Invalid poll maxAttempts");
2453
- let callCount = 0;
2454
- while (true) {
2455
- callCount++;
2456
- const data = await pollFn(abortSignal);
2457
- const result = { data, callCount };
2458
- try {
2459
- if (isDone(data)) return result;
2460
- if (isFailed?.(data) ?? false) throw new PollException("PollPollTimeoutError", result);
2461
- } catch (error) {
2462
- if (error instanceof PollException) throw error;
2463
- throw new PollException("PollPredicateError", result);
2464
- }
2465
- if (callCount >= maxAttempts) throw new PollException("PollTimeoutError", result);
2466
- await delay(interval, abortSignal);
2467
- }
2468
- };
2469
-
2470
- // src/utils/keboolaUID.ts
2471
- var KEBOOLA_OBJECT_ID_DELIMITER = "--";
2472
- var keboolaUID = {
2473
- serialize: (input) => {
2474
- if (input.uid === "")
2475
- throw new Error("Invalid Keboola Object ID: uid of an object cannot be empty");
2476
- return ["KID", input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);
2477
- },
2478
- deserialize: (input) => {
2479
- const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);
2480
- if (identifier !== "KID" || !projectId || !type || !uid)
2481
- throw new Error("Invalid Keboola Object ID");
2482
- return {
2483
- projectId: Number(projectId),
2484
- type,
2485
- uid
2486
- };
2487
- }
2488
- };
2489
-
2490
- // src/utils/generateUUID.ts
2491
- var generateUUID = () => crypto.randomUUID();
2492
-
2493
- // src/utils/series.ts
2494
- var series = async (options) => concurrent({
2495
- ...options,
2496
- concurrency: 1
2497
- });
2498
-
2499
- // src/clients/storage/componentsAndConfigurations/componentsAndConfigurations.ts
2500
- var createComponentsAndConfigurations = (client) => {
2501
- const getComponent = async ({ componentId, branchId = "default" }, signal) => {
2502
- const { data } = await client.get(
2503
- "/branch/{branchId}/components/{componentId}",
2504
- { path: { componentId, branchId } },
2505
- { signal }
2506
- );
2507
- return data;
2508
- };
2509
- const getComponents = async ({ branchId = "default", ...query } = {}, signal) => {
2510
- const { data } = await client.get(
2511
- "/branch/{branchId}/components",
2512
- { path: { branchId }, query },
2513
- { signal, queryArrayFormat: "comma" }
2514
- );
2515
- return data;
2516
- };
2517
- const getConfiguration = async ({ componentId, configId, branchId = "default" }, signal) => {
2518
- const { data } = await client.get(
2519
- "/branch/{branchId}/components/{componentId}/configs/{configId}",
2520
- { path: { componentId, configId, branchId } },
2521
- { signal }
2522
- );
2523
- return data;
2524
- };
2525
- const createConfiguration = async ({
2526
- branchId = "default",
2527
- componentId,
2528
- ...body
2529
- }) => {
2530
- const { data } = await client.post("/branch/{branchId}/components/{componentId}/configs", {
2531
- path: { branchId, componentId },
2532
- body
2533
- });
2534
- return data;
2535
- };
2536
- const deleteConfiguration = async (path) => {
2537
- await client.delete(
2538
- "/branch/{branchId}/components/{componentId}/configs/{configId}",
2539
- { path }
2540
- );
2541
- };
2542
- const deleteConfigurations = async ({
2543
- configIds,
2544
- ...rest
2545
- }) => {
2546
- await concurrent({
2547
- items: configIds,
2548
- process: async (configId) => deleteConfiguration({ ...rest, configId })
2549
- });
2550
- };
2551
- const getConfigurations = async ({ componentId, branchId = "default" }, signal) => {
2552
- const { data } = await client.get(
2553
- "/branch/{branchId}/components/{componentId}/configs",
2554
- { path: { componentId, branchId } },
2555
- { signal }
2556
- );
2557
- return data;
2558
- };
2559
- const getConfigurationWorkspaces = async ({
2560
- componentId,
2561
- branchId,
2562
- configId
2563
- }) => {
2564
- const { data } = await client.get(
2565
- "/branch/{branchId}/components/{componentId}/configs/{configId}/workspaces",
2566
- {
2567
- path: { componentId, branchId, configId }
2568
- }
2569
- );
2570
- return data;
2571
- };
2572
- const createConfigurationWorkspace = async ({
2573
- componentId,
2574
- branchId,
2575
- configId,
2576
- ...body
2577
- }) => {
2578
- const { data } = await client.post("/branch/{branchId}/components/{componentId}/configs/{configId}/workspaces", {
2579
- path: { componentId, branchId, configId },
2580
- body
2581
- });
2582
- return data;
2583
- };
2584
- const createConfigurationWorkspaceJob = async ({
2585
- componentId,
2586
- branchId,
2587
- configId,
2588
- ...body
2589
- }) => {
2590
- const { data } = await client.post("/branch/{branchId}/components/{componentId}/configs/{configId}/workspaces", {
2591
- path: { componentId, branchId, configId },
2592
- body,
2593
- query: { async: true }
2594
- });
2595
- return data;
2596
- };
2597
- const createConfigurationRow = async ({
2598
- branchId = "default",
2599
- componentId,
2600
- configId,
2601
- ...body
2602
- }) => {
2603
- const { data } = await client.post("/branch/{branchId}/components/{componentId}/configs/{configId}/rows", {
2604
- path: { branchId, componentId, configId },
2605
- body
2606
- });
2607
- return data;
2608
- };
2609
- const createConfigurationRows = async ({
2610
- branchId = "default",
2611
- componentId,
2612
- configId,
2613
- data
2614
- }, options) => {
2615
- return series({
2616
- items: data,
2617
- process: (rowBody) => {
2618
- return createConfigurationRow({
2619
- branchId,
2620
- componentId,
2621
- configId,
2622
- ...rowBody
2623
- });
2624
- },
2625
- middlewares: options?.middlewares
2626
- });
2627
- };
2628
- const deleteConfigurationRow = async ({
2629
- changeDescription,
2630
- ...path
2631
- }) => {
2632
- await client.delete(
2633
- "/branch/{branchId}/components/{componentId}/configs/{configId}/rows/{rowId}",
2634
- {
2635
- path,
2636
- body: { changeDescription }
2637
- }
2638
- );
2639
- };
2640
- const deleteConfigurationRows = async ({ rowIds, changeDescription, ...input }, options) => {
2641
- await concurrent({
2642
- items: rowIds,
2643
- process: (rowId) => {
2644
- const resolvedDescription = typeof changeDescription === "string" ? changeDescription : changeDescription?.(rowId);
2645
- return deleteConfigurationRow({
2646
- rowId,
2647
- changeDescription: resolvedDescription,
2648
- ...input
2649
- });
2650
- },
2651
- concurrency: 5,
2652
- middlewares: options?.middlewares
2653
- });
2654
- };
2655
- const searchComponentConfigurations = async ({ branchId = "default" } = {}, query, signal) => {
2656
- const { data } = await client.get(
2657
- "/branch/{branchId}/search/component-configurations",
2658
- { path: { branchId }, query },
2659
- { signal, queryArrayFormat: "comma" }
2660
- );
2661
- return data;
2662
- };
2663
- return {
2664
- // components
2665
- getComponent,
2666
- getComponents,
2667
- searchComponentConfigurations,
2668
- // configurations
2669
- createConfiguration,
2670
- getConfiguration,
2671
- deleteConfiguration,
2672
- deleteConfigurations,
2673
- getConfigurations,
2674
- // configuration's rows
2675
- createConfigurationRow,
2676
- createConfigurationRows,
2677
- deleteConfigurationRow,
2678
- deleteConfigurationRows,
2679
- // configuration's workspaces
2680
- createConfigurationWorkspace,
2681
- createConfigurationWorkspaceJob,
2682
- getConfigurationWorkspaces
2683
- };
2684
- };
2685
-
2686
- // src/clients/storage/events/events.ts
2687
- var createEvents = (client) => {
2688
- const getEvents = async (query, signal) => {
2689
- const { data } = await client.get(
2690
- "/events",
2691
- { query },
2692
- { signal }
2693
- );
2694
- return data;
2695
- };
2696
- const getEvent = async (eventId, signal) => {
2697
- const { data } = await client.get(
2698
- "/events/{eventId}",
2699
- {
2700
- path: { eventId }
2701
- },
2702
- { signal }
2703
- );
2704
- return data;
2705
- };
2706
- const createEvent = async (body, signal) => {
2707
- const { data } = await client.post(
2708
- "/events",
2709
- {
2710
- body
2711
- },
2712
- { signal }
2713
- );
2714
- return data;
2715
- };
2716
- return {
2717
- getEvents,
2718
- getEvent,
2719
- createEvent
2720
- };
2721
- };
2722
-
2723
- // src/clients/storage/files/files.ts
2724
- var createFiles = (client) => {
2725
- const getFile = async (fileId, signal) => {
2726
- const { data } = await client.get(
2727
- `/files/{fileId}`,
2728
- {
2729
- path: { fileId }
2730
- },
2731
- { signal }
2732
- );
2733
- return data;
2734
- };
2735
- const getFiles = async (query, signal) => {
2736
- const { data } = await client.get(
2737
- "/files",
2738
- { query },
2739
- { signal, queryArrayFormat: "brackets" }
2740
- );
2741
- return data;
2742
- };
2743
- const deleteFile = async (fileId) => {
2744
- const { data } = await client.delete(`/files/{fileId}`, {
2745
- path: { fileId }
2746
- });
2747
- return data;
2748
- };
2749
- const addFileTag = async (fileId, tag) => {
2750
- const { data } = await client.post(
2751
- `/files/{fileId}/tags`,
2752
- {
2753
- path: { fileId },
2754
- body: { tag }
2755
- }
2756
- );
2757
- return data;
2758
- };
2759
- const getFileContent = async (fileId, signal) => {
2760
- const { data } = await client.get(
2761
- `/files/{fileId}/content`,
2762
- {
2763
- path: { fileId }
2764
- },
2765
- { signal }
2766
- );
2767
- return typeof data === "string" ? data : JSON.stringify(data, null, 2);
2768
- };
2769
- const deleteFileTag = async (fileId, tag) => {
2770
- const { data } = await client.delete(
2771
- "/files/{fileId}/tags/{tag}",
2772
- {
2773
- path: { fileId, tag }
2774
- }
2775
- );
2776
- return data;
2777
- };
2778
- const prepareFile = async (body, signal) => {
2779
- const { data } = await client.post(
2780
- "/files/prepare",
2781
- { body },
2782
- { signal }
2783
- );
2784
- return data;
2785
- };
2786
- return {
2787
- getFile,
2788
- getFileContent,
2789
- getFiles,
2790
- deleteFile,
2791
- addFileTag,
2792
- deleteFileTag,
2793
- prepareFile
2794
- };
2795
- };
2796
-
2797
- // src/clients/storage/jobs/jobs.ts
2798
- var createJobs = (client) => {
2799
- const getJob = async (id, signal) => {
2800
- const { data } = await client.get(
2801
- `/jobs/{id}`,
2802
- {
2803
- path: { id }
2804
- },
2805
- { signal }
2806
- );
2807
- return data;
2808
- };
2809
- const getJobs = async (query, signal) => {
2810
- const { data } = await client.get(
2811
- "/jobs",
2812
- { query },
2813
- { signal, queryArrayFormat: "brackets" }
2814
- );
2815
- return data;
2816
- };
2817
- return { getJob, getJobs };
2818
- };
2819
-
2820
- // src/clients/storage/tables/tables.ts
2821
- var createTables = (client) => {
2822
- const getTables = async (query = { include: [] }, signal) => {
2823
- const { data } = await client.get(
2824
- `/tables`,
2825
- { query },
2826
- { signal, queryArrayFormat: "comma" }
2827
- );
2828
- return data;
2829
- };
2830
- const getTable = async (id, signal) => {
2831
- const { data } = await client.get(
2832
- `/tables/{id}`,
2833
- { path: { id } },
2834
- { signal }
2835
- );
2836
- return data;
2837
- };
2838
- const deleteTable = async (id, signal) => {
2839
- await client.delete(`/tables/{id}`, { path: { id } }, { signal });
2840
- };
2841
- const deleteTables = async (ids) => {
2842
- await concurrent({
2843
- items: ids,
2844
- process: (id) => deleteTable(id)
2845
- });
2846
- };
2847
- const deleteTableRows = async (id, query, signal) => {
2848
- const { data } = await client.delete(
2849
- `/tables/{id}/rows`,
2850
- { path: { id }, query },
2851
- { signal }
2852
- );
2853
- return data;
2854
- };
2855
- const getDataPreview = async (id, query, signal) => {
2856
- const { data } = await client.get(
2857
- `/tables/{id}/data-preview`,
2858
- { path: { id }, query: { format: "json", ...query } },
2859
- { signal }
2860
- );
2861
- return data;
2862
- };
2863
- const exportAsync = async (tableId, body, signal) => {
2864
- const { data } = await client.post(
2865
- "/tables/{id}/export-async",
2866
- { path: { id: tableId }, body },
2867
- { signal }
2868
- );
2869
- return data;
2870
- };
2871
- const createTableAsync = async (bucketId, body, signal) => {
2872
- const { data } = await client.post("/buckets/{bucketId}/tables-async", { path: { bucketId }, body }, { signal });
2873
- return data;
2874
- };
2875
- const importAsync = async (tableId, body, signal) => {
2876
- const { data } = await client.post(
2877
- "/tables/{id}/import-async",
2878
- { path: { id: tableId }, body },
2879
- { signal }
2880
- );
2881
- return data;
2882
- };
2883
- return {
2884
- getTables,
2885
- getTable,
2886
- getDataPreview,
2887
- deleteTable,
2888
- deleteTables,
2889
- deleteTableRows,
2890
- exportAsync,
2891
- createTableAsync,
2892
- importAsync
2893
- };
2894
- };
2895
-
2896
- // src/clients/storage/tokens/tokens.ts
2897
- var createTokens = (client) => {
2898
- const verify = async (signal) => {
2899
- const { data } = await client.get(
2900
- "/tokens/verify",
2901
- {},
2902
- { signal }
2903
- );
2904
- return data;
2905
- };
2906
- const refresh = async (id, signal) => {
2907
- const { data } = await client.post(
2908
- `/tokens/${id}/refresh`,
2909
- {},
2910
- { signal }
2911
- );
2912
- return data;
2913
- };
2914
- return {
2915
- verify,
2916
- refresh
2917
- };
2918
- };
2919
-
2920
- // src/clients/storage/workspaces/workspaces.ts
2921
- var createWorkspaces = (client) => {
2922
- const getWorkspaces = async (branchId, signal) => {
2923
- const { data } = await client.get(
2924
- "/branch/{branchId}/workspaces",
2925
- { path: { branchId } },
2926
- { signal }
2927
- );
2928
- return data;
2929
- };
2930
- const getWorkspace = async (path, signal) => {
2931
- const { data } = await client.get(
2932
- "/branch/{branchId}/workspaces/{workspaceId}",
2933
- { path },
2934
- { signal }
2935
- );
2936
- return data;
2937
- };
2938
- const deleteWorkspace = async (path) => {
2939
- await client.delete(
2940
- "/branch/{branchId}/workspaces/{workspaceId}",
2941
- { path }
2942
- );
2943
- };
2944
- const deleteWorkspaces = async ({
2945
- workspaceIds,
2946
- branchId
2947
- }) => {
2948
- await concurrent({
2949
- items: workspaceIds,
2950
- process: async (workspaceId) => deleteWorkspace({ branchId, workspaceId }),
2951
- concurrency: 5
2952
- });
2953
- };
2954
- const deleteWorkspaceJob = async (path) => {
2955
- const { data } = await client.delete(
2956
- "/branch/{branchId}/workspaces/{workspaceId}",
2957
- { path, query: { async: true } },
2958
- {}
2959
- );
2960
- return data;
2961
- };
2962
- const resetWorkspacePassword = async ({ branchId, workspaceId }) => {
2963
- const { data } = await client.post(
2964
- "/branch/{branchId}/workspaces/{workspaceId}/password",
2965
- {
2966
- path: { branchId, workspaceId }
2967
- }
2968
- );
2969
- return data;
2970
- };
2971
- const getWorkspaceSaml2Login = async (path, signal) => {
2972
- const { data } = await client.get(
2973
- "/branch/{branchId}/workspaces/{workspaceId}/saml2-login",
2974
- { path },
2975
- { signal }
2976
- );
2977
- return data;
2978
- };
2979
- const setWorkspacePublicKey = async ({
2980
- branchId,
2981
- workspaceId,
2982
- publicKey
2983
- }) => {
2984
- const { data } = await client.post("/branch/{branchId}/workspaces/{workspaceId}/public-key", {
2985
- path: { branchId, workspaceId },
2986
- body: { publicKey }
2987
- });
2988
- return data;
2989
- };
2990
- const getWorkspaceObjects = async (path, signal) => {
2991
- const { data } = await client.get(
2992
- "/branch/{branchId}/workspaces/{workspaceId}/objects",
2993
- { path },
2994
- { signal }
2995
- );
2996
- return data;
2997
- };
2998
- const deleteWorkspaceObjectsAsync = async ({
2999
- branchId,
3000
- workspaceId,
3001
- ...body
3002
- }) => {
3003
- const { data } = await client.post("/branch/{branchId}/workspaces/{workspaceId}/objects/batch-delete", {
3004
- path: { branchId, workspaceId },
3005
- body
3006
- });
3007
- return data;
3008
- };
3009
- return {
3010
- getWorkspace,
3011
- getWorkspaces,
3012
- deleteWorkspace,
3013
- resetWorkspacePassword,
3014
- deleteWorkspaces,
3015
- deleteWorkspaceJob,
3016
- setWorkspacePublicKey,
3017
- getWorkspaceSaml2Login,
3018
- getWorkspaceObjects,
3019
- deleteWorkspaceObjectsAsync
3020
- };
3021
- };
3022
-
3023
- // src/clients/storage/storageClient.ts
3024
- var createStorageClient = ({ baseUrl, middlewares = [] }) => {
3025
- const storageBaseUrl = `${baseUrl}/v2/storage`;
3026
- const client = createGenericFetchClient({
3027
- baseUrl: storageBaseUrl,
3028
- middlewares
3029
- });
3030
- const openApiClient = createOpenapiFetchClient({
3031
- baseUrl,
3032
- middlewares
3033
- });
3034
- const getStackInfo = async (query, signal) => {
3035
- const { data } = await client.get(
3036
- "",
3037
- { query },
3038
- { signal }
3039
- );
3040
- return data;
3041
- };
3042
- return {
3043
- buckets: createBuckets(client),
3044
- events: createEvents(client),
3045
- files: createFiles(client),
3046
- tables: createTables(client),
3047
- branches: createBranches(client),
3048
- workspaces: createWorkspaces(client),
3049
- mergeRequests: createMergeRequests(openApiClient),
3050
- jobs: createJobs(client),
3051
- componentsAndConfigurations: createComponentsAndConfigurations(client),
3052
- configurationVersions: createConfigurationVersions(client),
3053
- tokens: createTokens(client),
3054
- getStackInfo
3055
- };
3056
- };
3057
-
3058
- // src/clients/storage/storageTokenMiddleware.ts
3059
- var isTokenRefreshEndpoint = (request) => {
3060
- const url = new URL(request.url);
3061
- return request.method === "POST" && /\/tokens\/[^/]+\/refresh$/.test(url.pathname);
3062
- };
3063
- var tryParseNewToken = (data) => {
3064
- if (data === null || typeof data !== "object") return null;
3065
- const token = data.token;
3066
- return typeof token === "string" ? token : null;
3067
- };
3068
- var createStorageTokenMiddleware = (initialToken) => {
3069
- let current = initialToken;
3070
- return (next) => async (request) => {
3071
- request.request.headers.set(KeboolaHttpHeader.STORAGE_API_TOKEN, current);
3072
- const response = await next(request);
3073
- if (isTokenRefreshEndpoint(request.request)) {
3074
- const newToken = tryParseNewToken(response.data);
3075
- if (newToken !== null) current = newToken;
3076
- }
3077
- return response;
3078
- };
3079
- };
3080
-
3081
- // src/clients/syncActions/constants.ts
3082
- var SyncAction = {
3083
- DATA_APP_GIT_REPOSITORY: "git-repository",
3084
- GIT_REPOSITORY: "gitRepository",
3085
- ENROLL_MFA: "enrollMFA"
3086
- };
3087
- var Component = {
3088
- DATA_APP: "keboola.data-apps"
3089
- };
3090
- var Author = z5.object({
3091
- name: z5.string(),
3092
- email: z5.email()
3093
- });
3094
- var RepositoryBranch = z5.object({
3095
- sha: z5.string(),
3096
- date: z5.string(),
3097
- comment: z5.string(),
3098
- branch: z5.string(),
3099
- author: Author
3100
- });
3101
- var Repository = z5.object({
3102
- repository: z5.object({
3103
- url: z5.string()
3104
- }),
3105
- branches: z5.array(RepositoryBranch)
3106
- });
3107
-
3108
- // src/clients/syncActions/gitRepository/utils.ts
3109
- var GitRepoConfigDataBuilder = class {
3110
- repositoryUrl;
3111
- config = {};
3112
- constructor(repositoryUrl) {
3113
- this.repositoryUrl = repositoryUrl;
3114
- }
3115
- withCredentials(username, password) {
3116
- this.config.username = username;
3117
- delete this.config["#sshKey"];
3118
- this.config["#password"] = password;
3119
- return this;
3120
- }
3121
- withSshKey(username, sshKey) {
3122
- this.config.username = username;
3123
- delete this.config["#password"];
3124
- this.config["#sshKey"] = sshKey;
3125
- return this;
3126
- }
3127
- build() {
3128
- return {
3129
- parameters: {
3130
- git: {
3131
- repo: this.repositoryUrl,
3132
- ...this.config
3133
- }
3134
- }
3135
- };
3136
- }
3137
- buildForDataApp() {
3138
- return {
3139
- parameters: {
3140
- dataApp: {
3141
- git: {
3142
- repository: this.repositoryUrl,
3143
- ...this.config
3144
- }
3145
- }
3146
- }
3147
- };
3148
- }
3149
- };
3150
- var createGitRepoConfigDataBuilder = (repositoryUrl) => new GitRepoConfigDataBuilder(repositoryUrl);
3151
-
3152
- // src/clients/syncActions/gitRepository/gitRepository.ts
3153
- var createGitRepository = (sendSyncAction) => {
3154
- const getDataAppPublicGitRepository = async ({ repositoryUrl, ...other }, signal) => {
3155
- const data = await sendSyncAction(
3156
- {
3157
- ...other,
3158
- action: SyncAction.DATA_APP_GIT_REPOSITORY,
3159
- componentId: Component.DATA_APP,
3160
- configData: createGitRepoConfigDataBuilder(repositoryUrl).buildForDataApp()
3161
- },
3162
- signal
3163
- );
3164
- return Repository.parse(data);
3165
- };
3166
- const getDataAppPasswordPrivateGitRepository = async ({ repositoryUrl, username, password, ...other }, signal) => {
3167
- const data = await sendSyncAction(
3168
- {
3169
- ...other,
3170
- action: SyncAction.DATA_APP_GIT_REPOSITORY,
3171
- componentId: Component.DATA_APP,
3172
- configData: createGitRepoConfigDataBuilder(repositoryUrl).withCredentials(username, password).buildForDataApp()
3173
- },
3174
- signal
3175
- );
3176
- return Repository.parse(data);
3177
- };
3178
- const getDataAppSSHKeyPrivateGitRepository = async ({ repositoryUrl, username, sshKey, ...other }, signal) => {
3179
- const data = await sendSyncAction(
3180
- {
3181
- ...other,
3182
- action: SyncAction.DATA_APP_GIT_REPOSITORY,
3183
- componentId: Component.DATA_APP,
3184
- configData: createGitRepoConfigDataBuilder(repositoryUrl).withSshKey(username, sshKey).buildForDataApp()
3185
- },
3186
- signal
3187
- );
3188
- return Repository.parse(data);
3189
- };
3190
- const getPublicGitRepository = async ({ repositoryUrl, componentId, ...other }, signal) => {
3191
- const data = await sendSyncAction(
3192
- {
3193
- ...other,
3194
- action: SyncAction.GIT_REPOSITORY,
3195
- componentId,
3196
- configData: createGitRepoConfigDataBuilder(repositoryUrl).build()
3197
- },
3198
- signal
3199
- );
3200
- return Repository.parse(data);
3201
- };
3202
- const getPrivateGitRepository = async ({ repositoryUrl, username, password, componentId, ...other }, signal) => {
3203
- const data = await sendSyncAction(
3204
- {
3205
- ...other,
3206
- action: SyncAction.GIT_REPOSITORY,
3207
- componentId,
3208
- configData: createGitRepoConfigDataBuilder(repositoryUrl).withCredentials(username, password).build()
3209
- },
3210
- signal
3211
- );
3212
- return Repository.parse(data);
3213
- };
3214
- return {
3215
- getDataAppPublicGitRepository,
3216
- getDataAppPasswordPrivateGitRepository,
3217
- getDataAppSSHKeyPrivateGitRepository,
3218
- getPublicGitRepository,
3219
- getPrivateGitRepository
3220
- };
3221
- };
3222
-
3223
- // src/clients/syncActions/syncActionsClient.ts
3224
- var createSendSyncAction = (client) => {
3225
- return async (body, signal) => {
3226
- const { data } = await client.post(
3227
- "/actions",
3228
- {
3229
- body
3230
- },
3231
- { signal }
3232
- );
3233
- return data;
3234
- };
3235
- };
3236
- var createSyncActionsClient = ({ baseUrl, middlewares }) => {
3237
- const client = createOpenapiFetchClient({
3238
- baseUrl,
3239
- middlewares
3240
- });
3241
- const sendSyncAction = createSendSyncAction(client);
3242
- const enrollMFA = ({ email: email2, ...rest }, signal) => {
3243
- return sendSyncAction(
3244
- {
3245
- ...rest,
3246
- action: SyncAction.ENROLL_MFA,
3247
- configData: {
3248
- parameters: {
3249
- user: {
3250
- email: email2
3251
- }
3252
- }
3253
- }
3254
- },
3255
- signal
3256
- );
3257
- };
3258
- return {
3259
- enrollMFA,
3260
- gitRepository: createGitRepository(sendSyncAction)
3261
- };
3262
- };
3263
-
3264
- // src/clients/telemetry/provisioning/provisioning.ts
3265
- var createProvisioning = (client) => {
3266
- const createCredentials = async (body, signal) => {
3267
- const { data } = await client.post(
3268
- "/provisioning/workspace",
3269
- { body },
3270
- { signal }
3271
- );
3272
- return data;
3273
- };
3274
- return {
3275
- createCredentials
3276
- };
3277
- };
3278
-
3279
- // src/clients/telemetry/telemetryClient.ts
3280
- var createTelemetryClient = ({ baseUrl, middlewares }) => {
3281
- const client = createGenericFetchClient({
3282
- baseUrl,
3283
- middlewares
3284
- });
3285
- return {
3286
- provisioning: createProvisioning(client)
3287
- };
3288
- };
3289
-
3290
- // src/clients/vault/vaultClient.ts
3291
- var createVaultClient = ({ baseUrl, middlewares }) => {
3292
- const client = createOpenapiFetchClient({
3293
- baseUrl,
3294
- middlewares
3295
- });
3296
- const getVariables = async (query, signal) => {
3297
- const { data } = await client.get(
3298
- "/variables",
3299
- { query },
3300
- {
3301
- signal
3302
- }
3303
- );
3304
- return data;
3305
- };
3306
- const deleteVariable = async (hash, signal) => {
3307
- await client.delete(
3308
- "/variables/{hash}",
3309
- {
3310
- path: { hash }
3311
- },
3312
- { signal }
3313
- );
3314
- };
3315
- const createVariable = async (body, signal) => {
3316
- if (body.flags.includes("encrypted") && !body.value.startsWith(ENCRYPTED_VALUE_PREFIX)) {
3317
- throw new UserError("Encryption of a value failed. Please contact our support.");
3318
- }
3319
- const { data } = await client.post("/variables", { body }, { signal });
3320
- return data;
3321
- };
3322
- const getVariablesByBranchId = async (branchId, signal) => {
3323
- const { data } = await client.get(
3324
- "/variables/scoped/branch/{branchId}",
3325
- {
3326
- path: { branchId }
3327
- },
3328
- { signal }
3329
- );
3330
- return data;
3331
- };
3332
- const getProjectWideVariables = (signal) => getVariablesByBranchId("null", signal);
3333
- return {
3334
- createVariable,
3335
- deleteVariable,
3336
- getProjectWideVariables,
3337
- getVariables,
3338
- getVariablesByBranchId
3339
- };
3340
- };
3341
-
3342
- // src/domain/project.ts
3343
- var createProject = ({ sapiToken }) => {
3344
- const { owner, admin } = sapiToken;
3345
- const projectFeatureSet = new Set(owner.features);
3346
- const adminFeatureSet = new Set(admin.features);
3347
- const hasFeature = (...feature) => {
3348
- if (feature.length === 0) return false;
3349
- return feature.every((x) => projectFeatureSet.has(x));
3350
- };
3351
- const hasAdminFeature = (...feature) => {
3352
- if (feature.length === 0) return false;
3353
- return feature.every((x) => adminFeatureSet.has(x));
3354
- };
3355
- const hasBackend = (backend) => {
3356
- if (backend === "bigquery") return owner.hasBigquery;
3357
- if (backend === "snowflake") return owner.hasSnowflake;
3358
- return false;
3359
- };
3360
- return {
3361
- hasFeature,
3362
- hasAdminFeature,
3363
- hasBackend,
3364
- sapiToken
3365
- };
3366
- };
3367
-
3368
- // src/domain/stack.ts
3369
- var SERVICE_URL_OVERRIDES = {
3370
- // The service URL for the Kai Assistant is incomplete; we need to add the `/api` suffix to get the full URL for the API.
3371
- // I assume the service is versioned.
3372
- "kai-assistant": (url) => `${url}/api`
3373
- };
3374
- var createStack = ({ stackInfo, clientServiceUrls }) => {
3375
- const { services, components, features, ...infoRest } = stackInfo;
3376
- const serviceMap = new Map(
3377
- services.map((service) => {
3378
- const devOverride = clientServiceUrls?.[service.id]?.(service.url);
3379
- const prodOverride = SERVICE_URL_OVERRIDES[service.id]?.(service.url);
3380
- const url = devOverride ?? prodOverride ?? service.url;
3381
- return [service.id, url];
3382
- })
3383
- );
3384
- const componentMap = new Map(components.map((component) => [component.id, component]));
3385
- const featureSet = new Set(features);
3386
- const hasFeature = (...feature) => {
3387
- if (feature.length === 0) return false;
3388
- return feature.every((x) => featureSet.has(x));
3389
- };
3390
- const hasComponent = (...componentId) => {
3391
- if (componentId.length === 0) return false;
3392
- return componentId.every((x) => componentMap.has(x));
285
+ const hasComponent = (...componentId) => {
286
+ if (componentId.length === 0) return false;
287
+ return componentId.every((x) => componentMap.has(x));
3393
288
  };
3394
289
  const getComponent = (componentId) => componentMap.get(componentId) ?? null;
3395
290
  const hasService = (serviceId) => serviceMap.has(serviceId);
@@ -3407,189 +302,6 @@ var createStack = ({ stackInfo, clientServiceUrls }) => {
3407
302
  };
3408
303
  };
3409
304
 
3410
- // src/sdks/storage/storageSdk.ts
3411
- var DEFAULT_POLL_INTERVAL = 2e3;
3412
- var JOB_TERMINAL_STATUSES = /* @__PURE__ */ new Set(["success", "warning", "error", "terminated", "cancelled"]);
3413
- var createStorageSdk = ({ storageClient }) => {
3414
- const waitForJob = async (job, options) => {
3415
- const { data } = await poll({
3416
- pollFn: (abortSignal) => storageClient.jobs.getJob(job.id, abortSignal),
3417
- isDone: (j) => JOB_TERMINAL_STATUSES.has(j.status),
3418
- interval: options?.interval ?? DEFAULT_POLL_INTERVAL,
3419
- maxAttempts: options?.maxAttempts,
3420
- abortSignal: options?.abortSignal
3421
- });
3422
- return data;
3423
- };
3424
- const createTable = async (bucketId, body, options) => {
3425
- const job = await storageClient.tables.createTableAsync(bucketId, body, options?.abortSignal);
3426
- return waitForJob(job, options);
3427
- };
3428
- const importFromFile = async (tableId, body, options) => {
3429
- const job = await storageClient.tables.importAsync(tableId, body, options?.abortSignal);
3430
- return waitForJob(job, options);
3431
- };
3432
- const exportToFile = async (tableId, body, options) => {
3433
- const job = await storageClient.tables.exportAsync(tableId, body, options?.abortSignal);
3434
- return waitForJob(job, options);
3435
- };
3436
- return {
3437
- createTable,
3438
- importFromFile,
3439
- exportToFile
3440
- };
3441
- };
3442
-
3443
- // src/sdks/tag/tagSdk.ts
3444
- var ObjectType = {
3445
- TAG: "tag",
3446
- TAG_BINDING: "tag-binding"
3447
- };
3448
- var createTagSdk = ({ metastoreClient }) => {
3449
- const _getTagMetaObjects = async (type, signal) => {
3450
- const response = await metastoreClient.repository.getMetaObjects(
3451
- {
3452
- objectType: type
3453
- },
3454
- signal
3455
- );
3456
- return response.data.map(({ attributes }) => attributes);
3457
- };
3458
- const _getAllTagBindingMapByTagId = async (signal) => {
3459
- const tagBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING, signal);
3460
- return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);
3461
- };
3462
- const _getTagBindingMapByTagId = async (tagUUIDs, objectId, signal) => {
3463
- const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);
3464
- const objectUID = keboolaUID.serialize(objectId);
3465
- return tagUUIDs.reduce((acc, tagUUID) => {
3466
- if (acc[tagUUID]) return acc;
3467
- const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];
3468
- acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;
3469
- return acc;
3470
- }, {});
3471
- };
3472
- const _deleteTagBindings = async (tagBindings) => {
3473
- await concurrent({
3474
- items: tagBindings,
3475
- process: async (binding) => metastoreClient.repository.deleteMetaObject({
3476
- objectType: ObjectType.TAG_BINDING,
3477
- UUID: binding.uuid
3478
- }),
3479
- concurrency: 5
3480
- });
3481
- };
3482
- const getTags = async (signal) => {
3483
- const [tags, tagBindingMapByTagId] = await Promise.all([
3484
- _getTagMetaObjects(ObjectType.TAG, signal),
3485
- _getAllTagBindingMapByTagId(signal)
3486
- ]);
3487
- return tags.map((tag) => ({
3488
- tag,
3489
- bindings: tagBindingMapByTagId[tag.uuid] ?? []
3490
- }));
3491
- };
3492
- const getTagsByObjectId = async (objectId, signal) => {
3493
- const tags = await getTags(signal);
3494
- const keboolaObjectUID = keboolaUID.serialize(objectId);
3495
- const mapByTagId = tags.reduce((acc, { tag, bindings }) => {
3496
- acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));
3497
- return acc;
3498
- }, {});
3499
- return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));
3500
- };
3501
- const createTag = async (data, meta = {}) => {
3502
- const {
3503
- data: { attributes: tag }
3504
- } = await metastoreClient.repository.createMetaObject({
3505
- objectType: ObjectType.TAG,
3506
- data,
3507
- name: generateUUID(),
3508
- ...meta
3509
- });
3510
- return tag;
3511
- };
3512
- const updateTag = async (tagUUID, data, meta = {}) => {
3513
- const {
3514
- data: { attributes: tag }
3515
- } = await metastoreClient.repository.updateMetaObject({
3516
- objectType: ObjectType.TAG,
3517
- UUID: tagUUID,
3518
- data,
3519
- ...meta
3520
- });
3521
- return tag;
3522
- };
3523
- const deleteTag = async (tagUUID) => {
3524
- const allBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING);
3525
- const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);
3526
- await Promise.all([
3527
- // delete tag itself
3528
- metastoreClient.repository.deleteMetaObject({
3529
- objectType: ObjectType.TAG,
3530
- UUID: tagUUID
3531
- }),
3532
- // delete all tag associations
3533
- _deleteTagBindings(tagBindings)
3534
- ]);
3535
- };
3536
- const assignTags = async (tagUUIDs, objectId, meta = {}) => {
3537
- const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);
3538
- const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);
3539
- await concurrent({
3540
- items: unassignedTagUUIDs,
3541
- process: async (tagUUID) => metastoreClient.repository.createMetaObject({
3542
- objectType: ObjectType.TAG_BINDING,
3543
- data: {
3544
- objectUID: keboolaUID.serialize(objectId),
3545
- tagUUID
3546
- },
3547
- name: generateUUID(),
3548
- ...meta
3549
- }),
3550
- concurrency: 5
3551
- });
3552
- };
3553
- const unassignTags = async (tagUUIDs, objectID) => {
3554
- const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);
3555
- const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);
3556
- const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]);
3557
- await concurrent({
3558
- items: tagBindings,
3559
- process: async (tagBinding) => metastoreClient.repository.deleteMetaObject({
3560
- objectType: ObjectType.TAG_BINDING,
3561
- UUID: tagBinding.uuid
3562
- }),
3563
- concurrency: 5
3564
- });
3565
- };
3566
- const unassignAllTags = async (objectID, signal) => {
3567
- const tagBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING, signal);
3568
- const objectsTagBindings = tagBindings.filter(
3569
- ({ data }) => data.objectUID === keboolaUID.serialize(objectID)
3570
- );
3571
- await _deleteTagBindings(objectsTagBindings);
3572
- };
3573
- const createAndAssignTag = async (data, objectId, meta = {}) => {
3574
- const tag = await createTag(data, meta);
3575
- await assignTags([tag.uuid], objectId, meta);
3576
- return tag;
3577
- };
3578
- return {
3579
- // retrievals
3580
- getTags,
3581
- getTagsByObjectId,
3582
- // modifications
3583
- createTag,
3584
- updateTag,
3585
- deleteTag,
3586
- assignTags,
3587
- unassignTags,
3588
- unassignAllTags,
3589
- createAndAssignTag
3590
- };
3591
- };
3592
-
3593
305
  // src/serviceClientRegistry/utils.ts
3594
306
  var isBuiltInProperty = (property) => typeof property === "symbol" || property === "then" || property === "constructor" || property === "toString" || property === "valueOf";
3595
307
  var createDummyClient = ({
@@ -3956,6 +668,6 @@ var createDevApiClient = () => ({
3956
668
  verify: createVerifyClient()
3957
669
  });
3958
670
 
3959
- export { ApiError, HttpContentType, HttpHeader, KeboolaHttpHeader, ManagementClientAuthError, PollException, ServiceUnavailableError, UserError, assert, concurrent, consoleLogger, createApiClient, createDevApiClient, createGenericFetchClient, createLoggingMiddleware, createRetryMiddleware, createStorageSdk, delay, generateUUID, isAbortError, isApiError, isFetchClientError, isManagementClientAuthError, keboolaUID, parseLogLines, poll, series };
671
+ export { ServiceUnavailableError, assert, consoleLogger, createApiClient, createDevApiClient, createLoggingMiddleware, createRetryMiddleware };
3960
672
  //# sourceMappingURL=index.js.map
3961
673
  //# sourceMappingURL=index.js.map