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.
Files changed (127) hide show
  1. package/README.md +14 -6
  2. package/bin/bun-version.js +14 -0
  3. package/bin/dss.js +23 -12
  4. package/dist/build-metadata.json +1 -1
  5. package/dist/packages/types/src/index.d.ts +74 -1
  6. package/dist/packages/types/src/index.js +53 -1
  7. package/dist/src/cli/coerce.d.ts +1 -0
  8. package/dist/src/cli/coerce.js +19 -15
  9. package/dist/src/cli/command-syntax.json +3521 -416
  10. package/dist/src/cli/commands/analysis.js +19 -1
  11. package/dist/src/cli/commands/bundle.js +22 -0
  12. package/dist/src/cli/commands/connection.js +26 -2
  13. package/dist/src/cli/commands/data-quality.js +33 -1
  14. package/dist/src/cli/commands/dataset.js +35 -4
  15. package/dist/src/cli/commands/discussion.js +15 -0
  16. package/dist/src/cli/commands/doctor.js +1 -1
  17. package/dist/src/cli/commands/flow.d.ts +5 -0
  18. package/dist/src/cli/commands/flow.js +57 -0
  19. package/dist/src/cli/commands/future.js +8 -0
  20. package/dist/src/cli/commands/index.js +6 -0
  21. package/dist/src/cli/commands/job.js +29 -6
  22. package/dist/src/cli/commands/metrics.js +21 -1
  23. package/dist/src/cli/commands/ml-task.d.ts +5 -0
  24. package/dist/src/cli/commands/ml-task.js +86 -16
  25. package/dist/src/cli/commands/mlflow.d.ts +11 -0
  26. package/dist/src/cli/commands/mlflow.js +121 -0
  27. package/dist/src/cli/commands/plugin.js +5 -11
  28. package/dist/src/cli/commands/project-deployer.js +70 -0
  29. package/dist/src/cli/commands/project-library.js +2 -5
  30. package/dist/src/cli/commands/project.js +8 -0
  31. package/dist/src/cli/commands/recipe.d.ts +9 -0
  32. package/dist/src/cli/commands/recipe.js +93 -7
  33. package/dist/src/cli/commands/saved-model.d.ts +1 -1
  34. package/dist/src/cli/commands/saved-model.js +9 -76
  35. package/dist/src/cli/commands/streaming-endpoint.js +30 -1
  36. package/dist/src/cli/commands/webapp.js +8 -0
  37. package/dist/src/cli/commands/wiki.js +22 -0
  38. package/dist/src/cli/commands/workspace.js +8 -0
  39. package/dist/src/cli/contract.d.ts +16 -15
  40. package/dist/src/cli/contract.js +139 -3404
  41. package/dist/src/cli/doctor.d.ts +13 -0
  42. package/dist/src/cli/doctor.js +41 -1
  43. package/dist/src/cli/flags.d.ts +7 -1
  44. package/dist/src/cli/flags.js +78 -6
  45. package/dist/src/cli/helpers/app-successor.js +1 -2
  46. package/dist/src/cli/helpers/documentation.d.ts +21 -0
  47. package/dist/src/cli/helpers/documentation.js +53 -0
  48. package/dist/src/cli/helpers/trained-model.d.ts +26 -0
  49. package/dist/src/cli/helpers/trained-model.js +144 -0
  50. package/dist/src/cli/list-output.d.ts +7 -0
  51. package/dist/src/cli/list-output.js +77 -0
  52. package/dist/src/cli/list-shapes.d.ts +21 -0
  53. package/dist/src/cli/list-shapes.js +111 -0
  54. package/dist/src/cli/output-schemas.d.ts +0 -14
  55. package/dist/src/cli/output-schemas.js +4 -7
  56. package/dist/src/cli/output.d.ts +0 -1
  57. package/dist/src/cli/output.js +27 -19
  58. package/dist/src/cli/plans.d.ts +14 -0
  59. package/dist/src/cli/plans.js +3684 -0
  60. package/dist/src/cli/usage.d.ts +7 -0
  61. package/dist/src/cli/usage.js +20 -1
  62. package/dist/src/cli/version.d.ts +2 -2
  63. package/dist/src/cli/version.js +2 -2
  64. package/dist/src/cli.js +127 -113
  65. package/dist/src/client.d.ts +52 -43
  66. package/dist/src/client.js +267 -96
  67. package/dist/src/errors.d.ts +11 -1
  68. package/dist/src/errors.js +31 -47
  69. package/dist/src/generated/action-output-schemas.json +345 -89
  70. package/dist/src/index.d.ts +5 -1
  71. package/dist/src/index.js +3 -0
  72. package/dist/src/resources/analyses.d.ts +8 -0
  73. package/dist/src/resources/analyses.js +13 -1
  74. package/dist/src/resources/bundles.d.ts +34 -0
  75. package/dist/src/resources/bundles.js +67 -0
  76. package/dist/src/resources/connections.d.ts +9 -0
  77. package/dist/src/resources/connections.js +15 -0
  78. package/dist/src/resources/data-quality.d.ts +20 -0
  79. package/dist/src/resources/data-quality.js +30 -0
  80. package/dist/src/resources/dataset-create.d.ts +19 -0
  81. package/dist/src/resources/dataset-create.js +66 -0
  82. package/dist/src/resources/datasets.d.ts +25 -15
  83. package/dist/src/resources/datasets.js +59 -111
  84. package/dist/src/resources/discussions.d.ts +5 -0
  85. package/dist/src/resources/discussions.js +7 -0
  86. package/dist/src/resources/documentation.d.ts +25 -0
  87. package/dist/src/resources/documentation.js +16 -0
  88. package/dist/src/resources/flow.d.ts +48 -0
  89. package/dist/src/resources/flow.js +65 -0
  90. package/dist/src/resources/futures.d.ts +23 -0
  91. package/dist/src/resources/futures.js +32 -0
  92. package/dist/src/resources/jobs.js +102 -2
  93. package/dist/src/resources/metrics.d.ts +10 -0
  94. package/dist/src/resources/metrics.js +10 -0
  95. package/dist/src/resources/ml-tasks.d.ts +65 -2
  96. package/dist/src/resources/ml-tasks.js +102 -28
  97. package/dist/src/resources/mlflow-extension.d.ts +73 -0
  98. package/dist/src/resources/mlflow-extension.js +105 -0
  99. package/dist/src/resources/projects.d.ts +6 -0
  100. package/dist/src/resources/projects.js +8 -0
  101. package/dist/src/resources/recipe-create.d.ts +65 -0
  102. package/dist/src/resources/recipe-create.js +338 -0
  103. package/dist/src/resources/recipes.d.ts +28 -29
  104. package/dist/src/resources/recipes.js +126 -245
  105. package/dist/src/resources/saved-models.d.ts +10 -6
  106. package/dist/src/resources/saved-models.js +16 -14
  107. package/dist/src/resources/scenarios.js +8 -14
  108. package/dist/src/resources/streaming-endpoints.d.ts +12 -0
  109. package/dist/src/resources/streaming-endpoints.js +15 -0
  110. package/dist/src/resources/trained-model.d.ts +60 -0
  111. package/dist/src/resources/trained-model.js +98 -0
  112. package/dist/src/resources/webapps.d.ts +8 -0
  113. package/dist/src/resources/webapps.js +10 -0
  114. package/dist/src/resources/wiki.d.ts +5 -0
  115. package/dist/src/resources/wiki.js +7 -0
  116. package/dist/src/resources/workspaces.d.ts +2 -0
  117. package/dist/src/resources/workspaces.js +4 -0
  118. package/dist/src/utils/response-file.js +20 -9
  119. package/dist/src/utils/secret-sanitize.d.ts +7 -0
  120. package/dist/src/utils/secret-sanitize.js +46 -0
  121. package/package.json +25 -26
  122. package/plugin.json +1 -1
  123. package/skills/dataiku-dss/SKILL.md +1 -1
  124. package/skills/dataiku-dss/references/authentication.md +3 -1
  125. package/skills/dataiku-dss/references/coding.md +1 -0
  126. package/skills/dataiku-dss/references/discovery.md +4 -6
  127. package/skills/dataiku-dss/references/troubleshooting.md +3 -2
@@ -76,7 +76,11 @@ export function unexpectedResponseError(detail, status = 200) {
76
76
  }
77
77
  /** Prefix for a SQL query failure reported by DSS on a 2xx finish-streaming response. */
78
78
  export const SQL_QUERY_FAILED_MARKER = "SQL query failed in DSS";
79
- const TLS_CERTIFICATE_HINT = "TLS certificate verification failed. Trust the DSS/corporate CA with --ca-cert PATH or NODE_EXTRA_CA_CERTS; use --insecure only for temporary troubleshooting.";
79
+ const TLS_CERTIFICATE_HINT = "TLS certificate verification failed. Trust the DSS/corporate CA with --ca-cert PATH or NODE_EXTRA_CA_CERTS, or save it for every process and directory with `dss auth login --ca-cert PATH` (a project .env applies only when dss runs in that directory); use --insecure only for temporary troubleshooting.";
80
+ /** Generic permission hint; the CLI names the project when the request was project-scoped. */
81
+ export const FORBIDDEN_HINT = "Check API key validity and project permissions for the requested action.";
82
+ /** Generic 404 hint; the CLI names the resource and project when it knows them. */
83
+ export const NOT_FOUND_HINT = "Verify projectKey and object identifiers (dataset/recipe/scenario/folder IDs).";
80
84
  const BUSINESS_APPS_API_UNAVAILABLE_HINT = "Business Apps API is not available on this DSS instance. Use classic app commands or check DSS version/feature availability.";
81
85
  const MAX_ERROR_SUMMARY_LENGTH = 200;
82
86
  function isHtmlResponseBody(body) {
@@ -170,6 +174,15 @@ export function classifyDataikuError(status, body) {
170
174
  retryHint: TLS_CERTIFICATE_HINT,
171
175
  };
172
176
  }
177
+ // The same URL fails the same way on every attempt: nothing listens on
178
+ // the port, the host name does not resolve, or the URL is malformed.
179
+ if (/\b(?:connectionrefused|econnrefused|enotfound|err_invalid_url|bad port)\b/.test(lowerBody)) {
180
+ return {
181
+ category: "validation",
182
+ retryable: false,
183
+ retryHint: "DSS is not reachable at this URL. Check --url / DATAIKU_URL (scheme, host, port) and that DSS is running; do not retry unchanged.",
184
+ };
185
+ }
173
186
  return {
174
187
  category: "transient",
175
188
  retryable: true,
@@ -295,11 +308,7 @@ export function classifyDataikuError(status, body) {
295
308
  || (lowerBody.includes("permission")
296
309
  && (lowerBody.includes("cannot use") || lowerBody.includes("not allowed"))));
297
310
  if (isServerPermissionLike) {
298
- return {
299
- category: "forbidden",
300
- retryable: false,
301
- retryHint: "Check API key validity and project permissions for the requested action.",
302
- };
311
+ return { category: "forbidden", retryable: false, retryHint: FORBIDDEN_HINT, };
303
312
  }
304
313
  if (status === 404) {
305
314
  if (isBusinessAppsApiRootNotFound(lowerBody)) {
@@ -315,15 +324,11 @@ export function classifyDataikuError(status, body) {
315
324
  retryable: false,
316
325
  retryHint: isHtmlGatewayResponse
317
326
  ? "Resource was not found (gateway returned HTML). Verify DSS URL, projectKey, and object identifiers."
318
- : "Verify projectKey and object identifiers (dataset/recipe/scenario/folder IDs).",
327
+ : NOT_FOUND_HINT,
319
328
  };
320
329
  }
321
330
  if (status === 401 || status === 403) {
322
- return {
323
- category: "forbidden",
324
- retryable: false,
325
- retryHint: "Check API key validity and project permissions for the requested action.",
326
- };
331
+ return { category: "forbidden", retryable: false, retryHint: FORBIDDEN_HINT, };
327
332
  }
328
333
  if (status === 400 || status === 409 || status === 422) {
329
334
  return {
@@ -368,7 +373,7 @@ export class DataikuError extends Error {
368
373
  trustedElapsedMs;
369
374
  bodyTruncated;
370
375
  constructor(status, statusText, body, retry, requestId, trustedMetadata) {
371
- const details = DataikuError.buildDetails(status, body, retry);
376
+ const details = DataikuError.buildDetails(status, body);
372
377
  super(details.message);
373
378
  this.status = status;
374
379
  this.statusText = statusText;
@@ -383,15 +388,13 @@ export class DataikuError extends Error {
383
388
  this.trustedElapsedMs = trustedMetadata?.elapsedMs;
384
389
  this.bodyTruncated = trustedMetadata?.bodyTruncated === true ? true : undefined;
385
390
  }
391
+ /** Status line only: never echoes response body text. */
386
392
  get safeMessage() {
387
- const retrySummary = DataikuError.formatRetryMetadata(this.retry);
388
- return [
389
- `${this.status} ${canonicalStatusText(this.status)}`,
390
- `Error type: ${this.category}`,
391
- `Retryable: ${this.retryable ? "yes" : "no"}`,
392
- `Hint: ${this.retryHint}`,
393
- ...(retrySummary ? [retrySummary,] : []),
394
- ].join("\n");
393
+ return `${this.status} ${canonicalStatusText(this.status)}`;
394
+ }
395
+ /** The DSS message part of `message` (HTML summarized, server paths stripped, bounded). */
396
+ get summary() {
397
+ return this.message.slice(this.safeMessage.length + 2);
395
398
  }
396
399
  static extractSummary(_status, body) {
397
400
  try {
@@ -406,33 +409,14 @@ export class DataikuError extends Error {
406
409
  return "(empty response body)";
407
410
  return summarizeErrorText(body);
408
411
  }
409
- static formatRetryMetadata(retry) {
410
- if (!retry)
411
- return undefined;
412
- const shownDelays = retry.delaysMs.slice(0, 10);
413
- const delaysSuffix = retry.delaysMs.length > shownDelays.length ? ", …" : "";
414
- const delaysPart = shownDelays.length > 0 ? `[${shownDelays.join(", ")}${delaysSuffix}]` : "[]";
415
- return [
416
- `Retry attempts: ${retry.attempts}/${retry.maxAttempts}`,
417
- `Retry policy: ${retry.enabled ? "enabled" : "disabled"} for ${retry.method}`,
418
- `Retries performed: ${retry.retries}`,
419
- `Backoff delays (ms): ${delaysPart}`,
420
- `Timed out: ${retry.timedOut ? "yes" : "no"}`,
421
- ].join(" | ");
422
- }
423
- static buildDetails(status, body, retry) {
424
- const summary = DataikuError.extractSummary(status, body);
425
- const taxonomy = classifyDataikuError(status, body);
426
- const retrySummary = DataikuError.formatRetryMetadata(retry);
412
+ /**
413
+ * One line: status plus the DSS message. Category, retryability, hint, and
414
+ * retry metadata are structured fields on the error, not message prose.
415
+ */
416
+ static buildDetails(status, body) {
427
417
  return {
428
- ...taxonomy,
429
- message: [
430
- `${status} ${canonicalStatusText(status)}: ${summary}`,
431
- `Error type: ${taxonomy.category}`,
432
- `Retryable: ${taxonomy.retryable ? "yes" : "no"}`,
433
- `Hint: ${taxonomy.retryHint}`,
434
- ...(retrySummary ? [retrySummary,] : []),
435
- ].join("\n"),
418
+ ...classifyDataikuError(status, body),
419
+ message: `${status} ${canonicalStatusText(status)}: ${DataikuError.extractSummary(status, body).replace(/\s+/g, " ").trim()}`,
436
420
  };
437
421
  }
438
422
  }
@@ -124,21 +124,26 @@
124
124
  "code-env.list": {
125
125
  "type": "array",
126
126
  "items": {
127
- "additionalProperties": true,
128
127
  "type": "object",
129
- "required": [
130
- "envName",
131
- "envLang"
132
- ],
128
+ "additionalProperties": false,
133
129
  "properties": {
134
130
  "envName": {
135
- "type": "string"
131
+ "type": [
132
+ "string",
133
+ "null"
134
+ ]
136
135
  },
137
136
  "envLang": {
138
- "type": "string"
137
+ "type": [
138
+ "string",
139
+ "null"
140
+ ]
139
141
  },
140
142
  "deploymentMode": {
141
- "type": "string"
143
+ "type": [
144
+ "string",
145
+ "null"
146
+ ]
142
147
  }
143
148
  }
144
149
  }
@@ -361,41 +366,32 @@
361
366
  "dataset.list": {
362
367
  "type": "array",
363
368
  "items": {
364
- "additionalProperties": true,
365
369
  "type": "object",
366
- "required": [
367
- "name"
368
- ],
370
+ "additionalProperties": false,
369
371
  "properties": {
370
372
  "name": {
371
- "type": "string"
373
+ "type": [
374
+ "string",
375
+ "null"
376
+ ]
372
377
  },
373
378
  "type": {
374
- "type": "string"
375
- },
376
- "shortDesc": {
377
- "type": "string"
379
+ "type": [
380
+ "string",
381
+ "null"
382
+ ]
378
383
  },
379
384
  "managed": {
380
- "type": "boolean"
385
+ "type": [
386
+ "boolean",
387
+ "null"
388
+ ]
381
389
  },
382
- "params": {
383
- "additionalProperties": true,
384
- "type": "object",
385
- "properties": {
386
- "connection": {
387
- "type": "string"
388
- },
389
- "uploadConnection": {
390
- "type": "string"
391
- },
392
- "schema": {
393
- "type": "string"
394
- },
395
- "catalog": {
396
- "type": "string"
397
- }
398
- }
390
+ "connection": {
391
+ "type": [
392
+ "string",
393
+ "null"
394
+ ]
399
395
  }
400
396
  }
401
397
  }
@@ -730,44 +726,146 @@
730
726
  }
731
727
  }
732
728
  },
729
+ "folder.list": {
730
+ "type": "array",
731
+ "items": {
732
+ "type": "object",
733
+ "additionalProperties": false,
734
+ "properties": {
735
+ "id": {
736
+ "type": [
737
+ "string",
738
+ "null"
739
+ ]
740
+ },
741
+ "name": {
742
+ "type": [
743
+ "string",
744
+ "null"
745
+ ]
746
+ },
747
+ "type": {
748
+ "type": [
749
+ "string",
750
+ "null"
751
+ ]
752
+ },
753
+ "connection": {
754
+ "type": [
755
+ "string",
756
+ "null"
757
+ ]
758
+ }
759
+ }
760
+ }
761
+ },
762
+ "future.list": {
763
+ "type": "array",
764
+ "items": {
765
+ "type": "object",
766
+ "additionalProperties": false,
767
+ "properties": {
768
+ "jobId": {
769
+ "type": [
770
+ "string",
771
+ "null"
772
+ ]
773
+ },
774
+ "owner": {
775
+ "type": [
776
+ "string",
777
+ "null"
778
+ ]
779
+ },
780
+ "alive": {
781
+ "type": [
782
+ "boolean",
783
+ "null"
784
+ ]
785
+ },
786
+ "hasResult": {
787
+ "type": [
788
+ "boolean",
789
+ "null"
790
+ ]
791
+ },
792
+ "runningTime": {
793
+ "type": [
794
+ "number",
795
+ "null"
796
+ ]
797
+ }
798
+ }
799
+ }
800
+ },
801
+ "group.list": {
802
+ "type": "array",
803
+ "items": {
804
+ "type": "object",
805
+ "additionalProperties": false,
806
+ "properties": {
807
+ "name": {
808
+ "type": [
809
+ "string",
810
+ "null"
811
+ ]
812
+ },
813
+ "description": {
814
+ "type": [
815
+ "string",
816
+ "null"
817
+ ]
818
+ },
819
+ "admin": {
820
+ "type": [
821
+ "boolean",
822
+ "null"
823
+ ]
824
+ }
825
+ }
826
+ }
827
+ },
733
828
  "job.list": {
734
829
  "type": "array",
735
830
  "items": {
736
- "additionalProperties": true,
737
831
  "type": "object",
832
+ "additionalProperties": false,
738
833
  "properties": {
739
- "def": {
740
- "additionalProperties": true,
741
- "type": "object",
742
- "properties": {
743
- "id": {
744
- "type": "string"
745
- },
746
- "type": {
747
- "type": "string"
748
- }
749
- }
834
+ "id": {
835
+ "type": [
836
+ "string",
837
+ "null"
838
+ ]
750
839
  },
751
- "baseStatus": {
752
- "additionalProperties": true,
753
- "type": "object",
754
- "properties": {
755
- "def": {
756
- "additionalProperties": true,
757
- "type": "object",
758
- "properties": {
759
- "id": {
760
- "type": "string"
761
- },
762
- "type": {
763
- "type": "string"
764
- }
765
- }
766
- },
767
- "state": {
768
- "type": "string"
769
- }
770
- }
840
+ "name": {
841
+ "type": [
842
+ "string",
843
+ "null"
844
+ ]
845
+ },
846
+ "type": {
847
+ "type": [
848
+ "string",
849
+ "null"
850
+ ]
851
+ },
852
+ "state": {
853
+ "type": [
854
+ "string",
855
+ "null"
856
+ ]
857
+ },
858
+ "startTime": {
859
+ "type": [
860
+ "number",
861
+ "null"
862
+ ]
863
+ },
864
+ "endTime": {
865
+ "type": [
866
+ "number",
867
+ "null"
868
+ ]
771
869
  }
772
870
  }
773
871
  }
@@ -908,6 +1006,60 @@
908
1006
  }
909
1007
  }
910
1008
  },
1009
+ "macro.list": {
1010
+ "type": "array",
1011
+ "items": {
1012
+ "type": "object",
1013
+ "additionalProperties": false,
1014
+ "properties": {
1015
+ "runnableType": {
1016
+ "type": [
1017
+ "string",
1018
+ "null"
1019
+ ]
1020
+ },
1021
+ "ownerPluginId": {
1022
+ "type": [
1023
+ "string",
1024
+ "null"
1025
+ ]
1026
+ },
1027
+ "label": {
1028
+ "type": [
1029
+ "string",
1030
+ "null"
1031
+ ]
1032
+ }
1033
+ }
1034
+ }
1035
+ },
1036
+ "meaning.list": {
1037
+ "type": "array",
1038
+ "items": {
1039
+ "type": "object",
1040
+ "additionalProperties": false,
1041
+ "properties": {
1042
+ "id": {
1043
+ "type": [
1044
+ "string",
1045
+ "null"
1046
+ ]
1047
+ },
1048
+ "label": {
1049
+ "type": [
1050
+ "string",
1051
+ "null"
1052
+ ]
1053
+ },
1054
+ "type": {
1055
+ "type": [
1056
+ "string",
1057
+ "null"
1058
+ ]
1059
+ }
1060
+ }
1061
+ }
1062
+ },
911
1063
  "notebook.get-jupyter": {
912
1064
  "additionalProperties": true,
913
1065
  "type": "object",
@@ -1186,6 +1338,33 @@
1186
1338
  }
1187
1339
  }
1188
1340
  },
1341
+ "plugin.list": {
1342
+ "type": "array",
1343
+ "items": {
1344
+ "type": "object",
1345
+ "additionalProperties": false,
1346
+ "properties": {
1347
+ "id": {
1348
+ "type": [
1349
+ "string",
1350
+ "null"
1351
+ ]
1352
+ },
1353
+ "version": {
1354
+ "type": [
1355
+ "string",
1356
+ "null"
1357
+ ]
1358
+ },
1359
+ "label": {
1360
+ "type": [
1361
+ "string",
1362
+ "null"
1363
+ ]
1364
+ }
1365
+ }
1366
+ }
1367
+ },
1189
1368
  "project-library.diff": {
1190
1369
  "type": "object",
1191
1370
  "additionalProperties": false,
@@ -1407,21 +1586,26 @@
1407
1586
  "project.list": {
1408
1587
  "type": "array",
1409
1588
  "items": {
1410
- "additionalProperties": true,
1411
1589
  "type": "object",
1412
- "required": [
1413
- "projectKey",
1414
- "name"
1415
- ],
1590
+ "additionalProperties": false,
1416
1591
  "properties": {
1417
1592
  "projectKey": {
1418
- "type": "string"
1593
+ "type": [
1594
+ "string",
1595
+ "null"
1596
+ ]
1419
1597
  },
1420
1598
  "name": {
1421
- "type": "string"
1599
+ "type": [
1600
+ "string",
1601
+ "null"
1602
+ ]
1422
1603
  },
1423
- "shortDesc": {
1424
- "type": "string"
1604
+ "ownerLogin": {
1605
+ "type": [
1606
+ "string",
1607
+ "null"
1608
+ ]
1425
1609
  }
1426
1610
  }
1427
1611
  }
@@ -1492,17 +1676,32 @@
1492
1676
  "recipe.list": {
1493
1677
  "type": "array",
1494
1678
  "items": {
1495
- "additionalProperties": true,
1496
1679
  "type": "object",
1497
- "required": [
1498
- "name"
1499
- ],
1680
+ "additionalProperties": false,
1500
1681
  "properties": {
1501
1682
  "name": {
1502
- "type": "string"
1683
+ "type": [
1684
+ "string",
1685
+ "null"
1686
+ ]
1503
1687
  },
1504
1688
  "type": {
1505
- "type": "string"
1689
+ "type": [
1690
+ "string",
1691
+ "null"
1692
+ ]
1693
+ },
1694
+ "inputs": {
1695
+ "type": "array",
1696
+ "items": {
1697
+ "type": "string"
1698
+ }
1699
+ },
1700
+ "outputs": {
1701
+ "type": "array",
1702
+ "items": {
1703
+ "type": "string"
1704
+ }
1506
1705
  }
1507
1706
  }
1508
1707
  }
@@ -1573,20 +1772,38 @@
1573
1772
  "scenario.list": {
1574
1773
  "type": "array",
1575
1774
  "items": {
1576
- "additionalProperties": true,
1577
1775
  "type": "object",
1578
- "required": [
1579
- "id"
1580
- ],
1776
+ "additionalProperties": false,
1581
1777
  "properties": {
1582
1778
  "id": {
1583
- "type": "string"
1779
+ "type": [
1780
+ "string",
1781
+ "null"
1782
+ ]
1584
1783
  },
1585
1784
  "name": {
1586
- "type": "string"
1785
+ "type": [
1786
+ "string",
1787
+ "null"
1788
+ ]
1789
+ },
1790
+ "type": {
1791
+ "type": [
1792
+ "string",
1793
+ "null"
1794
+ ]
1587
1795
  },
1588
1796
  "active": {
1589
- "type": "boolean"
1797
+ "type": [
1798
+ "boolean",
1799
+ "null"
1800
+ ]
1801
+ },
1802
+ "running": {
1803
+ "type": [
1804
+ "boolean",
1805
+ "null"
1806
+ ]
1590
1807
  }
1591
1808
  }
1592
1809
  }
@@ -1730,6 +1947,45 @@
1730
1947
  }
1731
1948
  }
1732
1949
  ]
1950
+ },
1951
+ "user.list": {
1952
+ "type": "array",
1953
+ "items": {
1954
+ "type": "object",
1955
+ "additionalProperties": false,
1956
+ "properties": {
1957
+ "login": {
1958
+ "type": [
1959
+ "string",
1960
+ "null"
1961
+ ]
1962
+ },
1963
+ "displayName": {
1964
+ "type": [
1965
+ "string",
1966
+ "null"
1967
+ ]
1968
+ },
1969
+ "userProfile": {
1970
+ "type": [
1971
+ "string",
1972
+ "null"
1973
+ ]
1974
+ },
1975
+ "groups": {
1976
+ "type": "array",
1977
+ "items": {
1978
+ "type": "string"
1979
+ }
1980
+ },
1981
+ "enabled": {
1982
+ "type": [
1983
+ "boolean",
1984
+ "null"
1985
+ ]
1986
+ }
1987
+ }
1988
+ }
1733
1989
  }
1734
1990
  }
1735
1991
  }