dataiku-sdk 3.6.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -6
- package/bin/bun-version.js +14 -0
- package/bin/dss.js +23 -12
- package/dist/build-metadata.json +1 -1
- package/dist/packages/types/src/index.d.ts +74 -1
- package/dist/packages/types/src/index.js +53 -1
- package/dist/src/cli/coerce.d.ts +1 -0
- package/dist/src/cli/coerce.js +19 -15
- package/dist/src/cli/command-syntax.json +3521 -416
- package/dist/src/cli/commands/analysis.js +19 -1
- package/dist/src/cli/commands/bundle.js +22 -0
- package/dist/src/cli/commands/connection.js +26 -2
- package/dist/src/cli/commands/data-quality.js +33 -1
- package/dist/src/cli/commands/dataset.js +35 -4
- package/dist/src/cli/commands/discussion.js +15 -0
- package/dist/src/cli/commands/doctor.js +1 -1
- package/dist/src/cli/commands/flow.d.ts +5 -0
- package/dist/src/cli/commands/flow.js +57 -0
- package/dist/src/cli/commands/future.js +8 -0
- package/dist/src/cli/commands/index.js +6 -0
- package/dist/src/cli/commands/job.js +29 -6
- package/dist/src/cli/commands/metrics.js +21 -1
- package/dist/src/cli/commands/ml-task.d.ts +5 -0
- package/dist/src/cli/commands/ml-task.js +86 -16
- package/dist/src/cli/commands/mlflow.d.ts +11 -0
- package/dist/src/cli/commands/mlflow.js +121 -0
- package/dist/src/cli/commands/plugin.js +5 -11
- package/dist/src/cli/commands/project-deployer.js +70 -0
- package/dist/src/cli/commands/project-library.js +2 -5
- package/dist/src/cli/commands/project.js +8 -0
- package/dist/src/cli/commands/recipe.d.ts +9 -0
- package/dist/src/cli/commands/recipe.js +93 -7
- package/dist/src/cli/commands/saved-model.d.ts +1 -1
- package/dist/src/cli/commands/saved-model.js +9 -76
- package/dist/src/cli/commands/streaming-endpoint.js +30 -1
- package/dist/src/cli/commands/webapp.js +8 -0
- package/dist/src/cli/commands/wiki.js +22 -0
- package/dist/src/cli/commands/workspace.js +8 -0
- package/dist/src/cli/contract.d.ts +16 -15
- package/dist/src/cli/contract.js +139 -3404
- package/dist/src/cli/doctor.d.ts +13 -0
- package/dist/src/cli/doctor.js +41 -1
- package/dist/src/cli/flags.d.ts +7 -1
- package/dist/src/cli/flags.js +78 -6
- package/dist/src/cli/helpers/app-successor.js +1 -2
- package/dist/src/cli/helpers/documentation.d.ts +21 -0
- package/dist/src/cli/helpers/documentation.js +53 -0
- package/dist/src/cli/helpers/trained-model.d.ts +26 -0
- package/dist/src/cli/helpers/trained-model.js +144 -0
- package/dist/src/cli/list-output.d.ts +7 -0
- package/dist/src/cli/list-output.js +77 -0
- package/dist/src/cli/list-shapes.d.ts +21 -0
- package/dist/src/cli/list-shapes.js +111 -0
- package/dist/src/cli/output-schemas.d.ts +0 -14
- package/dist/src/cli/output-schemas.js +4 -7
- package/dist/src/cli/output.d.ts +0 -1
- package/dist/src/cli/output.js +27 -19
- package/dist/src/cli/plans.d.ts +14 -0
- package/dist/src/cli/plans.js +3684 -0
- package/dist/src/cli/usage.d.ts +7 -0
- package/dist/src/cli/usage.js +20 -1
- package/dist/src/cli/version.d.ts +2 -2
- package/dist/src/cli/version.js +2 -2
- package/dist/src/cli.js +127 -113
- package/dist/src/client.d.ts +52 -43
- package/dist/src/client.js +267 -96
- package/dist/src/errors.d.ts +11 -1
- package/dist/src/errors.js +31 -47
- package/dist/src/generated/action-output-schemas.json +345 -89
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.js +3 -0
- package/dist/src/resources/analyses.d.ts +8 -0
- package/dist/src/resources/analyses.js +13 -1
- package/dist/src/resources/bundles.d.ts +34 -0
- package/dist/src/resources/bundles.js +67 -0
- package/dist/src/resources/connections.d.ts +9 -0
- package/dist/src/resources/connections.js +15 -0
- package/dist/src/resources/data-quality.d.ts +20 -0
- package/dist/src/resources/data-quality.js +30 -0
- package/dist/src/resources/dataset-create.d.ts +19 -0
- package/dist/src/resources/dataset-create.js +66 -0
- package/dist/src/resources/datasets.d.ts +25 -15
- package/dist/src/resources/datasets.js +59 -111
- package/dist/src/resources/discussions.d.ts +5 -0
- package/dist/src/resources/discussions.js +7 -0
- package/dist/src/resources/documentation.d.ts +25 -0
- package/dist/src/resources/documentation.js +16 -0
- package/dist/src/resources/flow.d.ts +48 -0
- package/dist/src/resources/flow.js +65 -0
- package/dist/src/resources/futures.d.ts +23 -0
- package/dist/src/resources/futures.js +32 -0
- package/dist/src/resources/jobs.js +102 -2
- package/dist/src/resources/metrics.d.ts +10 -0
- package/dist/src/resources/metrics.js +10 -0
- package/dist/src/resources/ml-tasks.d.ts +65 -2
- package/dist/src/resources/ml-tasks.js +102 -28
- package/dist/src/resources/mlflow-extension.d.ts +73 -0
- package/dist/src/resources/mlflow-extension.js +105 -0
- package/dist/src/resources/projects.d.ts +6 -0
- package/dist/src/resources/projects.js +8 -0
- package/dist/src/resources/recipe-create.d.ts +65 -0
- package/dist/src/resources/recipe-create.js +338 -0
- package/dist/src/resources/recipes.d.ts +28 -29
- package/dist/src/resources/recipes.js +126 -245
- package/dist/src/resources/saved-models.d.ts +10 -6
- package/dist/src/resources/saved-models.js +16 -14
- package/dist/src/resources/scenarios.js +8 -14
- package/dist/src/resources/streaming-endpoints.d.ts +12 -0
- package/dist/src/resources/streaming-endpoints.js +15 -0
- package/dist/src/resources/trained-model.d.ts +60 -0
- package/dist/src/resources/trained-model.js +98 -0
- package/dist/src/resources/webapps.d.ts +8 -0
- package/dist/src/resources/webapps.js +10 -0
- package/dist/src/resources/wiki.d.ts +5 -0
- package/dist/src/resources/wiki.js +7 -0
- package/dist/src/resources/workspaces.d.ts +2 -0
- package/dist/src/resources/workspaces.js +4 -0
- package/dist/src/utils/response-file.js +20 -9
- package/dist/src/utils/secret-sanitize.d.ts +7 -0
- package/dist/src/utils/secret-sanitize.js +46 -0
- package/package.json +25 -26
- package/plugin.json +1 -1
- package/skills/dataiku-dss/SKILL.md +1 -1
- package/skills/dataiku-dss/references/authentication.md +3 -1
- package/skills/dataiku-dss/references/coding.md +1 -0
- package/skills/dataiku-dss/references/discovery.md +4 -6
- package/skills/dataiku-dss/references/troubleshooting.md +3 -2
package/dist/src/client.js
CHANGED
|
@@ -1,52 +1,8 @@
|
|
|
1
1
|
import { readFileSync, } from "node:fs";
|
|
2
2
|
import { basename, } from "node:path";
|
|
3
|
-
import { getCACertificates, } from "node:tls";
|
|
4
3
|
import { Value, } from "@sinclair/typebox/value";
|
|
5
4
|
import { safeParseSchema, } from "./schemas.js";
|
|
6
5
|
import { classifyDataikuError, ClientValidationError, DataikuError, nonJsonResponseBody, } from "./errors.js";
|
|
7
|
-
import { AnalysesResource, } from "./resources/analyses.js";
|
|
8
|
-
import { ApiDeployerResource, } from "./resources/api-deployer.js";
|
|
9
|
-
import { ApiServicesResource, } from "./resources/api-services.js";
|
|
10
|
-
import { ApplicationsResource, } from "./resources/applications.js";
|
|
11
|
-
import { BundlesResource, ProjectDeployerResource, } from "./resources/bundles.js";
|
|
12
|
-
import { CodeEnvsResource, } from "./resources/code-envs.js";
|
|
13
|
-
import { ConnectionsResource, } from "./resources/connections.js";
|
|
14
|
-
import { ContinuousActivitiesResource, } from "./resources/continuous-activities.js";
|
|
15
|
-
import { DashboardsResource, } from "./resources/dashboards.js";
|
|
16
|
-
import { DataCollectionsResource, } from "./resources/data-collections.js";
|
|
17
|
-
import { DataQualityResource, } from "./resources/data-quality.js";
|
|
18
|
-
import { DatasetsResource, } from "./resources/datasets.js";
|
|
19
|
-
import { DiscussionsResource, } from "./resources/discussions.js";
|
|
20
|
-
import { FlowZonesResource, } from "./resources/flow-zones.js";
|
|
21
|
-
import { FoldersResource, } from "./resources/folders.js";
|
|
22
|
-
import { FuturesResource, } from "./resources/futures.js";
|
|
23
|
-
import { GroupsResource, } from "./resources/groups.js";
|
|
24
|
-
import { InsightsResource, } from "./resources/insights.js";
|
|
25
|
-
import { JobsResource, } from "./resources/jobs.js";
|
|
26
|
-
import { KnowledgeBanksResource, } from "./resources/knowledge-banks.js";
|
|
27
|
-
import { LlmsResource, } from "./resources/llms.js";
|
|
28
|
-
import { MacrosResource, } from "./resources/macros.js";
|
|
29
|
-
import { MeaningsResource, } from "./resources/meanings.js";
|
|
30
|
-
import { MetricsResource, } from "./resources/metrics.js";
|
|
31
|
-
import { MlTasksResource, } from "./resources/ml-tasks.js";
|
|
32
|
-
import { ModelEvaluationStoresResource, } from "./resources/model-evaluation-stores.js";
|
|
33
|
-
import { NotebooksResource, } from "./resources/notebooks.js";
|
|
34
|
-
import { PluginsResource, } from "./resources/plugins.js";
|
|
35
|
-
import { ProjectFoldersResource, } from "./resources/project-folders.js";
|
|
36
|
-
import { ProjectGitResource, } from "./resources/project-git.js";
|
|
37
|
-
import { ProjectLibraryResource, } from "./resources/project-library.js";
|
|
38
|
-
import { ProjectsResource, } from "./resources/projects.js";
|
|
39
|
-
import { RecipesResource, } from "./resources/recipes.js";
|
|
40
|
-
import { SavedModelsResource, } from "./resources/saved-models.js";
|
|
41
|
-
import { ScenariosResource, } from "./resources/scenarios.js";
|
|
42
|
-
import { SqlResource, } from "./resources/sql.js";
|
|
43
|
-
import { StatisticsResource, } from "./resources/statistics.js";
|
|
44
|
-
import { StreamingEndpointsResource, } from "./resources/streaming-endpoints.js";
|
|
45
|
-
import { UsersResource, } from "./resources/users.js";
|
|
46
|
-
import { VariablesResource, } from "./resources/variables.js";
|
|
47
|
-
import { WebappsResource, } from "./resources/webapps.js";
|
|
48
|
-
import { WikiResource, } from "./resources/wiki.js";
|
|
49
|
-
import { WorkspacesResource, } from "./resources/workspaces.js";
|
|
50
6
|
/* ------------------------------------------------------------------ */
|
|
51
7
|
/* Constants */
|
|
52
8
|
/* ------------------------------------------------------------------ */
|
|
@@ -94,6 +50,24 @@ function retryAfterDelayMs(value) {
|
|
|
94
50
|
function isTransientError(status, body) {
|
|
95
51
|
return classifyDataikuError(status, body).category === "transient";
|
|
96
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Transport failure text that keeps the system error code: Bun puts it on the
|
|
55
|
+
* error (`ConnectionRefused`, `ENOTFOUND`), Node's fetch on `cause`.
|
|
56
|
+
*/
|
|
57
|
+
function transportErrorDetail(error) {
|
|
58
|
+
if (!(error instanceof Error))
|
|
59
|
+
return "Unknown transport error";
|
|
60
|
+
const cause = error.cause instanceof Error ? error.cause : undefined;
|
|
61
|
+
let code;
|
|
62
|
+
for (const candidate of [error, cause,]) {
|
|
63
|
+
if (candidate && "code" in candidate && typeof candidate.code === "string") {
|
|
64
|
+
code = candidate.code;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const message = cause?.message ?? error.message;
|
|
69
|
+
return code && !message.includes(code) ? `${code}: ${message}` : message;
|
|
70
|
+
}
|
|
97
71
|
function shouldRetryMethod(method) {
|
|
98
72
|
return method.toUpperCase() === "GET";
|
|
99
73
|
}
|
|
@@ -183,6 +157,8 @@ function buildFetchTlsOptions(config) {
|
|
|
183
157
|
tls.rejectUnauthorized = rejectUnauthorized;
|
|
184
158
|
if (caCertPath) {
|
|
185
159
|
try {
|
|
160
|
+
// node:tls costs ~12 ms to load; only a custom CA bundle needs it.
|
|
161
|
+
const { getCACertificates, } = require("node:tls");
|
|
186
162
|
tls.ca = [...getCACertificates("default"), readFileSync(caCertPath, "utf-8"),];
|
|
187
163
|
}
|
|
188
164
|
catch (error) {
|
|
@@ -249,6 +225,8 @@ export class DataikuClient {
|
|
|
249
225
|
scenariosResource;
|
|
250
226
|
foldersResource;
|
|
251
227
|
flowZonesResource;
|
|
228
|
+
flowResource;
|
|
229
|
+
mlflowExtensionResource;
|
|
252
230
|
variablesResource;
|
|
253
231
|
connectionsResource;
|
|
254
232
|
codeEnvsResource;
|
|
@@ -283,137 +261,329 @@ export class DataikuClient {
|
|
|
283
261
|
pluginsResource;
|
|
284
262
|
usersResource;
|
|
285
263
|
groupsResource;
|
|
264
|
+
// Resource modules load on first access (like commands/index.ts): a command
|
|
265
|
+
// that touches one resource does not parse the other forty-odd.
|
|
286
266
|
get projects() {
|
|
287
|
-
|
|
267
|
+
if (!this.projectsResource) {
|
|
268
|
+
const { ProjectsResource: Resource, } = require("./resources/projects.js");
|
|
269
|
+
this.projectsResource = new Resource(this);
|
|
270
|
+
}
|
|
271
|
+
return this.projectsResource;
|
|
288
272
|
}
|
|
289
273
|
get datasets() {
|
|
290
|
-
|
|
274
|
+
if (!this.datasetsResource) {
|
|
275
|
+
const { DatasetsResource: Resource, } = require("./resources/datasets.js");
|
|
276
|
+
this.datasetsResource = new Resource(this);
|
|
277
|
+
}
|
|
278
|
+
return this.datasetsResource;
|
|
291
279
|
}
|
|
292
280
|
get dashboards() {
|
|
293
|
-
|
|
281
|
+
if (!this.dashboardsResource) {
|
|
282
|
+
const { DashboardsResource: Resource, } = require("./resources/dashboards.js");
|
|
283
|
+
this.dashboardsResource = new Resource(this);
|
|
284
|
+
}
|
|
285
|
+
return this.dashboardsResource;
|
|
294
286
|
}
|
|
295
287
|
get dataQuality() {
|
|
296
|
-
|
|
288
|
+
if (!this.dataQualityResource) {
|
|
289
|
+
const { DataQualityResource: Resource, } = require("./resources/data-quality.js");
|
|
290
|
+
this.dataQualityResource = new Resource(this);
|
|
291
|
+
}
|
|
292
|
+
return this.dataQualityResource;
|
|
297
293
|
}
|
|
298
294
|
get recipes() {
|
|
299
|
-
|
|
295
|
+
if (!this.recipesResource) {
|
|
296
|
+
const { RecipesResource: Resource, } = require("./resources/recipes.js");
|
|
297
|
+
this.recipesResource = new Resource(this);
|
|
298
|
+
}
|
|
299
|
+
return this.recipesResource;
|
|
300
300
|
}
|
|
301
301
|
get jobs() {
|
|
302
|
-
|
|
302
|
+
if (!this.jobsResource) {
|
|
303
|
+
const { JobsResource: Resource, } = require("./resources/jobs.js");
|
|
304
|
+
this.jobsResource = new Resource(this);
|
|
305
|
+
}
|
|
306
|
+
return this.jobsResource;
|
|
303
307
|
}
|
|
304
308
|
get futures() {
|
|
305
|
-
|
|
309
|
+
if (!this.futuresResource) {
|
|
310
|
+
const { FuturesResource: Resource, } = require("./resources/futures.js");
|
|
311
|
+
this.futuresResource = new Resource(this);
|
|
312
|
+
}
|
|
313
|
+
return this.futuresResource;
|
|
306
314
|
}
|
|
307
315
|
get scenarios() {
|
|
308
|
-
|
|
316
|
+
if (!this.scenariosResource) {
|
|
317
|
+
const { ScenariosResource: Resource, } = require("./resources/scenarios.js");
|
|
318
|
+
this.scenariosResource = new Resource(this);
|
|
319
|
+
}
|
|
320
|
+
return this.scenariosResource;
|
|
309
321
|
}
|
|
310
322
|
get folders() {
|
|
311
|
-
|
|
323
|
+
if (!this.foldersResource) {
|
|
324
|
+
const { FoldersResource: Resource, } = require("./resources/folders.js");
|
|
325
|
+
this.foldersResource = new Resource(this);
|
|
326
|
+
}
|
|
327
|
+
return this.foldersResource;
|
|
312
328
|
}
|
|
313
329
|
get flowZones() {
|
|
314
|
-
|
|
330
|
+
if (!this.flowZonesResource) {
|
|
331
|
+
const { FlowZonesResource: Resource, } = require("./resources/flow-zones.js");
|
|
332
|
+
this.flowZonesResource = new Resource(this);
|
|
333
|
+
}
|
|
334
|
+
return this.flowZonesResource;
|
|
335
|
+
}
|
|
336
|
+
get flow() {
|
|
337
|
+
if (!this.flowResource) {
|
|
338
|
+
const { FlowResource: Resource, } = require("./resources/flow.js");
|
|
339
|
+
this.flowResource = new Resource(this);
|
|
340
|
+
}
|
|
341
|
+
return this.flowResource;
|
|
342
|
+
}
|
|
343
|
+
get mlflowExtension() {
|
|
344
|
+
if (!this.mlflowExtensionResource) {
|
|
345
|
+
const { MlflowExtensionResource: Resource, } = require("./resources/mlflow-extension.js");
|
|
346
|
+
this.mlflowExtensionResource = new Resource(this);
|
|
347
|
+
}
|
|
348
|
+
return this.mlflowExtensionResource;
|
|
315
349
|
}
|
|
316
350
|
get variables() {
|
|
317
|
-
|
|
351
|
+
if (!this.variablesResource) {
|
|
352
|
+
const { VariablesResource: Resource, } = require("./resources/variables.js");
|
|
353
|
+
this.variablesResource = new Resource(this);
|
|
354
|
+
}
|
|
355
|
+
return this.variablesResource;
|
|
318
356
|
}
|
|
319
357
|
get connections() {
|
|
320
|
-
|
|
358
|
+
if (!this.connectionsResource) {
|
|
359
|
+
const { ConnectionsResource: Resource, } = require("./resources/connections.js");
|
|
360
|
+
this.connectionsResource = new Resource(this);
|
|
361
|
+
}
|
|
362
|
+
return this.connectionsResource;
|
|
321
363
|
}
|
|
322
364
|
get codeEnvs() {
|
|
323
|
-
|
|
365
|
+
if (!this.codeEnvsResource) {
|
|
366
|
+
const { CodeEnvsResource: Resource, } = require("./resources/code-envs.js");
|
|
367
|
+
this.codeEnvsResource = new Resource(this);
|
|
368
|
+
}
|
|
369
|
+
return this.codeEnvsResource;
|
|
324
370
|
}
|
|
325
371
|
get insights() {
|
|
326
|
-
|
|
372
|
+
if (!this.insightsResource) {
|
|
373
|
+
const { InsightsResource: Resource, } = require("./resources/insights.js");
|
|
374
|
+
this.insightsResource = new Resource(this);
|
|
375
|
+
}
|
|
376
|
+
return this.insightsResource;
|
|
327
377
|
}
|
|
328
378
|
get sql() {
|
|
329
|
-
|
|
379
|
+
if (!this.sqlResource) {
|
|
380
|
+
const { SqlResource: Resource, } = require("./resources/sql.js");
|
|
381
|
+
this.sqlResource = new Resource(this);
|
|
382
|
+
}
|
|
383
|
+
return this.sqlResource;
|
|
330
384
|
}
|
|
331
385
|
get notebooks() {
|
|
332
|
-
|
|
386
|
+
if (!this.notebooksResource) {
|
|
387
|
+
const { NotebooksResource: Resource, } = require("./resources/notebooks.js");
|
|
388
|
+
this.notebooksResource = new Resource(this);
|
|
389
|
+
}
|
|
390
|
+
return this.notebooksResource;
|
|
333
391
|
}
|
|
334
392
|
get wiki() {
|
|
335
|
-
|
|
393
|
+
if (!this.wikiResource) {
|
|
394
|
+
const { WikiResource: Resource, } = require("./resources/wiki.js");
|
|
395
|
+
this.wikiResource = new Resource(this);
|
|
396
|
+
}
|
|
397
|
+
return this.wikiResource;
|
|
336
398
|
}
|
|
337
399
|
get applications() {
|
|
338
|
-
|
|
400
|
+
if (!this.applicationsResource) {
|
|
401
|
+
const { ApplicationsResource: Resource, } = require("./resources/applications.js");
|
|
402
|
+
this.applicationsResource = new Resource(this);
|
|
403
|
+
}
|
|
404
|
+
return this.applicationsResource;
|
|
339
405
|
}
|
|
340
406
|
get webapps() {
|
|
341
|
-
|
|
407
|
+
if (!this.webappsResource) {
|
|
408
|
+
const { WebappsResource: Resource, } = require("./resources/webapps.js");
|
|
409
|
+
this.webappsResource = new Resource(this);
|
|
410
|
+
}
|
|
411
|
+
return this.webappsResource;
|
|
342
412
|
}
|
|
343
413
|
get apiServices() {
|
|
344
|
-
|
|
414
|
+
if (!this.apiServicesResource) {
|
|
415
|
+
const { ApiServicesResource: Resource, } = require("./resources/api-services.js");
|
|
416
|
+
this.apiServicesResource = new Resource(this);
|
|
417
|
+
}
|
|
418
|
+
return this.apiServicesResource;
|
|
345
419
|
}
|
|
346
420
|
get apiDeployer() {
|
|
347
|
-
|
|
421
|
+
if (!this.apiDeployerResource) {
|
|
422
|
+
const { ApiDeployerResource: Resource, } = require("./resources/api-deployer.js");
|
|
423
|
+
this.apiDeployerResource = new Resource(this);
|
|
424
|
+
}
|
|
425
|
+
return this.apiDeployerResource;
|
|
348
426
|
}
|
|
349
427
|
get bundles() {
|
|
350
|
-
|
|
428
|
+
if (!this.bundlesResource) {
|
|
429
|
+
const { BundlesResource: Resource, } = require("./resources/bundles.js");
|
|
430
|
+
this.bundlesResource = new Resource(this);
|
|
431
|
+
}
|
|
432
|
+
return this.bundlesResource;
|
|
351
433
|
}
|
|
352
434
|
get projectDeployer() {
|
|
353
|
-
|
|
435
|
+
if (!this.projectDeployerResource) {
|
|
436
|
+
const { ProjectDeployerResource: Resource, } = require("./resources/bundles.js");
|
|
437
|
+
this.projectDeployerResource = new Resource(this);
|
|
438
|
+
}
|
|
439
|
+
return this.projectDeployerResource;
|
|
354
440
|
}
|
|
355
441
|
get projectLibrary() {
|
|
356
|
-
|
|
442
|
+
if (!this.projectLibraryResource) {
|
|
443
|
+
const { ProjectLibraryResource: Resource, } = require("./resources/project-library.js");
|
|
444
|
+
this.projectLibraryResource = new Resource(this);
|
|
445
|
+
}
|
|
446
|
+
return this.projectLibraryResource;
|
|
357
447
|
}
|
|
358
448
|
get projectGit() {
|
|
359
|
-
|
|
449
|
+
if (!this.projectGitResource) {
|
|
450
|
+
const { ProjectGitResource: Resource, } = require("./resources/project-git.js");
|
|
451
|
+
this.projectGitResource = new Resource(this);
|
|
452
|
+
}
|
|
453
|
+
return this.projectGitResource;
|
|
360
454
|
}
|
|
361
455
|
get streamingEndpoints() {
|
|
362
|
-
|
|
456
|
+
if (!this.streamingEndpointsResource) {
|
|
457
|
+
const { StreamingEndpointsResource: Resource, } = require("./resources/streaming-endpoints.js");
|
|
458
|
+
this.streamingEndpointsResource = new Resource(this);
|
|
459
|
+
}
|
|
460
|
+
return this.streamingEndpointsResource;
|
|
363
461
|
}
|
|
364
462
|
get continuousActivities() {
|
|
365
|
-
|
|
463
|
+
if (!this.continuousActivitiesResource) {
|
|
464
|
+
const { ContinuousActivitiesResource: Resource, } = require("./resources/continuous-activities.js");
|
|
465
|
+
this.continuousActivitiesResource = new Resource(this);
|
|
466
|
+
}
|
|
467
|
+
return this.continuousActivitiesResource;
|
|
366
468
|
}
|
|
367
469
|
get statistics() {
|
|
368
|
-
|
|
470
|
+
if (!this.statisticsResource) {
|
|
471
|
+
const { StatisticsResource: Resource, } = require("./resources/statistics.js");
|
|
472
|
+
this.statisticsResource = new Resource(this);
|
|
473
|
+
}
|
|
474
|
+
return this.statisticsResource;
|
|
369
475
|
}
|
|
370
476
|
get discussions() {
|
|
371
|
-
|
|
477
|
+
if (!this.discussionsResource) {
|
|
478
|
+
const { DiscussionsResource: Resource, } = require("./resources/discussions.js");
|
|
479
|
+
this.discussionsResource = new Resource(this);
|
|
480
|
+
}
|
|
481
|
+
return this.discussionsResource;
|
|
372
482
|
}
|
|
373
483
|
get workspaces() {
|
|
374
|
-
|
|
484
|
+
if (!this.workspacesResource) {
|
|
485
|
+
const { WorkspacesResource: Resource, } = require("./resources/workspaces.js");
|
|
486
|
+
this.workspacesResource = new Resource(this);
|
|
487
|
+
}
|
|
488
|
+
return this.workspacesResource;
|
|
375
489
|
}
|
|
376
490
|
get metrics() {
|
|
377
|
-
|
|
491
|
+
if (!this.metricsResource) {
|
|
492
|
+
const { MetricsResource: Resource, } = require("./resources/metrics.js");
|
|
493
|
+
this.metricsResource = new Resource(this);
|
|
494
|
+
}
|
|
495
|
+
return this.metricsResource;
|
|
378
496
|
}
|
|
379
497
|
get meanings() {
|
|
380
|
-
|
|
498
|
+
if (!this.meaningsResource) {
|
|
499
|
+
const { MeaningsResource: Resource, } = require("./resources/meanings.js");
|
|
500
|
+
this.meaningsResource = new Resource(this);
|
|
501
|
+
}
|
|
502
|
+
return this.meaningsResource;
|
|
381
503
|
}
|
|
382
504
|
get analyses() {
|
|
383
|
-
|
|
505
|
+
if (!this.analysesResource) {
|
|
506
|
+
const { AnalysesResource: Resource, } = require("./resources/analyses.js");
|
|
507
|
+
this.analysesResource = new Resource(this);
|
|
508
|
+
}
|
|
509
|
+
return this.analysesResource;
|
|
384
510
|
}
|
|
385
511
|
get mlTasks() {
|
|
386
|
-
|
|
512
|
+
if (!this.mlTasksResource) {
|
|
513
|
+
const { MlTasksResource: Resource, } = require("./resources/ml-tasks.js");
|
|
514
|
+
this.mlTasksResource = new Resource(this);
|
|
515
|
+
}
|
|
516
|
+
return this.mlTasksResource;
|
|
387
517
|
}
|
|
388
518
|
get savedModels() {
|
|
389
|
-
|
|
519
|
+
if (!this.savedModelsResource) {
|
|
520
|
+
const { SavedModelsResource: Resource, } = require("./resources/saved-models.js");
|
|
521
|
+
this.savedModelsResource = new Resource(this);
|
|
522
|
+
}
|
|
523
|
+
return this.savedModelsResource;
|
|
390
524
|
}
|
|
391
525
|
get modelEvaluationStores() {
|
|
392
|
-
|
|
526
|
+
if (!this.modelEvaluationStoresResource) {
|
|
527
|
+
const { ModelEvaluationStoresResource: Resource, } = require("./resources/model-evaluation-stores.js");
|
|
528
|
+
this.modelEvaluationStoresResource = new Resource(this);
|
|
529
|
+
}
|
|
530
|
+
return this.modelEvaluationStoresResource;
|
|
393
531
|
}
|
|
394
532
|
get projectFolders() {
|
|
395
|
-
|
|
533
|
+
if (!this.projectFoldersResource) {
|
|
534
|
+
const { ProjectFoldersResource: Resource, } = require("./resources/project-folders.js");
|
|
535
|
+
this.projectFoldersResource = new Resource(this);
|
|
536
|
+
}
|
|
537
|
+
return this.projectFoldersResource;
|
|
396
538
|
}
|
|
397
539
|
get dataCollections() {
|
|
398
|
-
|
|
540
|
+
if (!this.dataCollectionsResource) {
|
|
541
|
+
const { DataCollectionsResource: Resource, } = require("./resources/data-collections.js");
|
|
542
|
+
this.dataCollectionsResource = new Resource(this);
|
|
543
|
+
}
|
|
544
|
+
return this.dataCollectionsResource;
|
|
399
545
|
}
|
|
400
546
|
get llms() {
|
|
401
|
-
|
|
547
|
+
if (!this.llmsResource) {
|
|
548
|
+
const { LlmsResource: Resource, } = require("./resources/llms.js");
|
|
549
|
+
this.llmsResource = new Resource(this);
|
|
550
|
+
}
|
|
551
|
+
return this.llmsResource;
|
|
402
552
|
}
|
|
403
553
|
get knowledgeBanks() {
|
|
404
|
-
|
|
554
|
+
if (!this.knowledgeBanksResource) {
|
|
555
|
+
const { KnowledgeBanksResource: Resource, } = require("./resources/knowledge-banks.js");
|
|
556
|
+
this.knowledgeBanksResource = new Resource(this);
|
|
557
|
+
}
|
|
558
|
+
return this.knowledgeBanksResource;
|
|
405
559
|
}
|
|
406
560
|
get macros() {
|
|
407
|
-
|
|
561
|
+
if (!this.macrosResource) {
|
|
562
|
+
const { MacrosResource: Resource, } = require("./resources/macros.js");
|
|
563
|
+
this.macrosResource = new Resource(this);
|
|
564
|
+
}
|
|
565
|
+
return this.macrosResource;
|
|
408
566
|
}
|
|
409
567
|
get plugins() {
|
|
410
|
-
|
|
568
|
+
if (!this.pluginsResource) {
|
|
569
|
+
const { PluginsResource: Resource, } = require("./resources/plugins.js");
|
|
570
|
+
this.pluginsResource = new Resource(this);
|
|
571
|
+
}
|
|
572
|
+
return this.pluginsResource;
|
|
411
573
|
}
|
|
412
574
|
get users() {
|
|
413
|
-
|
|
575
|
+
if (!this.usersResource) {
|
|
576
|
+
const { UsersResource: Resource, } = require("./resources/users.js");
|
|
577
|
+
this.usersResource = new Resource(this);
|
|
578
|
+
}
|
|
579
|
+
return this.usersResource;
|
|
414
580
|
}
|
|
415
581
|
get groups() {
|
|
416
|
-
|
|
582
|
+
if (!this.groupsResource) {
|
|
583
|
+
const { GroupsResource: Resource, } = require("./resources/groups.js");
|
|
584
|
+
this.groupsResource = new Resource(this);
|
|
585
|
+
}
|
|
586
|
+
return this.groupsResource;
|
|
417
587
|
}
|
|
418
588
|
constructor(config) {
|
|
419
589
|
/* oxlint-disable dss/no-direct-process-env -- SDK constructor defaults (DATAIKU_URL/DATAIKU_API_KEY) for library callers */
|
|
@@ -470,7 +640,7 @@ export class DataikuClient {
|
|
|
470
640
|
/* ---- public: HTTP verbs ---- */
|
|
471
641
|
async get(path, options) {
|
|
472
642
|
const deadlineAt = resolveGetDeadlineAt(options);
|
|
473
|
-
const res = await this.fetchWithRetry(`${this.baseUrl}${path}`, { method: "GET", headers: this.getHeaders(false), }, options?.noRetry === true ? 1 : undefined, deadlineAt);
|
|
643
|
+
const res = await this.fetchWithRetry(`${this.baseUrl}${path}`, { method: "GET", headers: { ...this.getHeaders(false), ...options?.headers, }, }, options?.noRetry === true ? 1 : undefined, deadlineAt);
|
|
474
644
|
return this.parseJsonResponse(res, deadlineAt);
|
|
475
645
|
}
|
|
476
646
|
/**
|
|
@@ -543,7 +713,7 @@ export class DataikuClient {
|
|
|
543
713
|
}
|
|
544
714
|
const res = await this.fetchWithRetry(`${this.baseUrl}${path}`, {
|
|
545
715
|
method: "POST",
|
|
546
|
-
headers: this.getHeaders(body !== undefined),
|
|
716
|
+
headers: { ...this.getHeaders(body !== undefined), ...options?.headers, },
|
|
547
717
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
548
718
|
}, retryMaxAttempts);
|
|
549
719
|
return this.parseJsonResponse(res);
|
|
@@ -1072,7 +1242,13 @@ export class DataikuClient {
|
|
|
1072
1242
|
}
|
|
1073
1243
|
timedOut = true;
|
|
1074
1244
|
}
|
|
1075
|
-
const
|
|
1245
|
+
const detail = timedOut
|
|
1246
|
+
? `Request timed out after ${attemptTimeoutMs}ms`
|
|
1247
|
+
: transportErrorDetail(error);
|
|
1248
|
+
// The classifier that labels the final error also decides the retry:
|
|
1249
|
+
// a refused connection, unknown host, bad URL, or untrusted certificate
|
|
1250
|
+
// fails the same way on every attempt.
|
|
1251
|
+
const canRetry = retryEnabled && attempt < maxAttempts && isTransientError(0, detail);
|
|
1076
1252
|
if (canRetry) {
|
|
1077
1253
|
const delayMs = computeBackoffDelayMs(attempt);
|
|
1078
1254
|
if (deadlineAt === undefined || Date.now() + delayMs <= deadlineAt) {
|
|
@@ -1083,11 +1259,6 @@ export class DataikuClient {
|
|
|
1083
1259
|
await sleep(Math.max(0, deadlineAt - Date.now()));
|
|
1084
1260
|
throw new DataikuError(0, "Request Timeout", `Request deadline exceeded before backoff retry ${attempt + 1}.`, buildRetryMetadata(method, retryEnabled, maxAttempts, attempt, delaysMs, true));
|
|
1085
1261
|
}
|
|
1086
|
-
const detail = timedOut
|
|
1087
|
-
? `Request timed out after ${attemptTimeoutMs}ms`
|
|
1088
|
-
: error instanceof Error
|
|
1089
|
-
? error.message
|
|
1090
|
-
: "Unknown transport error";
|
|
1091
1262
|
this.logTrace({
|
|
1092
1263
|
phase: "error",
|
|
1093
1264
|
method,
|
package/dist/src/errors.d.ts
CHANGED
|
@@ -45,6 +45,10 @@ export declare const UNEXPECTED_RESPONSE_MARKER = "Unexpected DSS response";
|
|
|
45
45
|
export declare function unexpectedResponseError(detail: string, status?: number): DataikuError;
|
|
46
46
|
/** Prefix for a SQL query failure reported by DSS on a 2xx finish-streaming response. */
|
|
47
47
|
export declare const SQL_QUERY_FAILED_MARKER = "SQL query failed in DSS";
|
|
48
|
+
/** Generic permission hint; the CLI names the project when the request was project-scoped. */
|
|
49
|
+
export declare const FORBIDDEN_HINT = "Check API key validity and project permissions for the requested action.";
|
|
50
|
+
/** Generic 404 hint; the CLI names the resource and project when it knows them. */
|
|
51
|
+
export declare const NOT_FOUND_HINT = "Verify projectKey and object identifiers (dataset/recipe/scenario/folder IDs).";
|
|
48
52
|
export declare function classifyDataikuError(status: number, body: string): DataikuErrorTaxonomy;
|
|
49
53
|
export declare class DataikuError extends Error {
|
|
50
54
|
status: number;
|
|
@@ -59,8 +63,14 @@ export declare class DataikuError extends Error {
|
|
|
59
63
|
readonly trustedElapsedMs?: number;
|
|
60
64
|
readonly bodyTruncated?: boolean;
|
|
61
65
|
constructor(status: number, statusText: string, body: string, retry?: DataikuRetryMetadata, requestId?: string, trustedMetadata?: DataikuErrorTrustedMetadata);
|
|
66
|
+
/** Status line only: never echoes response body text. */
|
|
62
67
|
get safeMessage(): string;
|
|
68
|
+
/** The DSS message part of `message` (HTML summarized, server paths stripped, bounded). */
|
|
69
|
+
get summary(): string;
|
|
63
70
|
private static extractSummary;
|
|
64
|
-
|
|
71
|
+
/**
|
|
72
|
+
* One line: status plus the DSS message. Category, retryability, hint, and
|
|
73
|
+
* retry metadata are structured fields on the error, not message prose.
|
|
74
|
+
*/
|
|
65
75
|
private static buildDetails;
|
|
66
76
|
}
|