@erdoai/cli 0.135.0 → 0.136.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 (2) hide show
  1. package/dist/index.js +43 -0
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1189,6 +1189,15 @@ var ErdoClient = class {
1189
1189
  const qs = q.toString();
1190
1190
  return this.request("GET", `/v1/datasets${qs ? `?${qs}` : ""}`);
1191
1191
  }
1192
+ listDatasetUserPermissions(slug) {
1193
+ return this.request("GET", `/v1/datasets/${encodeURIComponent(slug)}/permissions/users`);
1194
+ }
1195
+ setDatasetUserPermission(slug, userID, level) {
1196
+ return this.request("PUT", `/v1/datasets/${encodeURIComponent(slug)}/permissions/users/${encodeURIComponent(userID)}`, { level });
1197
+ }
1198
+ removeDatasetUserPermission(slug, userID) {
1199
+ return this.request("DELETE", `/v1/datasets/${encodeURIComponent(slug)}/permissions/users/${encodeURIComponent(userID)}`);
1200
+ }
1192
1201
  // The org's dataset vocabulary: every purpose in use, its current dataset,
1193
1202
  // and the declared producer contract on that same dataset.
1194
1203
  // scope="managed" reads the same across every client organization a manager
@@ -6872,6 +6881,40 @@ voiceAgentsCmd.command("whatsapp-replies <slug>").description("Turn a voice agen
6872
6881
  }
6873
6882
  });
6874
6883
  var datasetsCmd = program.command("datasets").description("Datasets");
6884
+ var datasetPermissionsCmd = datasetsCmd.command("permissions").description("Manage dataset user permissions");
6885
+ datasetPermissionsCmd.command("list <slug>").option("--json", "output raw JSON").action(async (slug, opts) => {
6886
+ try {
6887
+ const result = await new ErdoClient().listDatasetUserPermissions(slug);
6888
+ if (opts.json) print(result);
6889
+ else for (const p of result.permissions) console.log(`${p.user_id} ${p.level}`);
6890
+ } catch (e) {
6891
+ fail(e);
6892
+ }
6893
+ });
6894
+ datasetPermissionsCmd.command("set-user <slug> <user-id>").requiredOption("--level <view|edit|admin>", "permission level").option("--json", "output raw JSON").action(async (slug, userID, opts) => {
6895
+ try {
6896
+ if (!["view", "edit", "admin"].includes(opts.level)) throw new Error("--level must be view, edit, or admin");
6897
+ const result = await new ErdoClient().setDatasetUserPermission(slug, userID, opts.level);
6898
+ if (opts.json) print(result);
6899
+ else console.log(`${result.user_id} ${result.level}`);
6900
+ if (result.user_id.toLowerCase() !== userID.toLowerCase() || result.level !== opts.level) {
6901
+ console.error("Readback does not match the requested dataset user grant");
6902
+ process.exitCode = 1;
6903
+ }
6904
+ } catch (e) {
6905
+ fail(e);
6906
+ }
6907
+ });
6908
+ datasetPermissionsCmd.command("remove-user <slug> <user-id>").option("--json", "output raw JSON").action(async (slug, userID, opts) => {
6909
+ try {
6910
+ const result = await new ErdoClient().removeDatasetUserPermission(slug, userID);
6911
+ if (opts.json) print(result);
6912
+ else console.log(result.direct_grant_absent ? "no direct user grant remains" : "direct grant absence was not verified");
6913
+ if (result.inherited_access_may_remain) console.error("inherited access may remain");
6914
+ } catch (e) {
6915
+ fail(e);
6916
+ }
6917
+ });
6875
6918
  datasetsCmd.command("list").description("List datasets").option(
6876
6919
  "--class <class>",
6877
6920
  "filter by structural class: 'table' or 'scratch', or 'all' to include scratch analysis by-products (default hides scratch)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erdoai/cli",
3
- "version": "0.135.0",
3
+ "version": "0.136.0",
4
4
  "description": "Erdo CLI \u2014 drive datasets, pages, and evals from the terminal or CI",
5
5
  "type": "module",
6
6
  "bin": {