dataiku-sdk 3.7.0 → 3.9.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 +4 -2
- package/dist/build-metadata.json +1 -1
- package/dist/packages/types/src/index.d.ts +40 -4
- package/dist/packages/types/src/index.js +22 -1
- package/dist/src/cli/coerce.d.ts +1 -0
- package/dist/src/cli/coerce.js +1 -1
- package/dist/src/cli/command-syntax.json +156 -0
- package/dist/src/cli/commands/dataset.js +44 -8
- package/dist/src/cli/commands/flow-zone.js +241 -46
- package/dist/src/cli/commands/job.js +52 -9
- package/dist/src/cli/commands/project.js +4 -3
- package/dist/src/cli/commands/recipe.d.ts +4 -0
- package/dist/src/cli/commands/recipe.js +38 -1
- package/dist/src/cli/commands/wiki.js +56 -0
- package/dist/src/cli/contract.js +13 -8
- package/dist/src/cli/doctor.js +2 -0
- package/dist/src/cli/flags.d.ts +7 -0
- package/dist/src/cli/flags.js +28 -2
- package/dist/src/cli/helpers/dataset.d.ts +12 -0
- package/dist/src/cli/helpers/dataset.js +36 -0
- package/dist/src/cli/helpers/flow-zone.d.ts +21 -0
- package/dist/src/cli/helpers/flow-zone.js +144 -4
- package/dist/src/cli/output-schemas.js +27 -3
- package/dist/src/cli/output.js +6 -0
- package/dist/src/cli/plans.js +58 -2
- package/dist/src/cli/project-map-output.d.ts +24 -0
- package/dist/src/cli/project-map-output.js +21 -0
- package/dist/src/cli/read-shapes.d.ts +14 -0
- package/dist/src/cli/read-shapes.js +114 -0
- package/dist/src/cli/result-shapes.d.ts +6 -0
- package/dist/src/cli/result-shapes.js +235 -0
- package/dist/src/cli/types.d.ts +2 -0
- package/dist/src/cli/version.d.ts +2 -2
- package/dist/src/cli/version.js +2 -2
- package/dist/src/cli.js +23 -20
- package/dist/src/errors.d.ts +11 -1
- package/dist/src/errors.js +18 -3
- package/dist/src/generated/action-output-schemas.json +224 -35
- package/dist/src/resources/dataset-create.d.ts +19 -0
- package/dist/src/resources/dataset-create.js +69 -0
- package/dist/src/resources/datasets.d.ts +21 -0
- package/dist/src/resources/datasets.js +61 -1
- package/dist/src/resources/flow-zones.d.ts +29 -3
- package/dist/src/resources/flow-zones.js +53 -3
- package/dist/src/resources/jobs.d.ts +36 -1
- package/dist/src/resources/jobs.js +111 -5
- package/dist/src/resources/projects.d.ts +9 -0
- package/dist/src/resources/projects.js +10 -3
- package/dist/src/resources/recipe-create.d.ts +17 -3
- package/dist/src/resources/recipe-create.js +149 -33
- package/dist/src/resources/recipes.js +76 -23
- package/dist/src/resources/sql.js +52 -13
- package/dist/src/resources/wiki.d.ts +47 -1
- package/dist/src/resources/wiki.js +89 -0
- package/dist/src/utils/flow-analysis.js +4 -0
- package/dist/src/utils/secret-sanitize.d.ts +11 -2
- package/dist/src/utils/secret-sanitize.js +23 -6
- package/package.json +4 -4
- package/plugin.json +1 -1
- package/skills/dataiku-dss/references/discovery.md +2 -2
- package/skills/dataiku-dss/references/flow-maps.md +2 -2
- package/skills/dataiku-dss/references/troubleshooting.md +3 -3
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
* - optionally redacts userinfo embedded in HTTP(S) URL authorities
|
|
8
8
|
* (`https://user:pass@host/...` -> `https://[redacted]@host/...`).
|
|
9
9
|
*
|
|
10
|
-
* The SDK resource layer forwards values verbatim to DSS over TLS;
|
|
11
|
-
* is a CLI presentation concern and must never leak secret
|
|
10
|
+
* The SDK resource layer forwards values verbatim to DSS over TLS; sanitizing
|
|
11
|
+
* structured output is a CLI presentation concern and must never leak secret
|
|
12
|
+
* material instead. DSS-produced read text that consumers never need secrets
|
|
13
|
+
* from (job logs) is scrubbed at the SDK download via `redactCredentialPairs`.
|
|
12
14
|
*/
|
|
13
15
|
/** Marker replacing every redacted value or secret occurrence. */
|
|
14
16
|
export const SECRET_REDACTED = "[redacted]";
|
|
@@ -92,6 +94,24 @@ const CREDENTIAL_KEY_FRAGMENTS = [
|
|
|
92
94
|
];
|
|
93
95
|
/** Keys naming how credentials work (`credentialsMode`, `passwordType`), not secrets. */
|
|
94
96
|
const CREDENTIAL_SETTING_SUFFIXES = ["mode", "type", "policy",];
|
|
97
|
+
/** Credential-like key (normalized fragment match, minus credential settings). */
|
|
98
|
+
function isCredentialKey(key) {
|
|
99
|
+
const normalized = normalizeSecretKey(key);
|
|
100
|
+
if (CREDENTIAL_SETTING_SUFFIXES.some((suffix) => normalized.endsWith(suffix)))
|
|
101
|
+
return false;
|
|
102
|
+
return CREDENTIAL_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment));
|
|
103
|
+
}
|
|
104
|
+
/** JSON-style `"key": "value"` pair with escape-aware string bodies. */
|
|
105
|
+
const JSON_STRING_PAIR = /"((?:[^"\\\n]|\\.)*)"(\s*:\s*)"((?:[^"\\\n]|\\.)*)"/g;
|
|
106
|
+
/**
|
|
107
|
+
* Redact the string value of every JSON-style `"key":"value"` pair in free
|
|
108
|
+
* text whose key is credential-like (e.g. the `jobTicketSecret` DSS writes
|
|
109
|
+
* into job logs). Bare `key` fields are not redacted here: in log text they
|
|
110
|
+
* name ordinary identifiers far more often than secrets.
|
|
111
|
+
*/
|
|
112
|
+
export function redactCredentialPairs(text) {
|
|
113
|
+
return text.replace(JSON_STRING_PAIR, (pair, key, separator, value) => value.length > 0 && isCredentialKey(key) ? `"${key}"${separator}"${SECRET_REDACTED}"` : pair);
|
|
114
|
+
}
|
|
95
115
|
/**
|
|
96
116
|
* Every string value under a credential-like key (any depth), plus bare
|
|
97
117
|
* `key` fields such as `authRealm.key`. Collected from a command's own JSON
|
|
@@ -114,10 +134,7 @@ export function credentialValues(value) {
|
|
|
114
134
|
if (node === null || typeof node !== "object")
|
|
115
135
|
return;
|
|
116
136
|
for (const [key, item,] of Object.entries(node)) {
|
|
117
|
-
|
|
118
|
-
const setting = CREDENTIAL_SETTING_SUFFIXES.some((suffix) => normalized.endsWith(suffix));
|
|
119
|
-
visit(item, sensitive || (!setting && (normalized === "key"
|
|
120
|
-
|| CREDENTIAL_KEY_FRAGMENTS.some((fragment) => normalized.includes(fragment)))));
|
|
137
|
+
visit(item, sensitive || isCredentialKey(key) || normalizeSecretKey(key) === "key");
|
|
121
138
|
}
|
|
122
139
|
};
|
|
123
140
|
visit(value, false);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dataiku-sdk",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0",
|
|
4
4
|
"description": "Dataiku DSS SDK and CLI for programmatic access to DSS REST APIs",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
"node-stream-zip": "^1.16.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@oxlint/plugins": "1.
|
|
51
|
+
"@oxlint/plugins": "1.87.0",
|
|
52
52
|
"@types/bun": "^1.4.2",
|
|
53
53
|
"cross-env": "^10.1.0",
|
|
54
|
-
"dprint": "^0.
|
|
54
|
+
"dprint": "^0.61.1",
|
|
55
55
|
"js-tiktoken": "1.0.21",
|
|
56
|
-
"oxlint": "1.
|
|
56
|
+
"oxlint": "1.87.0",
|
|
57
57
|
"typescript": "^7.0.2"
|
|
58
58
|
},
|
|
59
59
|
"bundleDependencies": [
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "dataiku-sdk",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.9.0",
|
|
5
5
|
"description": "Dataiku DSS SDK and agent-oriented CLI for programmatic access to DSS REST APIs.",
|
|
6
6
|
"homepage": "https://github.com/clssck/dataiku-sdk",
|
|
7
7
|
"repository": "https://github.com/clssck/dataiku-sdk",
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
## Contract
|
|
4
4
|
|
|
5
5
|
- Stdout: exactly one compact JSON value; void success: `{ok:true}`. No prompts, help screens, tables, banners, or prose.
|
|
6
|
-
- Dispatch/runtime failure: stdout error object (`type:"error"`, `
|
|
6
|
+
- Dispatch/runtime failure: stdout error object (`type:"error"`, `error`, `code`, `category`, `exitCode`; `projectKey` when resolved), nonzero exit. `doctor`/`batch`/`cleanup` failures instead return direct result objects; inspect exit code and fields.
|
|
7
7
|
- Stderr: JSONL diagnostics only; `type:"warning"` / `type:"trace"` for warnings / `--verbose` HTTP traces, flushed before success or failure output.
|
|
8
8
|
- Exits: 0 success, 1 usage/configuration, 2 DSS/internal/permission-or-environment, 3 transient/retryable DSS error, 4 failed long-running result/assertion.
|
|
9
9
|
- Recipe payload stdout: JSON string. With `--output PATH`: exact bytes to file, JSON string equal to `PATH` on stdout.
|
|
10
10
|
- General `--fields a,b,c`: object projection, element-wise for object arrays. Dotted paths traverse nested objects; missing fields become `null`; strings/scalars pass through.
|
|
11
|
-
- `*.list
|
|
11
|
+
- Compact by default: `*.list` (ids, kind, next-step fields such as recipe `inputs`/`outputs`), `job get` (no log tail), `dataset get`/`info`, `project get`; `--full`/`--fields` use DSS objects. Lists: `--contains TEXT` filters ids; `--limit N` caps (`list_truncated` warning).
|
|
12
12
|
|
|
13
13
|
## Discovery
|
|
14
14
|
|
|
@@ -7,6 +7,6 @@ dss flow-zone organize --file flow-zones.json --dry-run --project-key MYPROJ
|
|
|
7
7
|
dss flow-zone organize --file flow-zones.json --project-key MYPROJ
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
`project map`: zones, SCC-safe layers, weak components, diagnostics,
|
|
10
|
+
`project map`: zones, SCC-safe layers, weak components, diagnostics, fingerprint; rendering in `rendering.content`.
|
|
11
11
|
|
|
12
|
-
Feed `flow-zone plan` to `flow-zone organize`;
|
|
12
|
+
Feed `flow-zone plan` (`unassigned`: to place) to `flow-zone organize`; dry-run first. Recipe outputs follow their recipe. DSS positions a zone only at creation; `--recreate-on-move` moves it (new id). Layout commands never read recipe code.
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
## Platform, builds, data
|
|
4
4
|
|
|
5
5
|
- Code/SQL: use `--file`/`--sql-file`; shells, especially PowerShell, mangle quotes, `$`, and multiline text. Non-UTF-8 consoles (e.g. Windows cp1252): write non-ASCII results to UTF-8 files or `--output PATH`, not the console.
|
|
6
|
-
- Build errors: `dss job log <id> --errors-only` selects errors/tracebacks.
|
|
7
|
-
- Schemas: code recipes set output schemas at run time. Visual/SQL query recipes: `recipe create` fills created or empty outputs (`outputSchemaUpdated`); `recipe set-payload` updates empty or DSS-derived ones, warns `recipe_output_schema_outdated` for hand-edited ones. Apply with `dss recipe update-schema NAME` (one recipe), `dss flow propagate-schema DATASET --wait` (every downstream recipe), or build `--auto-update-schema`. `built_dataset_has_no_columns`: the DONE build wrote nothing. Manual columns: `dss dataset refresh-schema NAME --data-file columns.json`. `dss dataset validate-build` catches file-backed misconfiguration.
|
|
6
|
+
- Build errors: `dss job log <id> --errors-only` selects errors/tracebacks. Plain `job log` prints the last 100 lines (`log_truncated`); for full logs, use `--output PATH` without `--errors-only`. Logs may arrive as one JVM-noisy line; `Error in Python process: At line <N>` identifies the payload source line.
|
|
7
|
+
- Schemas: code recipes set output schemas at run time. Visual/SQL query recipes: `recipe create` fills created or empty outputs (`outputSchemaUpdated`); `recipe set-payload` updates empty or DSS-derived ones, warns `recipe_output_schema_outdated` for hand-edited ones. Apply with `dss recipe update-schema NAME` (one recipe), `dss flow propagate-schema DATASET --wait` (every downstream recipe), or build `--auto-update-schema`. `built_dataset_has_no_columns`: the DONE build wrote nothing. `nothing_to_build` (exit 4): no recipe writes the managed target. Manual columns: `dss dataset refresh-schema NAME --data-file columns.json`. `dss dataset validate-build` catches file-backed misconfiguration.
|
|
8
8
|
- `Inline` (editable) datasets: the public API cannot write rows, so `dataset create` rejects them; use `UploadedFiles` + `dataset upload-file`, or a python recipe output. `code run` is a scenario step; some DSS versions refuse dataset writes there.
|
|
9
9
|
- `dss dataset download`: default 100k rows; result `{ path, rows, truncated, limit }`. If truncated, raise `--limit`. Specify `--output` or read the `dataset_download_default_location` path warning. CSV is spreadsheet-safe; `--raw-data` retains formula prefixes. For large tables, aggregate in SQL or use a recipe.
|
|
10
10
|
- `dss dashboard create`/`update`: before POST/PUT, every `INSIGHT` tile needs agreeing/resolvable `insightId` and `targetInsightId`; any `datasetSmartName` must resolve. Missing/stale references: `validation_failed`. Cross-project `PROJECT.DATASET` needs dataset-project read permission; `403` blocks saving an unverifiable dashboard.
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
Dispatch/runtime failure: one compact stdout error:
|
|
24
24
|
```json
|
|
25
|
-
{"type":"error","
|
|
25
|
+
{"type":"error","error":"Missing API key.","code":"missing_required_flag","category":"usage","exitCode":1}
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
`doctor`/`batch`/`cleanup` command failures return direct stdout result objects; check nonzero exit before interpreting. Recover from structured `code`, `category`, `exitCode`, `retryable`, `status`, `details`, never message scraping.
|