@sendly/cli 3.18.0 → 3.18.3

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 (53) hide show
  1. package/dist/commands/credits/balance.js +2 -2
  2. package/dist/commands/enterprise/analytics/credits.d.ts +11 -0
  3. package/dist/commands/enterprise/analytics/credits.js +59 -0
  4. package/dist/commands/enterprise/analytics/delivery.d.ts +10 -0
  5. package/dist/commands/enterprise/analytics/delivery.js +60 -0
  6. package/dist/commands/enterprise/analytics/messages.d.ts +11 -0
  7. package/dist/commands/enterprise/analytics/messages.js +59 -0
  8. package/dist/commands/enterprise/analytics/overview.d.ts +10 -0
  9. package/dist/commands/enterprise/analytics/overview.js +42 -0
  10. package/dist/commands/enterprise/billing.d.ts +12 -0
  11. package/dist/commands/enterprise/billing.js +70 -0
  12. package/dist/commands/enterprise/credits.d.ts +13 -0
  13. package/dist/commands/enterprise/credits.js +37 -0
  14. package/dist/commands/enterprise/keys/create.d.ts +15 -0
  15. package/dist/commands/enterprise/keys/create.js +53 -0
  16. package/dist/commands/enterprise/keys/list.d.ts +13 -0
  17. package/dist/commands/enterprise/keys/list.js +69 -0
  18. package/dist/commands/enterprise/keys/revoke.d.ts +15 -0
  19. package/dist/commands/enterprise/keys/revoke.js +57 -0
  20. package/dist/commands/enterprise/provision.d.ts +17 -0
  21. package/dist/commands/enterprise/provision.js +143 -0
  22. package/dist/commands/enterprise/quota/get.d.ts +13 -0
  23. package/dist/commands/enterprise/quota/get.js +40 -0
  24. package/dist/commands/enterprise/quota/set.d.ts +15 -0
  25. package/dist/commands/enterprise/quota/set.js +69 -0
  26. package/dist/commands/enterprise/status.d.ts +10 -0
  27. package/dist/commands/enterprise/status.js +45 -0
  28. package/dist/commands/enterprise/transfer-credits.d.ts +14 -0
  29. package/dist/commands/enterprise/transfer-credits.js +76 -0
  30. package/dist/commands/enterprise/webhooks/delete.d.ts +11 -0
  31. package/dist/commands/enterprise/webhooks/delete.js +44 -0
  32. package/dist/commands/enterprise/webhooks/get.d.ts +10 -0
  33. package/dist/commands/enterprise/webhooks/get.js +38 -0
  34. package/dist/commands/enterprise/webhooks/set.d.ts +12 -0
  35. package/dist/commands/enterprise/webhooks/set.js +48 -0
  36. package/dist/commands/enterprise/webhooks/test.d.ts +10 -0
  37. package/dist/commands/enterprise/webhooks/test.js +42 -0
  38. package/dist/commands/enterprise/workspaces/create.d.ts +11 -0
  39. package/dist/commands/enterprise/workspaces/create.js +37 -0
  40. package/dist/commands/enterprise/workspaces/delete.d.ts +14 -0
  41. package/dist/commands/enterprise/workspaces/delete.js +58 -0
  42. package/dist/commands/enterprise/workspaces/get.d.ts +13 -0
  43. package/dist/commands/enterprise/workspaces/get.js +51 -0
  44. package/dist/commands/enterprise/workspaces/list.d.ts +10 -0
  45. package/dist/commands/enterprise/workspaces/list.js +75 -0
  46. package/dist/commands/enterprise/workspaces/resume.d.ts +13 -0
  47. package/dist/commands/enterprise/workspaces/resume.js +35 -0
  48. package/dist/commands/enterprise/workspaces/suspend.d.ts +15 -0
  49. package/dist/commands/enterprise/workspaces/suspend.js +60 -0
  50. package/dist/lib/api-client.d.ts +1 -0
  51. package/dist/lib/api-client.js +6 -3
  52. package/oclif.manifest.json +1293 -76
  53. package/package.json +19 -1
@@ -0,0 +1,69 @@
1
+ import { Args } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { table, json, info, colors, isJsonMode, formatRelativeTime, } from "../../../lib/output.js";
5
+ export default class EnterpriseKeysList extends AuthenticatedCommand {
6
+ static description = "List API keys for an enterprise workspace";
7
+ static examples = [
8
+ "<%= config.bin %> enterprise keys list org_abc123",
9
+ "<%= config.bin %> enterprise keys list org_abc123 --json",
10
+ ];
11
+ static args = {
12
+ workspaceId: Args.string({
13
+ description: "Workspace ID",
14
+ required: true,
15
+ }),
16
+ };
17
+ static flags = {
18
+ ...AuthenticatedCommand.baseFlags,
19
+ };
20
+ async run() {
21
+ const { args } = await this.parse(EnterpriseKeysList);
22
+ const response = await apiClient.get(`/api/v1/enterprise/workspaces/${args.workspaceId}/keys`);
23
+ if (isJsonMode()) {
24
+ json(response.keys);
25
+ return;
26
+ }
27
+ if (response.keys.length === 0) {
28
+ info("No API keys found for this workspace");
29
+ console.log();
30
+ console.log(` Create one with ${colors.code(`sendly enterprise keys create ${args.workspaceId}`)}`);
31
+ return;
32
+ }
33
+ console.log();
34
+ table(response.keys, [
35
+ { header: "Name", key: "name", width: 20 },
36
+ {
37
+ header: "Key ID",
38
+ key: "id",
39
+ width: 18,
40
+ formatter: (v) => colors.dim(String(v).slice(0, 16)),
41
+ },
42
+ {
43
+ header: "Prefix",
44
+ key: "prefix",
45
+ width: 16,
46
+ formatter: (v) => colors.code(String(v)),
47
+ },
48
+ {
49
+ header: "Type",
50
+ key: "type",
51
+ width: 8,
52
+ formatter: (v) => v === "test" ? colors.warning("test") : colors.success("live"),
53
+ },
54
+ {
55
+ header: "Status",
56
+ key: "isActive",
57
+ width: 10,
58
+ formatter: (v) => v ? colors.success("active") : colors.error("revoked"),
59
+ },
60
+ {
61
+ header: "Last Used",
62
+ key: "lastUsedAt",
63
+ width: 12,
64
+ formatter: (v) => v ? formatRelativeTime(String(v)) : colors.dim("never"),
65
+ },
66
+ ]);
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbnRlcnByaXNlL2tleXMvbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBd0IsQ0FBQztBQWdCaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBbUIsU0FBUSxvQkFBb0I7SUFDbEUsTUFBTSxDQUFDLFdBQVcsR0FBRywyQ0FBMkMsQ0FBQztJQUVqRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1EQUFtRDtRQUNuRCwwREFBMEQ7S0FDM0QsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixXQUFXLEVBQUUsY0FBYztZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztLQUNsQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUNsQyxpQ0FBaUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUN6RCxDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQ1QscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQ3hGLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ25CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDMUM7Z0JBQ0UsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNyRDtZQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixHQUFHLEVBQUUsUUFBUTtnQkFDYixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1lBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDZixDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNqRTtZQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixHQUFHLEVBQUUsVUFBVTtnQkFDZixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7YUFDekQ7WUFDRDtnQkFDRSxNQUFNLEVBQUUsV0FBVztnQkFDbkIsR0FBRyxFQUFFLFlBQVk7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDMUQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICB0YWJsZSxcbiAganNvbixcbiAgaW5mbyxcbiAgY29sb3JzLFxuICBpc0pzb25Nb2RlLFxuICBmb3JtYXRSZWxhdGl2ZVRpbWUsXG59IGZyb20gXCIuLi8uLi8uLi9saWIvb3V0cHV0LmpzXCI7XG5cbmludGVyZmFjZSBBcGlLZXkge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHByZWZpeDogc3RyaW5nO1xuICB0eXBlOiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgbGFzdFVzZWRBdD86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBLZXlzUmVzcG9uc2Uge1xuICBrZXlzOiBBcGlLZXlbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50ZXJwcmlzZUtleXNMaXN0IGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPSBcIkxpc3QgQVBJIGtleXMgZm9yIGFuIGVudGVycHJpc2Ugd29ya3NwYWNlXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBrZXlzIGxpc3Qgb3JnX2FiYzEyM1wiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBrZXlzIGxpc3Qgb3JnX2FiYzEyMyAtLWpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgYXJncyA9IHtcbiAgICB3b3Jrc3BhY2VJZDogQXJncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiV29ya3NwYWNlIElEXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoRW50ZXJwcmlzZUtleXNMaXN0KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LmdldDxLZXlzUmVzcG9uc2U+KFxuICAgICAgYC9hcGkvdjEvZW50ZXJwcmlzZS93b3Jrc3BhY2VzLyR7YXJncy53b3Jrc3BhY2VJZH0va2V5c2AsXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocmVzcG9uc2Uua2V5cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvKFwiTm8gQVBJIGtleXMgZm91bmQgZm9yIHRoaXMgd29ya3NwYWNlXCIpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICBDcmVhdGUgb25lIHdpdGggJHtjb2xvcnMuY29kZShgc2VuZGx5IGVudGVycHJpc2Uga2V5cyBjcmVhdGUgJHthcmdzLndvcmtzcGFjZUlkfWApfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgdGFibGUocmVzcG9uc2Uua2V5cywgW1xuICAgICAgeyBoZWFkZXI6IFwiTmFtZVwiLCBrZXk6IFwibmFtZVwiLCB3aWR0aDogMjAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIktleSBJRFwiLFxuICAgICAgICBrZXk6IFwiaWRcIixcbiAgICAgICAgd2lkdGg6IDE4LFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PiBjb2xvcnMuZGltKFN0cmluZyh2KS5zbGljZSgwLCAxNikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIlByZWZpeFwiLFxuICAgICAgICBrZXk6IFwicHJlZml4XCIsXG4gICAgICAgIHdpZHRoOiAxNixcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4gY29sb3JzLmNvZGUoU3RyaW5nKHYpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogXCJUeXBlXCIsXG4gICAgICAgIGtleTogXCJ0eXBlXCIsXG4gICAgICAgIHdpZHRoOiA4LFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PlxuICAgICAgICAgIHYgPT09IFwidGVzdFwiID8gY29sb3JzLndhcm5pbmcoXCJ0ZXN0XCIpIDogY29sb3JzLnN1Y2Nlc3MoXCJsaXZlXCIpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyOiBcIlN0YXR1c1wiLFxuICAgICAgICBrZXk6IFwiaXNBY3RpdmVcIixcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PlxuICAgICAgICAgIHYgPyBjb2xvcnMuc3VjY2VzcyhcImFjdGl2ZVwiKSA6IGNvbG9ycy5lcnJvcihcInJldm9rZWRcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiTGFzdCBVc2VkXCIsXG4gICAgICAgIGtleTogXCJsYXN0VXNlZEF0XCIsXG4gICAgICAgIHdpZHRoOiAxMixcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT5cbiAgICAgICAgICB2ID8gZm9ybWF0UmVsYXRpdmVUaW1lKFN0cmluZyh2KSkgOiBjb2xvcnMuZGltKFwibmV2ZXJcIiksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,15 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class EnterpriseKeysRevoke extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ workspaceId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ keyId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ yes: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,57 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { success, error, json, isJsonMode } from "../../../lib/output.js";
5
+ import inquirer from "inquirer";
6
+ export default class EnterpriseKeysRevoke extends AuthenticatedCommand {
7
+ static description = "Revoke an API key for an enterprise workspace";
8
+ static examples = [
9
+ "<%= config.bin %> enterprise keys revoke org_abc123 key_xyz",
10
+ "<%= config.bin %> enterprise keys revoke org_abc123 key_xyz --yes",
11
+ ];
12
+ static args = {
13
+ workspaceId: Args.string({
14
+ description: "Workspace ID",
15
+ required: true,
16
+ }),
17
+ keyId: Args.string({
18
+ description: "API key ID to revoke",
19
+ required: true,
20
+ }),
21
+ };
22
+ static flags = {
23
+ ...AuthenticatedCommand.baseFlags,
24
+ yes: Flags.boolean({
25
+ char: "y",
26
+ description: "Skip confirmation prompt",
27
+ default: false,
28
+ }),
29
+ };
30
+ async run() {
31
+ const { args, flags } = await this.parse(EnterpriseKeysRevoke);
32
+ if (!flags.yes && !isJsonMode()) {
33
+ const { confirm } = await inquirer.prompt([
34
+ {
35
+ type: "confirm",
36
+ name: "confirm",
37
+ message: `Revoke API key ${args.keyId}? This cannot be undone.`,
38
+ default: false,
39
+ },
40
+ ]);
41
+ if (!confirm) {
42
+ error("Revocation cancelled");
43
+ return;
44
+ }
45
+ }
46
+ await apiClient.delete(`/api/v1/enterprise/workspaces/${args.workspaceId}/keys/${args.keyId}`);
47
+ if (isJsonMode()) {
48
+ json({ success: true, keyId: args.keyId });
49
+ return;
50
+ }
51
+ success("API key revoked", {
52
+ "Key ID": args.keyId,
53
+ Workspace: args.workspaceId,
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2b2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2Uva2V5cy9yZXZva2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBcUIsU0FBUSxvQkFBb0I7SUFDcEUsTUFBTSxDQUFDLFdBQVcsR0FBRywrQ0FBK0MsQ0FBQztJQUVyRSxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLDZEQUE2RDtRQUM3RCxtRUFBbUU7S0FDcEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixXQUFXLEVBQUUsY0FBYztZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QztvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixPQUFPLEVBQUUsa0JBQWtCLElBQUksQ0FBQyxLQUFLLDBCQUEwQjtvQkFDL0QsT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzlCLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FDcEIsaUNBQWlDLElBQUksQ0FBQyxXQUFXLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUN2RSxDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZ3MsIEZsYWdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGVycm9yLCBqc29uLCBpc0pzb25Nb2RlIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50ZXJwcmlzZUtleXNSZXZva2UgZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiUmV2b2tlIGFuIEFQSSBrZXkgZm9yIGFuIGVudGVycHJpc2Ugd29ya3NwYWNlXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBrZXlzIHJldm9rZSBvcmdfYWJjMTIzIGtleV94eXpcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2Uga2V5cyByZXZva2Ugb3JnX2FiYzEyMyBrZXlfeHl6IC0teWVzXCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgd29ya3NwYWNlSWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldvcmtzcGFjZSBJRFwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSksXG4gICAga2V5SWQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFQSSBrZXkgSUQgdG8gcmV2b2tlXCIsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIHllczogRmxhZ3MuYm9vbGVhbih7XG4gICAgICBjaGFyOiBcInlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNraXAgY29uZmlybWF0aW9uIHByb21wdFwiLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncywgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoRW50ZXJwcmlzZUtleXNSZXZva2UpO1xuXG4gICAgaWYgKCFmbGFncy55ZXMgJiYgIWlzSnNvbk1vZGUoKSkge1xuICAgICAgY29uc3QgeyBjb25maXJtIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgICAgbmFtZTogXCJjb25maXJtXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFJldm9rZSBBUEkga2V5ICR7YXJncy5rZXlJZH0/IFRoaXMgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmICghY29uZmlybSkge1xuICAgICAgICBlcnJvcihcIlJldm9jYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgYXBpQ2xpZW50LmRlbGV0ZShcbiAgICAgIGAvYXBpL3YxL2VudGVycHJpc2Uvd29ya3NwYWNlcy8ke2FyZ3Mud29ya3NwYWNlSWR9L2tleXMvJHthcmdzLmtleUlkfWAsXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24oeyBzdWNjZXNzOiB0cnVlLCBrZXlJZDogYXJncy5rZXlJZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKFwiQVBJIGtleSByZXZva2VkXCIsIHtcbiAgICAgIFwiS2V5IElEXCI6IGFyZ3Mua2V5SWQsXG4gICAgICBXb3Jrc3BhY2U6IGFyZ3Mud29ya3NwYWNlSWQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ export default class EnterpriseProvision extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
+ credits: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
8
+ "inherit-from": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ "webhook-url": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ "create-key": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ bulk: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
+ };
15
+ run(): Promise<void>;
16
+ private bulkProvision;
17
+ }
@@ -0,0 +1,143 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
3
+ import { apiClient } from "../../lib/api-client.js";
4
+ import { success, json, table, colors, isJsonMode, spinner, } from "../../lib/output.js";
5
+ import * as fs from "node:fs";
6
+ export default class EnterpriseProvision extends AuthenticatedCommand {
7
+ static description = "Provision a new workspace with full setup, or bulk provision from a JSON file";
8
+ static examples = [
9
+ '<%= config.bin %> enterprise provision --name "Acme Corp" --credits 1000',
10
+ '<%= config.bin %> enterprise provision --name "Acme Corp" --credits 500 --inherit-from org_abc123 --webhook-url https://example.com/hook',
11
+ "<%= config.bin %> enterprise provision --bulk workspaces.json",
12
+ ];
13
+ static flags = {
14
+ ...AuthenticatedCommand.baseFlags,
15
+ name: Flags.string({
16
+ char: "n",
17
+ description: "Workspace name (single provision)",
18
+ }),
19
+ credits: Flags.integer({
20
+ char: "c",
21
+ description: "Initial credits to allocate",
22
+ }),
23
+ "inherit-from": Flags.string({
24
+ description: "Workspace ID to inherit verification from",
25
+ }),
26
+ "webhook-url": Flags.string({
27
+ description: "Webhook URL for the workspace",
28
+ }),
29
+ "create-key": Flags.boolean({
30
+ description: "Create an API key for the workspace",
31
+ default: false,
32
+ }),
33
+ bulk: Flags.string({
34
+ char: "b",
35
+ description: "Path to JSON file for bulk provisioning (up to 50 workspaces)",
36
+ }),
37
+ };
38
+ async run() {
39
+ const { flags } = await this.parse(EnterpriseProvision);
40
+ if (flags.bulk) {
41
+ await this.bulkProvision(flags.bulk);
42
+ return;
43
+ }
44
+ if (!flags.name) {
45
+ this.error("--name is required for single provisioning. Use --bulk for batch provisioning.");
46
+ }
47
+ const spin = spinner("Provisioning workspace...");
48
+ spin.start();
49
+ const body = { name: flags.name };
50
+ if (flags.credits)
51
+ body.credits = flags.credits;
52
+ if (flags["inherit-from"])
53
+ body.inheritVerificationFrom = flags["inherit-from"];
54
+ if (flags["webhook-url"])
55
+ body.webhookUrl = flags["webhook-url"];
56
+ if (flags["create-key"])
57
+ body.createApiKey = true;
58
+ const response = await apiClient.post("/api/v1/enterprise/workspaces/provision", body);
59
+ spin.succeed("Workspace provisioned");
60
+ if (isJsonMode()) {
61
+ json(response);
62
+ return;
63
+ }
64
+ const details = {
65
+ ID: response.organization.id,
66
+ Name: response.organization.name,
67
+ Slug: response.organization.slug,
68
+ };
69
+ if (response.verification) {
70
+ details["Verification"] = response.verification.status === "approved"
71
+ ? colors.success("inherited")
72
+ : colors.warning(response.verification.status);
73
+ }
74
+ if (response.credits) {
75
+ details["Credits"] = `${response.credits.balance.toLocaleString()} credits`;
76
+ }
77
+ if (response.apiKey) {
78
+ details["API Key"] = response.apiKey.key;
79
+ }
80
+ if (response.webhook) {
81
+ details["Webhook"] = response.webhook.url;
82
+ }
83
+ success("Workspace provisioned", details);
84
+ if (response.apiKey) {
85
+ console.log();
86
+ console.log(colors.warning(" Save the API key now — it won't be shown again."));
87
+ }
88
+ }
89
+ async bulkProvision(filePath) {
90
+ if (!fs.existsSync(filePath)) {
91
+ this.error(`File not found: ${filePath}`);
92
+ }
93
+ const content = fs.readFileSync(filePath, "utf-8");
94
+ let workspaces;
95
+ try {
96
+ workspaces = JSON.parse(content);
97
+ }
98
+ catch {
99
+ this.error("Invalid JSON file. Expected an array of workspace objects.");
100
+ }
101
+ if (!Array.isArray(workspaces)) {
102
+ this.error("JSON file must contain an array of workspace objects.");
103
+ }
104
+ if (workspaces.length > 50) {
105
+ this.error("Bulk provisioning supports up to 50 workspaces at a time.");
106
+ }
107
+ const spin = spinner(`Provisioning ${workspaces.length} workspaces...`);
108
+ spin.start();
109
+ const response = await apiClient.post("/api/v1/enterprise/workspaces/provision/bulk", { workspaces });
110
+ spin.succeed(`Provisioned ${response.totalCreated}/${response.totalRequested} workspaces`);
111
+ if (isJsonMode()) {
112
+ json(response);
113
+ return;
114
+ }
115
+ console.log();
116
+ table(response.results, [
117
+ { header: "Name", key: "name", width: 24 },
118
+ {
119
+ header: "Status",
120
+ key: "success",
121
+ width: 10,
122
+ formatter: (v) => v ? colors.success("created") : colors.error("failed"),
123
+ },
124
+ {
125
+ header: "Workspace ID",
126
+ key: "workspaceId",
127
+ width: 20,
128
+ formatter: (v) => (v ? colors.dim(String(v)) : colors.dim("—")),
129
+ },
130
+ {
131
+ header: "Error",
132
+ key: "error",
133
+ width: 30,
134
+ formatter: (v) => (v ? colors.error(String(v)) : ""),
135
+ },
136
+ ]);
137
+ if (response.totalFailed > 0) {
138
+ console.log();
139
+ console.log(colors.warning(` ${response.totalFailed} workspace(s) failed to provision.`));
140
+ }
141
+ }
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2UvcHJvdmlzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFDTCxPQUFPLEVBQ1AsSUFBSSxFQUNKLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUM5QixNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUNuRSxNQUFNLENBQUMsV0FBVyxHQUFHLCtFQUErRSxDQUFDO0lBRXJHLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsMEVBQTBFO1FBQzFFLDBJQUEwSTtRQUMxSSwrREFBK0Q7S0FDaEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsbUNBQW1DO1NBQ2pELENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNyQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSw2QkFBNkI7U0FDM0MsQ0FBQztRQUNGLGNBQWMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLFdBQVcsRUFBRSwyQ0FBMkM7U0FDekQsQ0FBQztRQUNGLGFBQWEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzFCLFdBQVcsRUFB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O2dCQUNFLE1BQU0sRUFBRSxPQUFPO2dCQUNmLEdBQUcsRUFBRSxPQUFPO2dCQUNaLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNyRDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxPQUFPLENBQ1osS0FBSyxRQUFRLENBQUMsV0FBVyxvQ0FBb0MsQ0FDOUQsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBqc29uLFxuICB0YWJsZSxcbiAgY29sb3JzLFxuICBpc0pzb25Nb2RlLFxuICBzcGlubmVyLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW50ZXJmYWNlIFByb3Zpc2lvblJlc3BvbnNlIHtcbiAgb3JnYW5pemF0aW9uOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgc2x1Zzogc3RyaW5nIH07XG4gIHZlcmlmaWNhdGlvbj86IHsgc3RhdHVzOiBzdHJpbmcgfTtcbiAgY3JlZGl0cz86IHsgYmFsYW5jZTogbnVtYmVyIH07XG4gIGFwaUtleT86IHsgaWQ6IHN0cmluZzsga2V5OiBzdHJpbmc7IHByZWZpeDogc3RyaW5nIH07XG4gIHdlYmhvb2s/OiB7IHVybDogc3RyaW5nIH07XG4gIG9wdEluUGFnZT86IHsgaWQ6IHN0cmluZzsgc2x1Zzogc3RyaW5nIH07XG59XG5cbmludGVyZmFjZSBCdWxrUHJvdmlzaW9uSXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgY3JlZGl0cz86IG51bWJlcjtcbiAgaW5oZXJpdFZlcmlmaWNhdGlvbkZyb20/OiBzdHJpbmc7XG4gIHdlYmhvb2tVcmw/OiBzdHJpbmc7XG4gIGNyZWF0ZUFwaUtleT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBCdWxrUmVzdWx0SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQnVsa1Byb3Zpc2lvblJlc3BvbnNlIHtcbiAgcmVzdWx0czogQnVsa1Jlc3VsdEl0ZW1bXTtcbiAgdG90YWxSZXF1ZXN0ZWQ6IG51bWJlcjtcbiAgdG90YWxDcmVhdGVkOiBudW1iZXI7XG4gIHRvdGFsRmFpbGVkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudGVycHJpc2VQcm92aXNpb24gZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiUHJvdmlzaW9uIGEgbmV3IHdvcmtzcGFjZSB3aXRoIGZ1bGwgc2V0dXAsIG9yIGJ1bGsgcHJvdmlzaW9uIGZyb20gYSBKU09OIGZpbGVcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgJzwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2UgcHJvdmlzaW9uIC0tbmFtZSBcIkFjbWUgQ29ycFwiIC0tY3JlZGl0cyAxMDAwJyxcbiAgICAnPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBwcm92aXNpb24gLS1uYW1lIFwiQWNtZSBDb3JwXCIgLS1jcmVkaXRzIDUwMCAtLWluaGVyaXQtZnJvbSBvcmdfYWJjMTIzIC0td2ViaG9vay11cmwgaHR0cHM6Ly9leGFtcGxlLmNvbS9ob29rJyxcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2UgcHJvdmlzaW9uIC0tYnVsayB3b3Jrc3BhY2VzLmpzb25cIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIG5hbWU6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcIm5cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIldvcmtzcGFjZSBuYW1lIChzaW5nbGUgcHJvdmlzaW9uKVwiLFxuICAgIH0pLFxuICAgIGNyZWRpdHM6IEZsYWdzLmludGVnZXIoe1xuICAgICAgY2hhcjogXCJjXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJJbml0aWFsIGNyZWRpdHMgdG8gYWxsb2NhdGVcIixcbiAgICB9KSxcbiAgICBcImluaGVyaXQtZnJvbVwiOiBGbGFncy5zdHJpbmcoe1xuICAgICAgZGVzY3JpcHRpb246IFwiV29ya3NwYWNlIElEIHRvIGluaGVyaXQgdmVyaWZpY2F0aW9uIGZyb21cIixcbiAgICB9KSxcbiAgICBcIndlYmhvb2stdXJsXCI6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXZWJob29rIFVSTCBmb3IgdGhlIHdvcmtzcGFjZVwiLFxuICAgIH0pLFxuICAgIFwiY3JlYXRlLWtleVwiOiBGbGFncy5ib29sZWFuKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBhbiBBUEkga2V5IGZvciB0aGUgd29ya3NwYWNlXCIsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9KSxcbiAgICBidWxrOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQYXRoIHRvIEpTT04gZmlsZSBmb3IgYnVsayBwcm92aXNpb25pbmcgKHVwIHRvIDUwIHdvcmtzcGFjZXMpXCIsXG4gICAgfSksXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoRW50ZXJwcmlzZVByb3Zpc2lvbik7XG5cbiAgICBpZiAoZmxhZ3MuYnVsaykge1xuICAgICAgYXdhaXQgdGhpcy5idWxrUHJvdmlzaW9uKGZsYWdzLmJ1bGspO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZmxhZ3MubmFtZSkge1xuICAgICAgdGhpcy5lcnJvcihcIi0tbmFtZSBpcyByZXF1aXJlZCBmb3Igc2luZ2xlIHByb3Zpc2lvbmluZy4gVXNlIC0tYnVsayBmb3IgYmF0Y2ggcHJvdmlzaW9uaW5nLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGluID0gc3Bpbm5lcihcIlByb3Zpc2lvbmluZyB3b3Jrc3BhY2UuLi5cIik7XG4gICAgc3Bpbi5zdGFydCgpO1xuXG4gICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IG5hbWU6IGZsYWdzLm5hbWUgfTtcbiAgICBpZiAoZmxhZ3MuY3JlZGl0cykgYm9keS5jcmVkaXRzID0gZmxhZ3MuY3JlZGl0cztcbiAgICBpZiAoZmxhZ3NbXCJpbmhlcml0LWZyb21cIl0pIGJvZHkuaW5oZXJpdFZlcmlmaWNhdGlvbkZyb20gPSBmbGFnc1tcImluaGVyaXQtZnJvbVwiXTtcbiAgICBpZiAoZmxhZ3NbXCJ3ZWJob29rLXVybFwiXSkgYm9keS53ZWJob29rVXJsID0gZmxhZ3NbXCJ3ZWJob29rLXVybFwiXTtcbiAgICBpZiAoZmxhZ3NbXCJjcmVhdGUta2V5XCJdKSBib2R5LmNyZWF0ZUFwaUtleSA9IHRydWU7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PFByb3Zpc2lvblJlc3BvbnNlPihcbiAgICAgIFwiL2FwaS92MS9lbnRlcnByaXNlL3dvcmtzcGFjZXMvcHJvdmlzaW9uXCIsXG4gICAgICBib2R5LFxuICAgICk7XG5cbiAgICBzcGluLnN1Y2NlZWQoXCJXb3Jrc3BhY2UgcHJvdmlzaW9uZWRcIik7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgSUQ6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbi5pZCxcbiAgICAgIE5hbWU6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbi5uYW1lLFxuICAgICAgU2x1ZzogcmVzcG9uc2Uub3JnYW5pemF0aW9uLnNsdWcsXG4gICAgfTtcblxuICAgIGlmIChyZXNwb25zZS52ZXJpZmljYXRpb24pIHtcbiAgICAgIGRldGFpbHNbXCJWZXJpZmljYXRpb25cIl0gPSByZXNwb25zZS52ZXJpZmljYXRpb24uc3RhdHVzID09PSBcImFwcHJvdmVkXCJcbiAgICAgICAgPyBjb2xvcnMuc3VjY2VzcyhcImluaGVyaXRlZFwiKVxuICAgICAgICA6IGNvbG9ycy53YXJuaW5nKHJlc3BvbnNlLnZlcmlmaWNhdGlvbi5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuY3JlZGl0cykge1xuICAgICAgZGV0YWlsc1tcIkNyZWRpdHNcIl0gPSBgJHtyZXNwb25zZS5jcmVkaXRzLmJhbGFuY2UudG9Mb2NhbGVTdHJpbmcoKX0gY3JlZGl0c2A7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5hcGlLZXkpIHtcbiAgICAgIGRldGFpbHNbXCJBUEkgS2V5XCJdID0gcmVzcG9uc2UuYXBpS2V5LmtleTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLndlYmhvb2spIHtcbiAgICAgIGRldGFpbHNbXCJXZWJob29rXCJdID0gcmVzcG9uc2Uud2ViaG9vay51cmw7XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIldvcmtzcGFjZSBwcm92aXNpb25lZFwiLCBkZXRhaWxzKTtcblxuICAgIGlmIChyZXNwb25zZS5hcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLndhcm5pbmcoXCIgIFNhdmUgdGhlIEFQSSBrZXkgbm93IOKAlCBpdCB3b24ndCBiZSBzaG93biBhZ2Fpbi5cIiksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVsa1Byb3Zpc2lvbihmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgdGhpcy5lcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBsZXQgd29ya3NwYWNlczogQnVsa1Byb3Zpc2lvbkl0ZW1bXTtcblxuICAgIHRyeSB7XG4gICAgICB3b3Jrc3BhY2VzID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJJbnZhbGlkIEpTT04gZmlsZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2Ygd29ya3NwYWNlIG9iamVjdHMuXCIpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh3b3Jrc3BhY2VzKSkge1xuICAgICAgdGhpcy5lcnJvcihcIkpTT04gZmlsZSBtdXN0IGNvbnRhaW4gYW4gYXJyYXkgb2Ygd29ya3NwYWNlIG9iamVjdHMuXCIpO1xuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VzLmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aGlzLmVycm9yKFwiQnVsayBwcm92aXNpb25pbmcgc3VwcG9ydHMgdXAgdG8gNTAgd29ya3NwYWNlcyBhdCBhIHRpbWUuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKGBQcm92aXNpb25pbmcgJHt3b3Jrc3BhY2VzLmxlbmd0aH0gd29ya3NwYWNlcy4uLmApO1xuICAgIHNwaW4uc3RhcnQoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8QnVsa1Byb3Zpc2lvblJlc3BvbnNlPihcbiAgICAgIFwiL2FwaS92MS9lbnRlcnByaXNlL3dvcmtzcGFjZXMvcHJvdmlzaW9uL2J1bGtcIixcbiAgICAgIHsgd29ya3NwYWNlcyB9LFxuICAgICk7XG5cbiAgICBzcGluLnN1Y2NlZWQoXG4gICAgICBgUHJvdmlzaW9uZWQgJHtyZXNwb25zZS50b3RhbENyZWF0ZWR9LyR7cmVzcG9uc2UudG90YWxSZXF1ZXN0ZWR9IHdvcmtzcGFjZXNgLFxuICAgICk7XG5cbiAgICBpZiAoaXNKc29uTW9kZSgpKSB7XG4gICAgICBqc29uKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygpO1xuICAgIHRhYmxlKHJlc3BvbnNlLnJlc3VsdHMsIFtcbiAgICAgIHsgaGVhZGVyOiBcIk5hbWVcIiwga2V5OiBcIm5hbWVcIiwgd2lkdGg6IDI0IH0sXG4gICAgICB7XG4gICAgICAgIGhlYWRlcjogXCJTdGF0dXNcIixcbiAgICAgICAga2V5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICBmb3JtYXR0ZXI6ICh2KSA9PlxuICAgICAgICAgIHYgPyBjb2xvcnMuc3VjY2VzcyhcImNyZWF0ZWRcIikgOiBjb2xvcnMuZXJyb3IoXCJmYWlsZWRcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiV29ya3NwYWNlIElEXCIsXG4gICAgICAgIGtleTogXCJ3b3Jrc3BhY2VJZFwiLFxuICAgICAgICB3aWR0aDogMjAsXG4gICAgICAgIGZvcm1hdHRlcjogKHYpID0+ICh2ID8gY29sb3JzLmRpbShTdHJpbmcodikpIDogY29sb3JzLmRpbShcIuKAlFwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IFwiRXJyb3JcIixcbiAgICAgICAga2V5OiBcImVycm9yXCIsXG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgZm9ybWF0dGVyOiAodikgPT4gKHYgPyBjb2xvcnMuZXJyb3IoU3RyaW5nKHYpKSA6IFwiXCIpLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmIChyZXNwb25zZS50b3RhbEZhaWxlZCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLndhcm5pbmcoXG4gICAgICAgICAgYCAgJHtyZXNwb25zZS50b3RhbEZhaWxlZH0gd29ya3NwYWNlKHMpIGZhaWxlZCB0byBwcm92aXNpb24uYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class QuotaGet extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ workspaceId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
@@ -0,0 +1,40 @@
1
+ import { Args } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { json, keyValue, colors, header, isJsonMode, } from "../../../lib/output.js";
5
+ export default class QuotaGet extends AuthenticatedCommand {
6
+ static description = "Get message quota for an enterprise workspace";
7
+ static examples = [
8
+ "<%= config.bin %> enterprise quota get org_abc123",
9
+ "<%= config.bin %> enterprise quota get org_abc123 --json",
10
+ ];
11
+ static args = {
12
+ workspaceId: Args.string({
13
+ description: "Workspace ID",
14
+ required: true,
15
+ }),
16
+ };
17
+ static flags = {
18
+ ...AuthenticatedCommand.baseFlags,
19
+ };
20
+ async run() {
21
+ const { args } = await this.parse(QuotaGet);
22
+ const quota = await apiClient.get(`/api/v1/enterprise/workspaces/${args.workspaceId}/quota`);
23
+ if (isJsonMode()) {
24
+ json(quota);
25
+ return;
26
+ }
27
+ header("Workspace Quota");
28
+ keyValue({
29
+ "Daily Limit": quota.dailyLimit !== null
30
+ ? quota.dailyLimit.toLocaleString()
31
+ : colors.dim("unlimited"),
32
+ "Daily Used": `${quota.dailyUsed.toLocaleString()}${quota.dailyLimit ? ` / ${quota.dailyLimit.toLocaleString()}` : ""}`,
33
+ "Monthly Limit": quota.monthlyLimit !== null
34
+ ? quota.monthlyLimit.toLocaleString()
35
+ : colors.dim("unlimited"),
36
+ "Monthly Used": `${quota.monthlyUsed.toLocaleString()}${quota.monthlyLimit ? ` / ${quota.monthlyLimit.toLocaleString()}` : ""}`,
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2UvcXVvdGEvZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxHQUNYLE1BQU0sd0JBQXdCLENBQUM7QUFTaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxRQUFTLFNBQVEsb0JBQW9CO0lBQ3hELE1BQU0sQ0FBQyxXQUFXLEdBQUcsK0NBQStDLENBQUM7SUFFckUsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixtREFBbUQ7UUFDbkQsMERBQTBEO0tBQzNELENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxHQUFHO1FBQ1osV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdkIsV0FBVyxFQUFFLGNBQWM7WUFDM0IsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QyxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQy9CLGlDQUFpQyxJQUFJLENBQUMsV0FBVyxRQUFRLENBQzFELENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUxQixRQUFRLENBQUM7WUFDUCxhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJO2dCQUN0QyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUMzQixZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkgsZUFBZSxFQUFFLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSTtnQkFDMUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFO2dCQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDM0IsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1NBQ2hJLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmdzIH0gZnJvbSBcIkBvY2xpZi9jb3JlXCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7XG4gIGpzb24sXG4gIGtleVZhbHVlLFxuICBjb2xvcnMsXG4gIGhlYWRlcixcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFF1b3RhU2V0dGluZ3Mge1xuICBkYWlseUxpbWl0OiBudW1iZXIgfCBudWxsO1xuICBtb250aGx5TGltaXQ6IG51bWJlciB8IG51bGw7XG4gIGRhaWx5VXNlZDogbnVtYmVyO1xuICBtb250aGx5VXNlZDogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdW90YUdldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJHZXQgbWVzc2FnZSBxdW90YSBmb3IgYW4gZW50ZXJwcmlzZSB3b3Jrc3BhY2VcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBlbnRlcnByaXNlIHF1b3RhIGdldCBvcmdfYWJjMTIzXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBlbnRlcnByaXNlIHF1b3RhIGdldCBvcmdfYWJjMTIzIC0tanNvblwiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIHdvcmtzcGFjZUlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXb3Jrc3BhY2UgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgYXJncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShRdW90YUdldCk7XG5cbiAgICBjb25zdCBxdW90YSA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8UXVvdGFTZXR0aW5ncz4oXG4gICAgICBgL2FwaS92MS9lbnRlcnByaXNlL3dvcmtzcGFjZXMvJHthcmdzLndvcmtzcGFjZUlkfS9xdW90YWAsXG4gICAgKTtcblxuICAgIGlmIChpc0pzb25Nb2RlKCkpIHtcbiAgICAgIGpzb24ocXVvdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGhlYWRlcihcIldvcmtzcGFjZSBRdW90YVwiKTtcblxuICAgIGtleVZhbHVlKHtcbiAgICAgIFwiRGFpbHkgTGltaXRcIjogcXVvdGEuZGFpbHlMaW1pdCAhPT0gbnVsbFxuICAgICAgICA/IHF1b3RhLmRhaWx5TGltaXQudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICA6IGNvbG9ycy5kaW0oXCJ1bmxpbWl0ZWRcIiksXG4gICAgICBcIkRhaWx5IFVzZWRcIjogYCR7cXVvdGEuZGFpbHlVc2VkLnRvTG9jYWxlU3RyaW5nKCl9JHtxdW90YS5kYWlseUxpbWl0ID8gYCAvICR7cXVvdGEuZGFpbHlMaW1pdC50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifWAsXG4gICAgICBcIk1vbnRobHkgTGltaXRcIjogcXVvdGEubW9udGhseUxpbWl0ICE9PSBudWxsXG4gICAgICAgID8gcXVvdGEubW9udGhseUxpbWl0LnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICAgOiBjb2xvcnMuZGltKFwidW5saW1pdGVkXCIpLFxuICAgICAgXCJNb250aGx5IFVzZWRcIjogYCR7cXVvdGEubW9udGhseVVzZWQudG9Mb2NhbGVTdHJpbmcoKX0ke3F1b3RhLm1vbnRobHlMaW1pdCA/IGAgLyAke3F1b3RhLm1vbnRobHlMaW1pdC50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifWAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
2
+ export default class QuotaSet extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ workspaceId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ daily: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ monthly: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,69 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { AuthenticatedCommand } from "../../../lib/base-command.js";
3
+ import { apiClient } from "../../../lib/api-client.js";
4
+ import { success, json, colors, isJsonMode } from "../../../lib/output.js";
5
+ export default class QuotaSet extends AuthenticatedCommand {
6
+ static description = "Set message quota for an enterprise workspace";
7
+ static examples = [
8
+ "<%= config.bin %> enterprise quota set org_abc123 --daily 1000",
9
+ "<%= config.bin %> enterprise quota set org_abc123 --monthly 25000",
10
+ "<%= config.bin %> enterprise quota set org_abc123 --daily 1000 --monthly 25000",
11
+ "<%= config.bin %> enterprise quota set org_abc123 --daily unlimited",
12
+ ];
13
+ static args = {
14
+ workspaceId: Args.string({
15
+ description: "Workspace ID",
16
+ required: true,
17
+ }),
18
+ };
19
+ static flags = {
20
+ ...AuthenticatedCommand.baseFlags,
21
+ daily: Flags.string({
22
+ description: 'Daily message limit (number or "unlimited")',
23
+ }),
24
+ monthly: Flags.string({
25
+ description: 'Monthly message limit (number or "unlimited")',
26
+ }),
27
+ };
28
+ async run() {
29
+ const { args, flags } = await this.parse(QuotaSet);
30
+ if (!flags.daily && !flags.monthly) {
31
+ this.error("Specify at least one of --daily or --monthly.");
32
+ }
33
+ const body = {};
34
+ if (flags.daily !== undefined) {
35
+ body.dailyLimit =
36
+ flags.daily === "unlimited" ? null : parseInt(flags.daily, 10);
37
+ if (flags.daily !== "unlimited" && isNaN(body.dailyLimit)) {
38
+ this.error('--daily must be a number or "unlimited".');
39
+ }
40
+ }
41
+ if (flags.monthly !== undefined) {
42
+ body.monthlyLimit =
43
+ flags.monthly === "unlimited" ? null : parseInt(flags.monthly, 10);
44
+ if (flags.monthly !== "unlimited" && isNaN(body.monthlyLimit)) {
45
+ this.error('--monthly must be a number or "unlimited".');
46
+ }
47
+ }
48
+ const quota = await apiClient.put(`/api/v1/enterprise/workspaces/${args.workspaceId}/quota`, body);
49
+ if (isJsonMode()) {
50
+ json(quota);
51
+ return;
52
+ }
53
+ const details = {};
54
+ if (flags.daily !== undefined) {
55
+ details["Daily Limit"] =
56
+ quota.dailyLimit !== null
57
+ ? quota.dailyLimit.toLocaleString()
58
+ : colors.dim("unlimited");
59
+ }
60
+ if (flags.monthly !== undefined) {
61
+ details["Monthly Limit"] =
62
+ quota.monthlyLimit !== null
63
+ ? quota.monthlyLimit.toLocaleString()
64
+ : colors.dim("unlimited");
65
+ }
66
+ success("Quota updated", details);
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2UvcXVvdGEvc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTM0UsTUFBTSxDQUFDLE9BQU8sT0FBTyxRQUFTLFNBQVEsb0JBQW9CO0lBQ3hELE1BQU0sQ0FBQyxXQUFXLEdBQUcsK0NBQStDLENBQUM7SUFFckUsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixnRUFBZ0U7UUFDaEUsbUVBQW1FO1FBQ25FLGdGQUFnRjtRQUNoRixxRUFBcUU7S0FDdEUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixXQUFXLEVBQUUsY0FBYztZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsb0JBQW9CLENBQUMsU0FBUztRQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQixXQUFXLEVBQUUsNkNBQTZDO1NBQzNELENBQUM7UUFDRixPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQixXQUFXLEVBQUUsK0NBQStDO1NBQzdELENBQUM7S0FDSCxDQUFDO0lBRUYsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUE0QixFQUFFLENBQUM7UUFFekMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVO2dCQUNiLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZO2dCQUNmLEtBQUssQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFzQixDQUFDLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUMvQixpQ0FBaUMsSUFBSSxDQUFDLFdBQVcsUUFBUSxFQUN6RCxJQUFJLENBQ0wsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDWixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7UUFFM0MsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSTtvQkFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO29CQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSTtvQkFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFO29CQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywganNvbiwgY29sb3JzLCBpc0pzb25Nb2RlIH0gZnJvbSBcIi4uLy4uLy4uL2xpYi9vdXRwdXQuanNcIjtcblxuaW50ZXJmYWNlIFF1b3RhU2V0dGluZ3Mge1xuICBkYWlseUxpbWl0OiBudW1iZXIgfCBudWxsO1xuICBtb250aGx5TGltaXQ6IG51bWJlciB8IG51bGw7XG4gIGRhaWx5VXNlZDogbnVtYmVyO1xuICBtb250aGx5VXNlZDogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdW90YVNldCBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTZXQgbWVzc2FnZSBxdW90YSBmb3IgYW4gZW50ZXJwcmlzZSB3b3Jrc3BhY2VcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBlbnRlcnByaXNlIHF1b3RhIHNldCBvcmdfYWJjMTIzIC0tZGFpbHkgMTAwMFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBxdW90YSBzZXQgb3JnX2FiYzEyMyAtLW1vbnRobHkgMjUwMDBcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IGVudGVycHJpc2UgcXVvdGEgc2V0IG9yZ19hYmMxMjMgLS1kYWlseSAxMDAwIC0tbW9udGhseSAyNTAwMFwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBxdW90YSBzZXQgb3JnX2FiYzEyMyAtLWRhaWx5IHVubGltaXRlZFwiLFxuICBdO1xuXG4gIHN0YXRpYyBhcmdzID0ge1xuICAgIHdvcmtzcGFjZUlkOiBBcmdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogXCJXb3Jrc3BhY2UgSURcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5BdXRoZW50aWNhdGVkQ29tbWFuZC5iYXNlRmxhZ3MsXG4gICAgZGFpbHk6IEZsYWdzLnN0cmluZyh7XG4gICAgICBkZXNjcmlwdGlvbjogJ0RhaWx5IG1lc3NhZ2UgbGltaXQgKG51bWJlciBvciBcInVubGltaXRlZFwiKScsXG4gICAgfSksXG4gICAgbW9udGhseTogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9udGhseSBtZXNzYWdlIGxpbWl0IChudW1iZXIgb3IgXCJ1bmxpbWl0ZWRcIiknLFxuICAgIH0pLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MsIGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFF1b3RhU2V0KTtcblxuICAgIGlmICghZmxhZ3MuZGFpbHkgJiYgIWZsYWdzLm1vbnRobHkpIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJTcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZiAtLWRhaWx5IG9yIC0tbW9udGhseS5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChmbGFncy5kYWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmRhaWx5TGltaXQgPVxuICAgICAgICBmbGFncy5kYWlseSA9PT0gXCJ1bmxpbWl0ZWRcIiA/IG51bGwgOiBwYXJzZUludChmbGFncy5kYWlseSwgMTApO1xuICAgICAgaWYgKGZsYWdzLmRhaWx5ICE9PSBcInVubGltaXRlZFwiICYmIGlzTmFOKGJvZHkuZGFpbHlMaW1pdCBhcyBudW1iZXIpKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoJy0tZGFpbHkgbXVzdCBiZSBhIG51bWJlciBvciBcInVubGltaXRlZFwiLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbGFncy5tb250aGx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkubW9udGhseUxpbWl0ID1cbiAgICAgICAgZmxhZ3MubW9udGhseSA9PT0gXCJ1bmxpbWl0ZWRcIiA/IG51bGwgOiBwYXJzZUludChmbGFncy5tb250aGx5LCAxMCk7XG4gICAgICBpZiAoZmxhZ3MubW9udGhseSAhPT0gXCJ1bmxpbWl0ZWRcIiAmJiBpc05hTihib2R5Lm1vbnRobHlMaW1pdCBhcyBudW1iZXIpKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoJy0tbW9udGhseSBtdXN0IGJlIGEgbnVtYmVyIG9yIFwidW5saW1pdGVkXCIuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcXVvdGEgPSBhd2FpdCBhcGlDbGllbnQucHV0PFF1b3RhU2V0dGluZ3M+KFxuICAgICAgYC9hcGkvdjEvZW50ZXJwcmlzZS93b3Jrc3BhY2VzLyR7YXJncy53b3Jrc3BhY2VJZH0vcXVvdGFgLFxuICAgICAgYm9keSxcbiAgICApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihxdW90YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGV0YWlsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgaWYgKGZsYWdzLmRhaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRldGFpbHNbXCJEYWlseSBMaW1pdFwiXSA9XG4gICAgICAgIHF1b3RhLmRhaWx5TGltaXQgIT09IG51bGxcbiAgICAgICAgICA/IHF1b3RhLmRhaWx5TGltaXQudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgIDogY29sb3JzLmRpbShcInVubGltaXRlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MubW9udGhseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXRhaWxzW1wiTW9udGhseSBMaW1pdFwiXSA9XG4gICAgICAgIHF1b3RhLm1vbnRobHlMaW1pdCAhPT0gbnVsbFxuICAgICAgICAgID8gcXVvdGEubW9udGhseUxpbWl0LnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICAgICA6IGNvbG9ycy5kaW0oXCJ1bmxpbWl0ZWRcIik7XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIlF1b3RhIHVwZGF0ZWRcIiwgZGV0YWlscyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ export default class EnterpriseStatus extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
7
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
@@ -0,0 +1,45 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ import { apiClient } from "../../lib/api-client.js";
3
+ import { json, keyValue, colors, header, isJsonMode, formatDate, formatCredits, } from "../../lib/output.js";
4
+ export default class EnterpriseStatus extends AuthenticatedCommand {
5
+ static description = "Show enterprise account status";
6
+ static examples = [
7
+ "<%= config.bin %> enterprise status",
8
+ "<%= config.bin %> enterprise status --json",
9
+ ];
10
+ static flags = {
11
+ ...AuthenticatedCommand.baseFlags,
12
+ };
13
+ async run() {
14
+ const response = await apiClient.get("/api/v1/enterprise/account");
15
+ if (isJsonMode()) {
16
+ json(response);
17
+ return;
18
+ }
19
+ const { account, workspaceCount } = response;
20
+ header("Enterprise Account");
21
+ const statusColor = account.status === "active"
22
+ ? colors.success
23
+ : account.status === "pending"
24
+ ? colors.warning
25
+ : colors.error;
26
+ keyValue({
27
+ Company: colors.primary(account.companyName),
28
+ Status: statusColor(account.status),
29
+ Workspaces: `${workspaceCount} / ${account.maxWorkspaces}`,
30
+ "Credits Allocated": formatCredits(account.totalCreditsAllocated),
31
+ "Platform Fee": account.monthlyPlatformFee
32
+ ? `$${account.monthlyPlatformFee}/mo`
33
+ : colors.dim("not set"),
34
+ "Per-Workspace Fee": account.perWorkspaceFee
35
+ ? `$${account.perWorkspaceFee}/mo`
36
+ : colors.dim("not set"),
37
+ "Enterprise Webhook": account.webhookUrl || colors.dim("not configured"),
38
+ "Activated At": account.activatedAt
39
+ ? formatDate(account.activatedAt)
40
+ : colors.dim("pending"),
41
+ "Created At": formatDate(account.createdAt),
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2VudGVycHJpc2Uvc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsSUFBSSxFQUNKLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDVixVQUFVLEVBQ1YsYUFBYSxHQUNkLE1BQU0scUJBQXFCLENBQUM7QUFzQjdCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsb0JBQW9CO0lBQ2hFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsZ0NBQWdDLENBQUM7SUFFdEQsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixxQ0FBcUM7UUFDckMsNENBQTRDO0tBQzdDLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO0tBQ2xDLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDbEMsNEJBQTRCLENBQzdCLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUU3QyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FDZixPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVE7WUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVM7Z0JBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFckIsUUFBUSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM1QyxNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbkMsVUFBVSxFQUFFLEdBQUcsY0FBYyxNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDMUQsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRSxjQUFjLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtnQkFDeEMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLGtCQUFrQixLQUFLO2dCQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDekIsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEtBQUs7Z0JBQ2xDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUN6QixvQkFBb0IsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDeEUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNqQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUN6QixZQUFZLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAganNvbixcbiAga2V5VmFsdWUsXG4gIGNvbG9ycyxcbiAgaGVhZGVyLFxuICBpc0pzb25Nb2RlLFxuICBmb3JtYXREYXRlLFxuICBmb3JtYXRDcmVkaXRzLFxufSBmcm9tIFwiLi4vLi4vbGliL291dHB1dC5qc1wiO1xuXG5pbnRlcmZhY2UgRW50ZXJwcmlzZUFjY291bnQge1xuICBpZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgc3RhdHVzOiBcInBlbmRpbmdcIiB8IFwiYWN0aXZlXCIgfCBcInN1c3BlbmRlZFwiIHwgXCJkZWFjdGl2YXRlZFwiO1xuICBjb21wYW55TmFtZTogc3RyaW5nO1xuICBtYXhXb3Jrc3BhY2VzOiBudW1iZXI7XG4gIHdlYmhvb2tVcmw/OiBzdHJpbmc7XG4gIHdlYmhvb2tTZWNyZXQ/OiBzdHJpbmc7XG4gIHRvdGFsQ3JlZGl0c0FsbG9jYXRlZDogbnVtYmVyO1xuICBtb250aGx5UGxhdGZvcm1GZWU/OiBudW1iZXI7XG4gIHBlcldvcmtzcGFjZUZlZT86IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3RhdHVzUmVzcG9uc2Uge1xuICBhY2NvdW50OiBFbnRlcnByaXNlQWNjb3VudDtcbiAgd29ya3NwYWNlQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW50ZXJwcmlzZVN0YXR1cyBleHRlbmRzIEF1dGhlbnRpY2F0ZWRDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTaG93IGVudGVycHJpc2UgYWNjb3VudCBzdGF0dXNcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiBlbnRlcnByaXNlIHN0YXR1c1wiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gZW50ZXJwcmlzZSBzdGF0dXMgLS1qc29uXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PFN0YXR1c1Jlc3BvbnNlPihcbiAgICAgIFwiL2FwaS92MS9lbnRlcnByaXNlL2FjY291bnRcIixcbiAgICApO1xuXG4gICAgaWYgKGlzSnNvbk1vZGUoKSkge1xuICAgICAganNvbihyZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBhY2NvdW50LCB3b3Jrc3BhY2VDb3VudCB9ID0gcmVzcG9uc2U7XG5cbiAgICBoZWFkZXIoXCJFbnRlcnByaXNlIEFjY291bnRcIik7XG5cbiAgICBjb25zdCBzdGF0dXNDb2xvciA9XG4gICAgICBhY2NvdW50LnN0YXR1cyA9PT0gXCJhY3RpdmVcIlxuICAgICAgICA/IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgIDogYWNjb3VudC5zdGF0dXMgPT09IFwicGVuZGluZ1wiXG4gICAgICAgICAgPyBjb2xvcnMud2FybmluZ1xuICAgICAgICAgIDogY29sb3JzLmVycm9yO1xuXG4gICAga2V5VmFsdWUoe1xuICAgICAgQ29tcGFueTogY29sb3JzLnByaW1hcnkoYWNjb3VudC5jb21wYW55TmFtZSksXG4gICAgICBTdGF0dXM6IHN0YXR1c0NvbG9yKGFjY291bnQuc3RhdHVzKSxcbiAgICAgIFdvcmtzcGFjZXM6IGAke3dvcmtzcGFjZUNvdW50fSAvICR7YWNjb3VudC5tYXhXb3Jrc3BhY2VzfWAsXG4gICAgICBcIkNyZWRpdHMgQWxsb2NhdGVkXCI6IGZvcm1hdENyZWRpdHMoYWNjb3VudC50b3RhbENyZWRpdHNBbGxvY2F0ZWQpLFxuICAgICAgXCJQbGF0Zm9ybSBGZWVcIjogYWNjb3VudC5tb250aGx5UGxhdGZvcm1GZWVcbiAgICAgICAgPyBgJCR7YWNjb3VudC5tb250aGx5UGxhdGZvcm1GZWV9L21vYFxuICAgICAgICA6IGNvbG9ycy5kaW0oXCJub3Qgc2V0XCIpLFxuICAgICAgXCJQZXItV29ya3NwYWNlIEZlZVwiOiBhY2NvdW50LnBlcldvcmtzcGFjZUZlZVxuICAgICAgICA/IGAkJHthY2NvdW50LnBlcldvcmtzcGFjZUZlZX0vbW9gXG4gICAgICAgIDogY29sb3JzLmRpbShcIm5vdCBzZXRcIiksXG4gICAgICBcIkVudGVycHJpc2UgV2ViaG9va1wiOiBhY2NvdW50LndlYmhvb2tVcmwgfHwgY29sb3JzLmRpbShcIm5vdCBjb25maWd1cmVkXCIpLFxuICAgICAgXCJBY3RpdmF0ZWQgQXRcIjogYWNjb3VudC5hY3RpdmF0ZWRBdFxuICAgICAgICA/IGZvcm1hdERhdGUoYWNjb3VudC5hY3RpdmF0ZWRBdClcbiAgICAgICAgOiBjb2xvcnMuZGltKFwicGVuZGluZ1wiKSxcbiAgICAgIFwiQ3JlYXRlZCBBdFwiOiBmb3JtYXREYXRlKGFjY291bnQuY3JlYXRlZEF0KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ import { AuthenticatedCommand } from "../../lib/base-command.js";
2
+ export default class EnterpriseTransferCredits extends AuthenticatedCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ from: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
+ to: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
8
+ amount: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ yes: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }