@keboola/api-client 0.1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -1
- package/dist/ai/index.cjs +7 -1
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.js +7 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/assets/index.cjs +7 -1
- package/dist/assets/index.cjs.map +1 -1
- package/dist/assets/index.js +7 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/chat/index.cjs +3 -1
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +1 -1
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +3 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/types.d.cts +1 -1
- package/dist/chat/types.d.ts +1 -1
- package/dist/constants/index.cjs +145 -0
- package/dist/constants/index.cjs.map +1 -0
- package/dist/constants/index.d.cts +28 -0
- package/dist/constants/index.d.ts +28 -0
- package/dist/constants/index.js +142 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/dataScience/index.cjs +7 -2
- package/dist/dataScience/index.cjs.map +1 -1
- package/dist/dataScience/index.js +7 -2
- package/dist/dataScience/index.js.map +1 -1
- package/dist/domain/permissions/index.cjs +13 -0
- package/dist/domain/permissions/index.cjs.map +1 -0
- package/dist/domain/permissions/index.d.cts +5 -0
- package/dist/domain/permissions/index.d.ts +5 -0
- package/dist/domain/permissions/index.js +11 -0
- package/dist/domain/permissions/index.js.map +1 -0
- package/dist/editor/index.cjs +7 -10
- package/dist/editor/index.cjs.map +1 -1
- package/dist/editor/index.d.cts +11 -19
- package/dist/editor/index.d.ts +11 -19
- package/dist/editor/index.js +7 -10
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/types.d.cts +1 -1
- package/dist/editor/types.d.ts +1 -1
- package/dist/encryption/index.cjs +7 -1
- package/dist/encryption/index.cjs.map +1 -1
- package/dist/encryption/index.js +7 -1
- package/dist/encryption/index.js.map +1 -1
- package/dist/import/index.cjs +7 -1
- package/dist/import/index.cjs.map +1 -1
- package/dist/import/index.js +7 -1
- package/dist/import/index.js.map +1 -1
- package/dist/index.cjs +308 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1085 -122
- package/dist/index.d.ts +1085 -122
- package/dist/index.js +308 -42
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +40 -23
- package/dist/management/index.cjs.map +1 -1
- package/dist/management/index.d.cts +59 -23
- package/dist/management/index.d.ts +59 -23
- package/dist/management/index.js +40 -23
- package/dist/management/index.js.map +1 -1
- package/dist/management/types.d.cts +2 -2
- package/dist/management/types.d.ts +2 -2
- package/dist/metastore/index.cjs +7 -1
- package/dist/metastore/index.cjs.map +1 -1
- package/dist/metastore/index.js +7 -1
- package/dist/metastore/index.js.map +1 -1
- package/dist/oauth/index.cjs +234 -0
- package/dist/oauth/index.cjs.map +1 -0
- package/dist/oauth/index.d.cts +12 -0
- package/dist/oauth/index.d.ts +12 -0
- package/dist/oauth/index.js +228 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/types.cjs +4 -0
- package/dist/oauth/types.cjs.map +1 -0
- package/dist/oauth/types.d.cts +34 -0
- package/dist/oauth/types.d.ts +34 -0
- package/dist/oauth/types.js +3 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/queryService/index.cjs +7 -1
- package/dist/queryService/index.cjs.map +1 -1
- package/dist/queryService/index.js +7 -1
- package/dist/queryService/index.js.map +1 -1
- package/dist/queue/index.cjs +7 -1
- package/dist/queue/index.cjs.map +1 -1
- package/dist/queue/index.js +7 -1
- package/dist/queue/index.js.map +1 -1
- package/dist/sdk/configurations/index.cjs +14 -0
- package/dist/sdk/configurations/index.cjs.map +1 -0
- package/dist/sdk/configurations/index.d.cts +24 -0
- package/dist/sdk/configurations/index.d.ts +24 -0
- package/dist/sdk/configurations/index.js +11 -0
- package/dist/sdk/configurations/index.js.map +1 -0
- package/dist/sdk/storage/index.cjs +179 -1
- package/dist/sdk/storage/index.cjs.map +1 -1
- package/dist/sdk/storage/index.d.cts +118 -13
- package/dist/sdk/storage/index.d.ts +118 -13
- package/dist/sdk/storage/index.js +169 -2
- package/dist/sdk/storage/index.js.map +1 -1
- package/dist/status/index.cjs +7 -1
- package/dist/status/index.cjs.map +1 -1
- package/dist/status/index.js +7 -1
- package/dist/status/index.js.map +1 -1
- package/dist/storage/index.cjs +107 -9
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +107 -9
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/types.d.cts +2977 -1306
- package/dist/storage/types.d.ts +2977 -1306
- package/dist/{storageClient-DPLh_p0V.d.cts → storageClient-DSLTM3Cr.d.cts} +20 -1
- package/dist/{storageClient-YVWer22Y.d.ts → storageClient-DrYOs4Xm.d.ts} +20 -1
- package/dist/storageSdk-BBqAo0Vx.d.cts +143 -0
- package/dist/storageSdk-ZVmKQQSl.d.ts +143 -0
- package/dist/syncActions/index.cjs +7 -1
- package/dist/syncActions/index.cjs.map +1 -1
- package/dist/syncActions/index.js +7 -1
- package/dist/syncActions/index.js.map +1 -1
- package/dist/telemetry/index.cjs +7 -1
- package/dist/telemetry/index.cjs.map +1 -1
- package/dist/telemetry/index.js +7 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/{types-B7k8S4ki.d.ts → types-B--u7l2H.d.ts} +33 -118
- package/dist/{types-BeShtGlc.d.cts → types-BTcT8Q0T.d.cts} +15 -1
- package/dist/{types-BeShtGlc.d.ts → types-BTcT8Q0T.d.ts} +15 -1
- package/dist/{types-BNQK_jR_.d.cts → types-C0Owx2P7.d.cts} +33 -118
- package/dist/{types-DJ6nbNq5.d.cts → types-CNkgmuhe.d.cts} +1 -1
- package/dist/{types-BjrNNn5I.d.ts → types-DzwzVgyG.d.ts} +1 -1
- package/dist/vault/index.cjs +3 -1
- package/dist/vault/index.cjs.map +1 -1
- package/dist/vault/index.js +3 -1
- package/dist/vault/index.js.map +1 -1
- package/dist/verify/index.cjs +3 -1
- package/dist/verify/index.cjs.map +1 -1
- package/dist/verify/index.js +3 -1
- package/dist/verify/index.js.map +1 -1
- package/package.json +71 -5
package/dist/index.cjs
CHANGED
|
@@ -71,6 +71,25 @@ var ServiceUnavailableError = class _ServiceUnavailableError extends Error {
|
|
|
71
71
|
Object.setPrototypeOf(this, _ServiceUnavailableError.prototype);
|
|
72
72
|
}
|
|
73
73
|
};
|
|
74
|
+
|
|
75
|
+
// src/constants.ts
|
|
76
|
+
var KeboolaHttpHeader = {
|
|
77
|
+
STORAGE_API_TOKEN: "X-StorageApi-Token",
|
|
78
|
+
MANAGEMENT_API_TOKEN: "X-Kbc-Manageapitoken",
|
|
79
|
+
STORAGE_API_URL: "x-storageapi-url"
|
|
80
|
+
};
|
|
81
|
+
var HttpStatus = {
|
|
82
|
+
NO_CONTENT: 204,
|
|
83
|
+
BAD_REQUEST: 400,
|
|
84
|
+
UNPROCESSABLE_ENTITY: 422,
|
|
85
|
+
INTERNAL_SERVER_ERROR: 500,
|
|
86
|
+
BAD_GATEWAY: 502,
|
|
87
|
+
SERVICE_UNAVAILABLE: 503,
|
|
88
|
+
GATEWAY_TIMEOUT: 504
|
|
89
|
+
};
|
|
90
|
+
var ENCRYPTED_VALUE_PREFIX = "KBC::";
|
|
91
|
+
|
|
92
|
+
// src/fetchClient/createFetchClient/utils.ts
|
|
74
93
|
var HttpHeader = {
|
|
75
94
|
CONTENT_TYPE: "content-type",
|
|
76
95
|
CONTENT_DISPOSITION: "content-disposition"
|
|
@@ -90,7 +109,7 @@ function removeUndefined(obj) {
|
|
|
90
109
|
return objCopy;
|
|
91
110
|
}
|
|
92
111
|
var parseData = async (response) => {
|
|
93
|
-
if (response.status ===
|
|
112
|
+
if (response.status === HttpStatus.NO_CONTENT) return null;
|
|
94
113
|
const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
|
|
95
114
|
if (contentType && contentType == HttpContentType.JSON) {
|
|
96
115
|
return response.json();
|
|
@@ -310,14 +329,6 @@ var createAssetsClient = ({ baseUrl, middlewares }) => {
|
|
|
310
329
|
getPublishedChangelogPosts
|
|
311
330
|
};
|
|
312
331
|
};
|
|
313
|
-
|
|
314
|
-
// src/constants.ts
|
|
315
|
-
var KeboolaHttpHeader = {
|
|
316
|
-
STORAGE_API_TOKEN: "X-StorageApi-Token",
|
|
317
|
-
MANAGEMENT_API_TOKEN: "X-Kbc-Manageapitoken",
|
|
318
|
-
STORAGE_API_URL: "x-storageapi-url"
|
|
319
|
-
};
|
|
320
|
-
var ENCRYPTED_VALUE_PREFIX = "KBC::";
|
|
321
332
|
var SUGGESTION_CATEGORIES = ["error", "maintenance", "documentation"];
|
|
322
333
|
var suggestionCategorySchema = z5.z.enum(SUGGESTION_CATEGORIES);
|
|
323
334
|
var suggestionSchema = z5.z.object({
|
|
@@ -718,7 +729,7 @@ var createDataScienceClient = ({ baseUrl, middlewares }) => {
|
|
|
718
729
|
nextLogTimestamp
|
|
719
730
|
};
|
|
720
731
|
} catch (error) {
|
|
721
|
-
if (isApiError(error) && error.response.status ===
|
|
732
|
+
if (isApiError(error) && error.response.status === HttpStatus.BAD_REQUEST && TailError.safeParse(error.data).data?.context?.code === "apps.appNotRunning") {
|
|
722
733
|
return { entries: [], nextLogTimestamp: null };
|
|
723
734
|
}
|
|
724
735
|
throw error;
|
|
@@ -861,14 +872,6 @@ var createEditorClient = ({ baseUrl, middlewares }) => {
|
|
|
861
872
|
});
|
|
862
873
|
return data;
|
|
863
874
|
};
|
|
864
|
-
const getWorkspacePassword = async (id, signal) => {
|
|
865
|
-
const { data } = await client.get(
|
|
866
|
-
`/sql/sessions/{id}/workspace-password`,
|
|
867
|
-
{ path: { id } },
|
|
868
|
-
{ signal }
|
|
869
|
-
);
|
|
870
|
-
return data;
|
|
871
|
-
};
|
|
872
875
|
const resetWorkspacePassword = async (id) => {
|
|
873
876
|
const { data } = await client.post(`/sql/sessions/{id}/reset-password`, {
|
|
874
877
|
path: { id }
|
|
@@ -893,7 +896,6 @@ var createEditorClient = ({ baseUrl, middlewares }) => {
|
|
|
893
896
|
tableDefinition,
|
|
894
897
|
load,
|
|
895
898
|
unload,
|
|
896
|
-
getWorkspacePassword,
|
|
897
899
|
resetWorkspacePassword,
|
|
898
900
|
getSessionCredentials
|
|
899
901
|
};
|
|
@@ -985,6 +987,24 @@ var toolInfoSchema2 = z5.z.object({
|
|
|
985
987
|
var toolsListResponseSchema2 = z5.z.object({
|
|
986
988
|
tools: z5.z.array(toolInfoSchema2)
|
|
987
989
|
});
|
|
990
|
+
var sandboxFileEntrySchema = z5.z.object({
|
|
991
|
+
name: z5.z.string(),
|
|
992
|
+
path: z5.z.string(),
|
|
993
|
+
type: z5.z.enum(["file", "dir"]),
|
|
994
|
+
size: z5.z.number().int().nonnegative().optional()
|
|
995
|
+
});
|
|
996
|
+
var sandboxFileListingSchema = z5.z.object({
|
|
997
|
+
entries: z5.z.array(sandboxFileEntrySchema)
|
|
998
|
+
});
|
|
999
|
+
var sandboxFileContentSchema = z5.z.object({
|
|
1000
|
+
content: z5.z.string(),
|
|
1001
|
+
encoding: z5.z.enum(["utf-8", "binary"]),
|
|
1002
|
+
truncated: z5.z.boolean(),
|
|
1003
|
+
size: z5.z.number().int().nonnegative()
|
|
1004
|
+
});
|
|
1005
|
+
var sandboxGitBranchSchema = z5.z.object({
|
|
1006
|
+
branch: z5.z.string().nullable()
|
|
1007
|
+
});
|
|
988
1008
|
var createKaiAgentClient = ({ baseUrl, middlewares }) => {
|
|
989
1009
|
const clientOptions = { baseUrl, middlewares };
|
|
990
1010
|
const client = createOpenapiFetchClient(clientOptions);
|
|
@@ -1022,6 +1042,10 @@ var createKaiAgentClient = ({ baseUrl, middlewares }) => {
|
|
|
1022
1042
|
const submitToolOutput = async (chatId, body) => {
|
|
1023
1043
|
await client.post("/api/chat/{id}/ui-tool-result", { path: { id: chatId }, body });
|
|
1024
1044
|
};
|
|
1045
|
+
const stopChat = async (chatId) => {
|
|
1046
|
+
const { data } = await client.post("/api/chat/{id}/stop", { path: { id: chatId } });
|
|
1047
|
+
return data;
|
|
1048
|
+
};
|
|
1025
1049
|
const getSuggestions = async (request, signal) => {
|
|
1026
1050
|
const { data } = await genericClient.post(
|
|
1027
1051
|
"/api/suggestions",
|
|
@@ -1090,6 +1114,42 @@ var createKaiAgentClient = ({ baseUrl, middlewares }) => {
|
|
|
1090
1114
|
}
|
|
1091
1115
|
return result.data;
|
|
1092
1116
|
};
|
|
1117
|
+
const listSandboxFiles = async (chatId, path, signal) => {
|
|
1118
|
+
const { data } = await genericClient.get(
|
|
1119
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/files`,
|
|
1120
|
+
{ query: path ? { path } : void 0 },
|
|
1121
|
+
{ signal }
|
|
1122
|
+
);
|
|
1123
|
+
const result = sandboxFileListingSchema.safeParse(data);
|
|
1124
|
+
if (!result.success) {
|
|
1125
|
+
throw new Error("Invalid sandbox files response format");
|
|
1126
|
+
}
|
|
1127
|
+
return result.data;
|
|
1128
|
+
};
|
|
1129
|
+
const readSandboxFile = async (chatId, path, signal) => {
|
|
1130
|
+
const { data } = await genericClient.get(
|
|
1131
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/file`,
|
|
1132
|
+
{ query: { path } },
|
|
1133
|
+
{ signal }
|
|
1134
|
+
);
|
|
1135
|
+
const result = sandboxFileContentSchema.safeParse(data);
|
|
1136
|
+
if (!result.success) {
|
|
1137
|
+
throw new Error("Invalid sandbox file response format");
|
|
1138
|
+
}
|
|
1139
|
+
return result.data;
|
|
1140
|
+
};
|
|
1141
|
+
const getSandboxGitBranch = async (chatId, signal) => {
|
|
1142
|
+
const { data } = await genericClient.get(
|
|
1143
|
+
`/api/chat/${encodeURIComponent(chatId)}/sandbox/git-branch`,
|
|
1144
|
+
{},
|
|
1145
|
+
{ signal }
|
|
1146
|
+
);
|
|
1147
|
+
const result = sandboxGitBranchSchema.safeParse(data);
|
|
1148
|
+
if (!result.success) {
|
|
1149
|
+
throw new Error("Invalid sandbox git-branch response format");
|
|
1150
|
+
}
|
|
1151
|
+
return result.data;
|
|
1152
|
+
};
|
|
1093
1153
|
const chatStreamUrl = baseUrl + "/api/chat";
|
|
1094
1154
|
return {
|
|
1095
1155
|
getHistory,
|
|
@@ -1101,12 +1161,16 @@ var createKaiAgentClient = ({ baseUrl, middlewares }) => {
|
|
|
1101
1161
|
getUsage,
|
|
1102
1162
|
approveToolCall,
|
|
1103
1163
|
submitToolOutput,
|
|
1164
|
+
stopChat,
|
|
1104
1165
|
getSuggestions,
|
|
1105
1166
|
getAgentSettings,
|
|
1106
1167
|
updateAgentSettings,
|
|
1107
1168
|
getUserAgentSettings,
|
|
1108
1169
|
updateUserAgentSettings,
|
|
1109
1170
|
getToolsList,
|
|
1171
|
+
listSandboxFiles,
|
|
1172
|
+
readSandboxFile,
|
|
1173
|
+
getSandboxGitBranch,
|
|
1110
1174
|
chatStreamUrl
|
|
1111
1175
|
};
|
|
1112
1176
|
};
|
|
@@ -1134,6 +1198,7 @@ var createVerifyClient = () => {
|
|
|
1134
1198
|
};
|
|
1135
1199
|
|
|
1136
1200
|
// src/clients/management/authMiddleware.ts
|
|
1201
|
+
var TOKEN_CACHE_TTL_MS = 6e4;
|
|
1137
1202
|
var isManagementClientAuthError = (error) => error instanceof ManagementClientAuthError;
|
|
1138
1203
|
var createAuth = (baseUrl) => {
|
|
1139
1204
|
const fetchClient = createGenericFetchClient({ baseUrl });
|
|
@@ -1179,18 +1244,34 @@ var createAuthMiddleware = ({
|
|
|
1179
1244
|
const auth = createAuth(baseUrl);
|
|
1180
1245
|
const verify = createVerifyClient();
|
|
1181
1246
|
let token = accessToken;
|
|
1247
|
+
let tokenValidUntil = 0;
|
|
1248
|
+
let inflightAuth = null;
|
|
1182
1249
|
const isDevelopment = process.env.NODE_ENV === "development";
|
|
1183
|
-
|
|
1184
|
-
if (
|
|
1250
|
+
const ensureValidToken = async () => {
|
|
1251
|
+
if (token && Date.now() < tokenValidUntil) return token;
|
|
1252
|
+
if (token) {
|
|
1185
1253
|
const tokenInfo = await verify.managementApiToken(baseUrl, token);
|
|
1186
1254
|
const isTokenValid = !tokenInfo.isDisabled && !tokenInfo.isExpired;
|
|
1187
|
-
if (
|
|
1188
|
-
|
|
1255
|
+
if (isTokenValid) {
|
|
1256
|
+
tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
|
|
1257
|
+
return token;
|
|
1189
1258
|
}
|
|
1190
|
-
|
|
1191
|
-
|
|
1259
|
+
token = isDevelopment ? await auth.createCurrentUserSessionToken(token) : await auth.createAdminAccountSessionToken();
|
|
1260
|
+
tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
|
|
1261
|
+
return token;
|
|
1262
|
+
}
|
|
1263
|
+
token = await auth.createAdminAccountSessionToken();
|
|
1264
|
+
tokenValidUntil = Date.now() + TOKEN_CACHE_TTL_MS;
|
|
1265
|
+
return token;
|
|
1266
|
+
};
|
|
1267
|
+
return (next) => async (request) => {
|
|
1268
|
+
if (!inflightAuth) {
|
|
1269
|
+
inflightAuth = ensureValidToken().finally(() => {
|
|
1270
|
+
inflightAuth = null;
|
|
1271
|
+
});
|
|
1192
1272
|
}
|
|
1193
|
-
|
|
1273
|
+
const validToken = await inflightAuth;
|
|
1274
|
+
request.request.headers.set(KeboolaHttpHeader.MANAGEMENT_API_TOKEN, validToken);
|
|
1194
1275
|
return next(request);
|
|
1195
1276
|
};
|
|
1196
1277
|
};
|
|
@@ -1394,14 +1475,6 @@ var createMaintainers = (client) => {
|
|
|
1394
1475
|
path: { id: maintainerId, invitationId }
|
|
1395
1476
|
});
|
|
1396
1477
|
};
|
|
1397
|
-
const getMaintainerOrganizations = async (maintainerId, signal) => {
|
|
1398
|
-
const { data } = await client.get(
|
|
1399
|
-
"/manage/maintainers/{id}/organizations",
|
|
1400
|
-
{ path: { id: maintainerId } },
|
|
1401
|
-
{ signal }
|
|
1402
|
-
);
|
|
1403
|
-
return data;
|
|
1404
|
-
};
|
|
1405
1478
|
const createMaintainerOrganization = async ({
|
|
1406
1479
|
maintainerId,
|
|
1407
1480
|
...body
|
|
@@ -1451,7 +1524,6 @@ var createMaintainers = (client) => {
|
|
|
1451
1524
|
getMaintainerInvitation,
|
|
1452
1525
|
createMaintainerInvitation,
|
|
1453
1526
|
deleteMaintainerInvitation,
|
|
1454
|
-
getMaintainerOrganizations,
|
|
1455
1527
|
createMaintainerOrganization,
|
|
1456
1528
|
getMaintainerMetadata,
|
|
1457
1529
|
setMaintainerMetadata,
|
|
@@ -1773,13 +1845,18 @@ var createManagementClient = ({
|
|
|
1773
1845
|
baseUrl,
|
|
1774
1846
|
middlewares
|
|
1775
1847
|
});
|
|
1848
|
+
const verifyToken = async (signal) => {
|
|
1849
|
+
const { data } = await openApiClient.get("/manage/tokens/verify", {}, { signal });
|
|
1850
|
+
return data;
|
|
1851
|
+
};
|
|
1776
1852
|
return {
|
|
1777
1853
|
currentUser: createCurrentUser(openApiClient),
|
|
1778
1854
|
features: createFeatures(client),
|
|
1779
1855
|
maintainers: createMaintainers(openApiClient),
|
|
1780
1856
|
organizations: createOrganizations(openApiClient),
|
|
1781
1857
|
projects: createProjects(client),
|
|
1782
|
-
users: createUsers(client)
|
|
1858
|
+
users: createUsers(client),
|
|
1859
|
+
verifyToken
|
|
1783
1860
|
};
|
|
1784
1861
|
};
|
|
1785
1862
|
|
|
@@ -1959,6 +2036,72 @@ var createMetastoreClient = ({ baseUrl, middlewares }) => {
|
|
|
1959
2036
|
};
|
|
1960
2037
|
};
|
|
1961
2038
|
|
|
2039
|
+
// src/clients/oauth/oauthClient.ts
|
|
2040
|
+
var createOauthClient = ({ baseUrl, middlewares }) => {
|
|
2041
|
+
const client = createGenericFetchClient({ baseUrl, middlewares });
|
|
2042
|
+
const getCredentials = async (query, signal) => {
|
|
2043
|
+
const { data } = await client.get(
|
|
2044
|
+
"/credentials",
|
|
2045
|
+
{ query },
|
|
2046
|
+
{ signal }
|
|
2047
|
+
);
|
|
2048
|
+
return data;
|
|
2049
|
+
};
|
|
2050
|
+
const getCredential = async (componentId, id, signal) => {
|
|
2051
|
+
const { data } = await client.get(
|
|
2052
|
+
"/credentials/{componentId}/{id}",
|
|
2053
|
+
{ path: { componentId, id } },
|
|
2054
|
+
{ signal }
|
|
2055
|
+
);
|
|
2056
|
+
return data;
|
|
2057
|
+
};
|
|
2058
|
+
const _createCredentials = async (componentId, body, signal) => {
|
|
2059
|
+
const { data } = await client.post(
|
|
2060
|
+
"/credentials/{componentId}",
|
|
2061
|
+
{ path: { componentId }, body },
|
|
2062
|
+
{ signal }
|
|
2063
|
+
);
|
|
2064
|
+
return data;
|
|
2065
|
+
};
|
|
2066
|
+
const _createLegacyCredentials = async (componentId, { data: credentialsData, ...rest }, signal) => {
|
|
2067
|
+
const { data } = await client.post(
|
|
2068
|
+
"/credentials/{componentId}",
|
|
2069
|
+
{
|
|
2070
|
+
path: { componentId },
|
|
2071
|
+
body: {
|
|
2072
|
+
...rest,
|
|
2073
|
+
"#data": JSON.stringify(credentialsData)
|
|
2074
|
+
}
|
|
2075
|
+
},
|
|
2076
|
+
{ signal }
|
|
2077
|
+
);
|
|
2078
|
+
return data;
|
|
2079
|
+
};
|
|
2080
|
+
const createCredential = async (componentId, body, signal) => {
|
|
2081
|
+
try {
|
|
2082
|
+
return await _createCredentials(componentId, body, signal);
|
|
2083
|
+
} catch (error) {
|
|
2084
|
+
if (isApiError(error) && error.response.status === HttpStatus.UNPROCESSABLE_ENTITY) {
|
|
2085
|
+
return _createLegacyCredentials(componentId, body, signal);
|
|
2086
|
+
}
|
|
2087
|
+
throw error;
|
|
2088
|
+
}
|
|
2089
|
+
};
|
|
2090
|
+
const deleteCredential = async (componentId, id, signal) => {
|
|
2091
|
+
await client.delete(
|
|
2092
|
+
"/credentials/{componentId}/{id}",
|
|
2093
|
+
{ path: { componentId, id } },
|
|
2094
|
+
{ signal }
|
|
2095
|
+
);
|
|
2096
|
+
};
|
|
2097
|
+
return {
|
|
2098
|
+
getCredentials,
|
|
2099
|
+
getCredential,
|
|
2100
|
+
createCredential,
|
|
2101
|
+
deleteCredential
|
|
2102
|
+
};
|
|
2103
|
+
};
|
|
2104
|
+
|
|
1962
2105
|
// src/clients/queryService/queryServiceClient.ts
|
|
1963
2106
|
var createQueryServiceClient = ({ baseUrl, middlewares }) => {
|
|
1964
2107
|
const client = createOpenapiFetchClient({
|
|
@@ -2114,7 +2257,6 @@ var createMergeRequests = (client) => {
|
|
|
2114
2257
|
const getMergeRequestWithActivityLog = async (id, signal) => {
|
|
2115
2258
|
const { data } = await client.get(
|
|
2116
2259
|
"/v2/storage/merge-request/{id}",
|
|
2117
|
-
// @ts-expect-error backend accepts `?include=activityLog`; OpenAPI schema regen pending (connection#7250).
|
|
2118
2260
|
{ path: { id }, query: { include: "activityLog" } },
|
|
2119
2261
|
{ signal }
|
|
2120
2262
|
);
|
|
@@ -2146,11 +2288,18 @@ var createMergeRequests = (client) => {
|
|
|
2146
2288
|
const requestChangesMergeRequest = async (id, reason) => {
|
|
2147
2289
|
const { data } = await client.put("/v2/storage/merge-request/{id}/request-changes", {
|
|
2148
2290
|
path: { id },
|
|
2149
|
-
// @ts-expect-error backend accepts optional `{ reason }` body; OpenAPI schema regen pending (connection#7250).
|
|
2150
2291
|
body: reason ? { reason } : void 0
|
|
2151
2292
|
});
|
|
2152
2293
|
return data;
|
|
2153
2294
|
};
|
|
2295
|
+
const getMergeRequestConflicts = async (id, signal) => {
|
|
2296
|
+
const { data } = await client.get(
|
|
2297
|
+
"/v2/storage/merge-request/{id}/conflicts",
|
|
2298
|
+
{ path: { id } },
|
|
2299
|
+
{ signal }
|
|
2300
|
+
);
|
|
2301
|
+
return data;
|
|
2302
|
+
};
|
|
2154
2303
|
return {
|
|
2155
2304
|
getMergeRequests,
|
|
2156
2305
|
getMergeRequest,
|
|
@@ -2159,7 +2308,8 @@ var createMergeRequests = (client) => {
|
|
|
2159
2308
|
updateMergeRequest,
|
|
2160
2309
|
requestReview,
|
|
2161
2310
|
approveMergeRequest,
|
|
2162
|
-
requestChangesMergeRequest
|
|
2311
|
+
requestChangesMergeRequest,
|
|
2312
|
+
getMergeRequestConflicts
|
|
2163
2313
|
};
|
|
2164
2314
|
};
|
|
2165
2315
|
|
|
@@ -2240,6 +2390,30 @@ var createBranches = (client) => {
|
|
|
2240
2390
|
};
|
|
2241
2391
|
};
|
|
2242
2392
|
|
|
2393
|
+
// src/clients/storage/buckets/listingConversion.ts
|
|
2394
|
+
var toBackendSubscribers = (subscribers) => subscribers.map((s) => `${s.type}:${s.email}`);
|
|
2395
|
+
var fromBackendSubscribers = (raw) => {
|
|
2396
|
+
const result = [];
|
|
2397
|
+
for (const entry of raw) {
|
|
2398
|
+
const colon = entry.indexOf(":");
|
|
2399
|
+
if (colon === -1) continue;
|
|
2400
|
+
const prefix = entry.slice(0, colon);
|
|
2401
|
+
const email2 = entry.slice(colon + 1);
|
|
2402
|
+
if (prefix !== "user" && prefix !== "group") continue;
|
|
2403
|
+
if (email2.length === 0) continue;
|
|
2404
|
+
result.push({ type: prefix, email: email2 });
|
|
2405
|
+
}
|
|
2406
|
+
return result;
|
|
2407
|
+
};
|
|
2408
|
+
var toBucketListing = (raw, bucketId) => ({
|
|
2409
|
+
bucketId,
|
|
2410
|
+
name: raw.name,
|
|
2411
|
+
description: raw.description ?? null,
|
|
2412
|
+
listingId: raw.bigquery.listingId,
|
|
2413
|
+
subscribers: fromBackendSubscribers(raw.bigquery.subscribers),
|
|
2414
|
+
createdAt: raw.createdAt
|
|
2415
|
+
});
|
|
2416
|
+
|
|
2243
2417
|
// src/clients/storage/buckets/buckets.ts
|
|
2244
2418
|
var createBuckets = (client) => {
|
|
2245
2419
|
const getBuckets = async (query = {}, signal) => {
|
|
@@ -2291,6 +2465,64 @@ var createBuckets = (client) => {
|
|
|
2291
2465
|
path: { taskId }
|
|
2292
2466
|
});
|
|
2293
2467
|
};
|
|
2468
|
+
const getListing = async (bucketId, signal) => {
|
|
2469
|
+
try {
|
|
2470
|
+
const { data } = await client.get(
|
|
2471
|
+
`/buckets/{bucketId}/listing`,
|
|
2472
|
+
{ path: { bucketId } },
|
|
2473
|
+
{ signal }
|
|
2474
|
+
);
|
|
2475
|
+
return toBucketListing(data, bucketId);
|
|
2476
|
+
} catch (error) {
|
|
2477
|
+
if (isApiError(error) && error.response.status === 404) return null;
|
|
2478
|
+
throw error;
|
|
2479
|
+
}
|
|
2480
|
+
};
|
|
2481
|
+
const createListing = async (bucketId, input, signal) => {
|
|
2482
|
+
const { data } = await client.post(
|
|
2483
|
+
`/buckets/{bucketId}/listing`,
|
|
2484
|
+
{
|
|
2485
|
+
path: { bucketId },
|
|
2486
|
+
body: {
|
|
2487
|
+
listingName: input.name,
|
|
2488
|
+
listingDescription: input.description?.trim() || null,
|
|
2489
|
+
bigquery: {
|
|
2490
|
+
listingId: input.listingId,
|
|
2491
|
+
subscribers: toBackendSubscribers(input.subscribers)
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
},
|
|
2495
|
+
{ signal }
|
|
2496
|
+
);
|
|
2497
|
+
return data;
|
|
2498
|
+
};
|
|
2499
|
+
const updateListing = async (bucketId, input, signal) => {
|
|
2500
|
+
const body = {};
|
|
2501
|
+
if (input.name !== void 0) body.exposureName = input.name;
|
|
2502
|
+
if (input.description !== void 0) {
|
|
2503
|
+
body.exposureDescription = input.description?.trim() || null;
|
|
2504
|
+
}
|
|
2505
|
+
if (input.subscribers !== void 0) {
|
|
2506
|
+
body.bigquery = { subscribers: toBackendSubscribers(input.subscribers) };
|
|
2507
|
+
}
|
|
2508
|
+
if (Object.keys(body).length === 0) {
|
|
2509
|
+
throw new Error("updateListing requires at least one field");
|
|
2510
|
+
}
|
|
2511
|
+
const { data } = await client.patch(`/buckets/{bucketId}/listing`, { path: { bucketId }, body }, { signal });
|
|
2512
|
+
return data;
|
|
2513
|
+
};
|
|
2514
|
+
const deleteListing = async (bucketId, signal) => {
|
|
2515
|
+
const { data } = await client.delete(
|
|
2516
|
+
`/buckets/{bucketId}/listing`,
|
|
2517
|
+
{ path: { bucketId } },
|
|
2518
|
+
{ signal }
|
|
2519
|
+
);
|
|
2520
|
+
return data;
|
|
2521
|
+
};
|
|
2522
|
+
const listListings = async (signal) => {
|
|
2523
|
+
const { data } = await client.get(`/listings`, {}, { signal });
|
|
2524
|
+
return data.map((row) => toBucketListing(row, row.bucketId));
|
|
2525
|
+
};
|
|
2294
2526
|
return {
|
|
2295
2527
|
getBuckets,
|
|
2296
2528
|
getBucket,
|
|
@@ -2299,7 +2531,12 @@ var createBuckets = (client) => {
|
|
|
2299
2531
|
deleteBucket,
|
|
2300
2532
|
deleteBucketAsync,
|
|
2301
2533
|
createScheduledRefresh,
|
|
2302
|
-
deleteScheduledTask
|
|
2534
|
+
deleteScheduledTask,
|
|
2535
|
+
getListing,
|
|
2536
|
+
createListing,
|
|
2537
|
+
updateListing,
|
|
2538
|
+
deleteListing,
|
|
2539
|
+
listListings
|
|
2303
2540
|
};
|
|
2304
2541
|
};
|
|
2305
2542
|
|
|
@@ -3366,10 +3603,29 @@ var createStorageSdk = ({ storageClient }) => {
|
|
|
3366
3603
|
const job = await storageClient.tables.exportAsync(tableId, body, options?.abortSignal);
|
|
3367
3604
|
return waitForJob(job, options);
|
|
3368
3605
|
};
|
|
3606
|
+
const getBucketListing = async (bucketId, signal) => storageClient.buckets.getListing(bucketId, signal);
|
|
3607
|
+
const listBucketListings = async (signal) => storageClient.buckets.listListings(signal);
|
|
3608
|
+
const createBucketListing = async (bucketId, input, options) => {
|
|
3609
|
+
const job = await storageClient.buckets.createListing(bucketId, input, options?.abortSignal);
|
|
3610
|
+
return waitForJob(job, options);
|
|
3611
|
+
};
|
|
3612
|
+
const updateBucketListing = async (bucketId, input, options) => {
|
|
3613
|
+
const job = await storageClient.buckets.updateListing(bucketId, input, options?.abortSignal);
|
|
3614
|
+
return waitForJob(job, options);
|
|
3615
|
+
};
|
|
3616
|
+
const deleteBucketListing = async (bucketId, options) => {
|
|
3617
|
+
const job = await storageClient.buckets.deleteListing(bucketId, options?.abortSignal);
|
|
3618
|
+
return waitForJob(job, options);
|
|
3619
|
+
};
|
|
3369
3620
|
return {
|
|
3370
3621
|
createTable,
|
|
3371
3622
|
importFromFile,
|
|
3372
|
-
exportToFile
|
|
3623
|
+
exportToFile,
|
|
3624
|
+
getBucketListing,
|
|
3625
|
+
listBucketListings,
|
|
3626
|
+
createBucketListing,
|
|
3627
|
+
updateBucketListing,
|
|
3628
|
+
deleteBucketListing
|
|
3373
3629
|
};
|
|
3374
3630
|
};
|
|
3375
3631
|
|
|
@@ -3674,6 +3930,11 @@ var createClients = async ({
|
|
|
3674
3930
|
baseUrl: serviceBaseUrl,
|
|
3675
3931
|
middlewares: commonMiddlewares
|
|
3676
3932
|
})
|
|
3933
|
+
},
|
|
3934
|
+
{
|
|
3935
|
+
serviceId: "oauth",
|
|
3936
|
+
clientName: "oauth",
|
|
3937
|
+
clientFn: (serviceBaseUrl) => createOauthClient({ baseUrl: serviceBaseUrl, middlewares: commonMiddlewares })
|
|
3677
3938
|
}
|
|
3678
3939
|
]
|
|
3679
3940
|
});
|
|
@@ -3843,7 +4104,12 @@ var createLoggingMiddleware = (options = {}) => {
|
|
|
3843
4104
|
|
|
3844
4105
|
// src/middlewares/retryMiddleware.ts
|
|
3845
4106
|
var DEFAULT_MAX_RETRIES = 5;
|
|
3846
|
-
var DEFAULT_RETRYABLE_STATUSES = [
|
|
4107
|
+
var DEFAULT_RETRYABLE_STATUSES = [
|
|
4108
|
+
HttpStatus.INTERNAL_SERVER_ERROR,
|
|
4109
|
+
HttpStatus.BAD_GATEWAY,
|
|
4110
|
+
HttpStatus.SERVICE_UNAVAILABLE,
|
|
4111
|
+
HttpStatus.GATEWAY_TIMEOUT
|
|
4112
|
+
];
|
|
3847
4113
|
var DEFAULT_BACKOFF_FACTOR = 0.3;
|
|
3848
4114
|
var defaultShouldRetry = (error) => error instanceof ApiError && DEFAULT_RETRYABLE_STATUSES.includes(error.response.status);
|
|
3849
4115
|
var createRetryMiddleware = (options) => {
|