@doist/twist-cli 2.35.1 → 2.36.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/CHANGELOG.md +12 -0
- package/README.md +8 -0
- package/dist/commands/groups/create.d.ts +8 -0
- package/dist/commands/groups/create.d.ts.map +1 -0
- package/dist/commands/groups/create.js +29 -0
- package/dist/commands/groups/create.js.map +1 -0
- package/dist/commands/groups/delete.d.ts +7 -0
- package/dist/commands/groups/delete.d.ts.map +1 -0
- package/dist/commands/groups/delete.js +30 -0
- package/dist/commands/groups/delete.js.map +1 -0
- package/dist/commands/{groups.d.ts → groups/index.d.ts} +1 -1
- package/dist/commands/groups/index.d.ts.map +1 -0
- package/dist/commands/groups/index.js +98 -0
- package/dist/commands/groups/index.js.map +1 -0
- package/dist/commands/groups/list.d.ts +7 -0
- package/dist/commands/groups/list.d.ts.map +1 -0
- package/dist/commands/{groups.js → groups/list.js} +6 -17
- package/dist/commands/groups/list.js.map +1 -0
- package/dist/commands/groups/members.d.ts +4 -0
- package/dist/commands/groups/members.d.ts.map +1 -0
- package/dist/commands/groups/members.js +90 -0
- package/dist/commands/groups/members.js.map +1 -0
- package/dist/commands/groups/rename.d.ts +3 -0
- package/dist/commands/groups/rename.d.ts.map +1 -0
- package/dist/commands/groups/rename.js +30 -0
- package/dist/commands/groups/rename.js.map +1 -0
- package/dist/commands/groups/view.d.ts +7 -0
- package/dist/commands/groups/view.d.ts.map +1 -0
- package/dist/commands/groups/view.js +50 -0
- package/dist/commands/groups/view.js.map +1 -0
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +13 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +30 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/errors.d.ts +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/oauth.d.ts.map +1 -1
- package/dist/lib/oauth.js +2 -0
- package/dist/lib/oauth.js.map +1 -1
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +1 -0
- package/dist/lib/permissions.js.map +1 -1
- package/dist/lib/refs.d.ts +2 -1
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +66 -29
- package/dist/lib/refs.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +15 -0
- package/dist/lib/skills/content.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/groups.d.ts.map +0 -1
- package/dist/commands/groups.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [2.36.0](https://github.com/Doist/twist-cli/compare/v2.35.2...v2.36.0) (2026-05-07)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- **groups:** add membership and CRUD subcommands ([#202](https://github.com/Doist/twist-cli/issues/202)) ([a8e56f0](https://github.com/Doist/twist-cli/commit/a8e56f0d6e691a37d6b50f2489d8303d2de29247))
|
|
6
|
+
|
|
7
|
+
## [2.35.2](https://github.com/Doist/twist-cli/compare/v2.35.1...v2.35.2) (2026-05-06)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- **deps:** update dependency marked to v18.0.3 ([#203](https://github.com/Doist/twist-cli/issues/203)) ([69d4ac9](https://github.com/Doist/twist-cli/commit/69d4ac997ddf5f8db5373955ddaf476633574119))
|
|
12
|
+
|
|
1
13
|
## [2.35.1](https://github.com/Doist/twist-cli/compare/v2.35.0...v2.35.1) (2026-05-05)
|
|
2
14
|
|
|
3
15
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -116,6 +116,14 @@ tw react thread <ref> 👍 # add reaction
|
|
|
116
116
|
tw away # show away status
|
|
117
117
|
tw away set vacation 2026-03-20 # set away until date
|
|
118
118
|
tw away clear # clear away status
|
|
119
|
+
tw groups # list groups in a workspace
|
|
120
|
+
tw groups view <ref> # show a group with members
|
|
121
|
+
tw groups create "Frontend" # create a group
|
|
122
|
+
tw groups create "FE" --users alice@doist.com,bob@doist.com
|
|
123
|
+
tw groups rename <ref> "New name" # rename a group
|
|
124
|
+
tw groups delete <ref> --yes # delete a group
|
|
125
|
+
tw groups add-user <ref> alice@doist.com bob@doist.com
|
|
126
|
+
tw groups remove-user <ref> id:123,id:456
|
|
119
127
|
```
|
|
120
128
|
|
|
121
129
|
References accept IDs (`123` or `id:123`), Twist URLs, or fuzzy names (for workspaces/users).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
2
|
+
type CreateGroupOptions = MutationOptions & {
|
|
3
|
+
workspace?: string;
|
|
4
|
+
users?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createGroupCommand(name: string, options: CreateGroupOptions): Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,kBAAkB,GAAG,eAAe,GAAG;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BjG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createGroup, getCurrentWorkspaceId } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveUserRefs, resolveWorkspaceRef } from '../../lib/refs.js';
|
|
5
|
+
export async function createGroupCommand(name, options) {
|
|
6
|
+
if (!name || name.trim() === '') {
|
|
7
|
+
throw new CliError('INVALID_NAME', 'Group name cannot be empty.');
|
|
8
|
+
}
|
|
9
|
+
const workspaceId = options.workspace
|
|
10
|
+
? (await resolveWorkspaceRef(options.workspace)).id
|
|
11
|
+
: await getCurrentWorkspaceId();
|
|
12
|
+
const userIds = options.users ? await resolveUserRefs(options.users, workspaceId) : undefined;
|
|
13
|
+
if (options.dryRun) {
|
|
14
|
+
printDryRun('create group', {
|
|
15
|
+
Workspace: String(workspaceId),
|
|
16
|
+
Name: name,
|
|
17
|
+
Users: userIds && userIds.length > 0 ? userIds.join(', ') : undefined,
|
|
18
|
+
});
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const group = await createGroup({ workspaceId, name, userIds });
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(formatJson(group, 'group', options.full));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const memberSuffix = userIds && userIds.length > 0 ? ` with ${userIds.length} member(s)` : '';
|
|
27
|
+
console.log(`Group "${group.name}" (id:${group.id}) created${memberSuffix}.`);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/groups/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAOxE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAA2B;IAC9E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACnD,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAA;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE7F,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,cAAc,EAAE;YACxB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;YAC9B,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAE/D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACrD,OAAM;IACV,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,YAAY,YAAY,GAAG,CAAC,CAAA;AACjF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
2
|
+
type DeleteGroupOptions = MutationOptions & {
|
|
3
|
+
yes?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare function deleteGroupCommand(ref: string, options: DeleteGroupOptions): Promise<void>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/delete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,kBAAkB,GAAG,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7D,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { deleteGroup, getCurrentWorkspaceId } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveGroupRef } from '../../lib/refs.js';
|
|
5
|
+
export async function deleteGroupCommand(ref, options) {
|
|
6
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
7
|
+
const group = await resolveGroupRef(ref, workspaceId);
|
|
8
|
+
if (options.dryRun) {
|
|
9
|
+
printDryRun('delete group', {
|
|
10
|
+
Group: `${group.name} (id:${group.id})`,
|
|
11
|
+
Members: `${group.userIds.length}`,
|
|
12
|
+
});
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (!options.yes) {
|
|
16
|
+
if (options.json) {
|
|
17
|
+
throw new CliError('MISSING_YES_FLAG', '--yes is required to execute deletion in --json mode.');
|
|
18
|
+
}
|
|
19
|
+
console.log(`Would delete: ${group.name} (id:${group.id}, ${group.userIds.length} members)`);
|
|
20
|
+
console.log('Use --yes to confirm.');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await deleteGroup(group.id);
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(formatJson({ id: group.id, deleted: true }));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
console.log(`Group "${group.name}" (id:${group.id}) deleted.`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/groups/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,OAA2B;IAC7E,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,cAAc,EAAE;YACxB,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,GAAG;YACvC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;SACrC,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CACd,kBAAkB,EAClB,uDAAuD,CAC1D,CAAA;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAA;QAC5F,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAM;IACV,CAAC;IAED,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACxD,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,YAAY,CAAC,CAAA;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsH5D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createGroupCommand } from './create.js';
|
|
2
|
+
import { deleteGroupCommand } from './delete.js';
|
|
3
|
+
import { listGroups } from './list.js';
|
|
4
|
+
import { addUsersCommand, removeUsersCommand } from './members.js';
|
|
5
|
+
import { renameGroup } from './rename.js';
|
|
6
|
+
import { viewGroup } from './view.js';
|
|
7
|
+
export function registerGroupsCommand(program) {
|
|
8
|
+
const groups = program.command('groups').description('Group operations');
|
|
9
|
+
groups
|
|
10
|
+
.command('list [workspace-ref]', { isDefault: true })
|
|
11
|
+
.description('List groups in a workspace')
|
|
12
|
+
.option('--workspace <ref>', 'Workspace ID or name')
|
|
13
|
+
.option('--search <text>', 'Filter by name')
|
|
14
|
+
.option('--json', 'Output as JSON')
|
|
15
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
16
|
+
.option('--full', 'Include all fields in JSON output')
|
|
17
|
+
.addHelpText('after', `
|
|
18
|
+
Examples:
|
|
19
|
+
tw groups
|
|
20
|
+
tw groups list --search front
|
|
21
|
+
tw groups --workspace 123 --json`)
|
|
22
|
+
.action(listGroups);
|
|
23
|
+
groups
|
|
24
|
+
.command('view <group-ref>')
|
|
25
|
+
.description('Show a group with its members')
|
|
26
|
+
.option('--json', 'Output as JSON')
|
|
27
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
28
|
+
.option('--full', 'Include all fields in JSON output')
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
Examples:
|
|
31
|
+
tw groups view 12345
|
|
32
|
+
tw groups view "Frontend"
|
|
33
|
+
tw groups view id:12345 --json`)
|
|
34
|
+
.action(viewGroup);
|
|
35
|
+
groups
|
|
36
|
+
.command('create <name>')
|
|
37
|
+
.description('Create a new group')
|
|
38
|
+
.option('--workspace <ref>', 'Workspace ID or name')
|
|
39
|
+
.option('--users <refs>', 'Comma-separated user references to add (id:N, email, or name)')
|
|
40
|
+
.option('--dry-run', 'Show what would be created without creating')
|
|
41
|
+
.option('--json', 'Output created group as JSON')
|
|
42
|
+
.option('--full', 'Include all fields in JSON output')
|
|
43
|
+
.addHelpText('after', `
|
|
44
|
+
Examples:
|
|
45
|
+
tw groups create "Frontend"
|
|
46
|
+
tw groups create "Backend" --users alice@doist.com,bob@doist.com
|
|
47
|
+
tw groups create "Design" --users id:123,id:456 --json`)
|
|
48
|
+
.action(createGroupCommand);
|
|
49
|
+
groups
|
|
50
|
+
.command('rename <group-ref> <new-name>')
|
|
51
|
+
.description('Rename a group')
|
|
52
|
+
.option('--dry-run', 'Show what would be renamed without renaming')
|
|
53
|
+
.option('--json', 'Output updated group as JSON')
|
|
54
|
+
.option('--full', 'Include all fields in JSON output')
|
|
55
|
+
.addHelpText('after', `
|
|
56
|
+
Examples:
|
|
57
|
+
tw groups rename 12345 "Frontend Team"
|
|
58
|
+
tw groups rename "Frontend" "Frontend Team" --json`)
|
|
59
|
+
.action(renameGroup);
|
|
60
|
+
groups
|
|
61
|
+
.command('delete <group-ref>')
|
|
62
|
+
.description('Permanently delete a group')
|
|
63
|
+
.option('--yes', 'Confirm deletion')
|
|
64
|
+
.option('--dry-run', 'Show what would happen without executing')
|
|
65
|
+
.option('--json', 'Output result as JSON')
|
|
66
|
+
.addHelpText('after', `
|
|
67
|
+
Examples:
|
|
68
|
+
tw groups delete 12345 --yes
|
|
69
|
+
tw groups delete "Frontend" --dry-run`)
|
|
70
|
+
.action(deleteGroupCommand);
|
|
71
|
+
groups
|
|
72
|
+
.command('add-user <group-ref> [user-refs...]')
|
|
73
|
+
.description('Add one or more users to a group')
|
|
74
|
+
.option('--dry-run', 'Show what would change without changing')
|
|
75
|
+
.option('--json', 'Output result as JSON')
|
|
76
|
+
.option('--full', 'Include the full updated group in JSON output')
|
|
77
|
+
.addHelpText('after', `
|
|
78
|
+
Examples:
|
|
79
|
+
tw groups add-user 12345 alice@doist.com bob@doist.com
|
|
80
|
+
tw groups add-user "Frontend" id:123,id:456
|
|
81
|
+
tw groups add-user 12345 alice bob carol --json
|
|
82
|
+
|
|
83
|
+
User references can be passed as space-separated args, comma-separated within a
|
|
84
|
+
single arg, or any mix of the two.`)
|
|
85
|
+
.action(addUsersCommand);
|
|
86
|
+
groups
|
|
87
|
+
.command('remove-user <group-ref> [user-refs...]')
|
|
88
|
+
.description('Remove one or more users from a group')
|
|
89
|
+
.option('--dry-run', 'Show what would change without changing')
|
|
90
|
+
.option('--json', 'Output result as JSON')
|
|
91
|
+
.option('--full', 'Include the full updated group in JSON output')
|
|
92
|
+
.addHelpText('after', `
|
|
93
|
+
Examples:
|
|
94
|
+
tw groups remove-user 12345 alice@doist.com
|
|
95
|
+
tw groups remove-user "Frontend" id:123,id:456`)
|
|
96
|
+
.action(removeUsersCommand);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/groups/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ViewOptions } from '../../lib/options.js';
|
|
2
|
+
export type ListGroupsOptions = ViewOptions & {
|
|
3
|
+
workspace?: string;
|
|
4
|
+
search?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function listGroups(workspaceRef: string | undefined, options: ListGroupsOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAErF,wBAAsB,UAAU,CAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgDf"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { getCurrentWorkspaceId, getWorkspaceGroups } from '
|
|
2
|
-
import { CliError } from '
|
|
3
|
-
import { colors, formatJson, formatNdjson, pluralize } from '
|
|
4
|
-
import { resolveWorkspaceRef } from '
|
|
5
|
-
async function listGroups(workspaceRef, options) {
|
|
1
|
+
import { getCurrentWorkspaceId, getWorkspaceGroups } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { colors, formatJson, formatNdjson, pluralize } from '../../lib/output.js';
|
|
4
|
+
import { resolveWorkspaceRef } from '../../lib/refs.js';
|
|
5
|
+
export async function listGroups(workspaceRef, options) {
|
|
6
6
|
if (workspaceRef && options.workspace) {
|
|
7
7
|
throw new CliError('CONFLICTING_OPTIONS', 'Cannot specify workspace both as argument and --workspace flag');
|
|
8
8
|
}
|
|
@@ -39,15 +39,4 @@ async function listGroups(workspaceRef, options) {
|
|
|
39
39
|
console.log(`${id} ${name} ${members}`);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
program
|
|
44
|
-
.command('groups [workspace-ref]')
|
|
45
|
-
.description('List groups in a workspace')
|
|
46
|
-
.option('--workspace <ref>', 'Workspace ID or name')
|
|
47
|
-
.option('--search <text>', 'Filter by name')
|
|
48
|
-
.option('--json', 'Output as JSON')
|
|
49
|
-
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
50
|
-
.option('--full', 'Include all fields in JSON output')
|
|
51
|
-
.action(listGroups);
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=groups.js.map
|
|
42
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/groups/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAIvD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,YAAgC,EAChC,OAA0B;IAE1B,IAAI,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,QAAQ,CACd,qBAAqB,EACrB,gEAAgE,CACnE,CAAA;IACL,CAAC;IAED,IAAI,WAAmB,CAAA;IACvB,MAAM,GAAG,GAAG,YAAY,IAAI,OAAO,CAAC,SAAS,CAAA;IAE7C,IAAI,GAAG,EAAE,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAChD,WAAW,GAAG,SAAS,CAAC,EAAE,CAAA;IAC9B,CAAC;SAAM,CAAC;QACJ,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAC/C,CAAC;IAED,IAAI,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAA;IAElD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACtD,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QACxD,OAAM;IACV,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC/B,OAAM;IACV,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAC5B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CACnE,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;IAC7C,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
2
|
+
export declare function addUsersCommand(groupRef: string, userRefs: string[], options: MutationOptions): Promise<void>;
|
|
3
|
+
export declare function removeUsersCommand(groupRef: string, userRefs: string[], options: MutationOptions): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=members.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/members.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA0G3D,wBAAsB,eAAe,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,kBAAkB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { addUsersToGroup, getCurrentWorkspaceId, getGroup, removeUsersFromGroup, } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveGroupRef, resolveUserRefs } from '../../lib/refs.js';
|
|
5
|
+
function joinUserRefs(userRefs) {
|
|
6
|
+
if (userRefs.length === 0) {
|
|
7
|
+
throw new CliError('MISSING_USERS', 'Provide at least one user reference (id:N, email, or name).');
|
|
8
|
+
}
|
|
9
|
+
return userRefs.join(',');
|
|
10
|
+
}
|
|
11
|
+
function dedupe(ids) {
|
|
12
|
+
return [...new Set(ids)];
|
|
13
|
+
}
|
|
14
|
+
async function mutateGroupMembership(groupRef, userRefs, action, options) {
|
|
15
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
16
|
+
const [group, resolvedIds] = await Promise.all([
|
|
17
|
+
resolveGroupRef(groupRef, workspaceId),
|
|
18
|
+
resolveUserRefs(joinUserRefs(userRefs), workspaceId),
|
|
19
|
+
]);
|
|
20
|
+
const userIds = dedupe(resolvedIds);
|
|
21
|
+
const currentMembers = new Set(group.userIds);
|
|
22
|
+
const actionableIds = action === 'add'
|
|
23
|
+
? userIds.filter((id) => !currentMembers.has(id))
|
|
24
|
+
: userIds.filter((id) => currentMembers.has(id));
|
|
25
|
+
const skippedIds = action === 'add'
|
|
26
|
+
? userIds.filter((id) => currentMembers.has(id))
|
|
27
|
+
: userIds.filter((id) => !currentMembers.has(id));
|
|
28
|
+
const actionLabel = action === 'add' ? 'add users to' : 'remove users from';
|
|
29
|
+
const skippedLabel = action === 'add' ? 'Already members' : 'Not members';
|
|
30
|
+
if (options.dryRun) {
|
|
31
|
+
printDryRun(`${actionLabel} group`, {
|
|
32
|
+
Group: `${group.name} (id:${group.id})`,
|
|
33
|
+
[`Users to ${action}`]: actionableIds.length > 0 ? actionableIds.join(', ') : '(none)',
|
|
34
|
+
[skippedLabel]: skippedIds.length > 0 ? skippedIds.join(', ') : undefined,
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (actionableIds.length > 0) {
|
|
39
|
+
if (action === 'add') {
|
|
40
|
+
await addUsersToGroup(group.id, actionableIds);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
await removeUsersFromGroup(group.id, actionableIds);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Compute the new member count locally instead of refetching
|
|
47
|
+
const newMemberCount = action === 'add'
|
|
48
|
+
? group.userIds.length + actionableIds.length
|
|
49
|
+
: group.userIds.length - actionableIds.length;
|
|
50
|
+
if (options.json) {
|
|
51
|
+
if (options.full) {
|
|
52
|
+
// For --full we need the actual updated group from the API
|
|
53
|
+
const updated = await getGroup(group.id);
|
|
54
|
+
console.log(formatJson(updated, 'group', true));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const result = { id: group.id, memberCount: newMemberCount };
|
|
58
|
+
if (action === 'add') {
|
|
59
|
+
result.added = actionableIds;
|
|
60
|
+
result.alreadyMembers = skippedIds;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
result.removed = actionableIds;
|
|
64
|
+
result.notMembers = skippedIds;
|
|
65
|
+
}
|
|
66
|
+
console.log(formatJson(result));
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const pastVerb = action === 'add' ? 'Added' : 'Removed';
|
|
71
|
+
const noneMsg = action === 'add'
|
|
72
|
+
? `No new members added to "${group.name}" (already in group).`
|
|
73
|
+
: `No members removed from "${group.name}" (none of the users were in group).`;
|
|
74
|
+
if (actionableIds.length === 0) {
|
|
75
|
+
console.log(noneMsg);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.log(`${pastVerb} ${actionableIds.length} user(s) ${action === 'add' ? 'to' : 'from'} "${group.name}" (now ${newMemberCount} members).`);
|
|
79
|
+
}
|
|
80
|
+
if (skippedIds.length > 0) {
|
|
81
|
+
console.log(`${skippedLabel}: ${skippedIds.join(', ')}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export async function addUsersCommand(groupRef, userRefs, options) {
|
|
85
|
+
return mutateGroupMembership(groupRef, userRefs, 'add', options);
|
|
86
|
+
}
|
|
87
|
+
export async function removeUsersCommand(groupRef, userRefs, options) {
|
|
88
|
+
return mutateGroupMembership(groupRef, userRefs, 'remove', options);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../src/commands/groups/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/rename.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,wBAAsB,WAAW,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { getCurrentWorkspaceId, updateGroup } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveGroupRef } from '../../lib/refs.js';
|
|
5
|
+
export async function renameGroup(ref, newName, options) {
|
|
6
|
+
if (!newName || newName.trim() === '') {
|
|
7
|
+
throw new CliError('INVALID_NAME', 'Group name cannot be empty.');
|
|
8
|
+
}
|
|
9
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
10
|
+
const group = await resolveGroupRef(ref, workspaceId);
|
|
11
|
+
if (options.dryRun) {
|
|
12
|
+
printDryRun('rename group', {
|
|
13
|
+
Group: `${group.name} (id:${group.id})`,
|
|
14
|
+
'New name': newName,
|
|
15
|
+
});
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const updated = await updateGroup({ id: group.id, name: newName });
|
|
19
|
+
if (options.json) {
|
|
20
|
+
if (options.full) {
|
|
21
|
+
console.log(formatJson(updated, 'group', true));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(formatJson({ id: updated.id, name: updated.name }));
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
console.log(`Group ${group.id} renamed to "${updated.name}".`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=rename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../src/commands/groups/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,GAAW,EACX,OAAe,EACf,OAAwB;IAExB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,QAAQ,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,cAAc,EAAE;YACxB,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,GAAG;YACvC,UAAU,EAAE,OAAO;SACtB,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAElE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACnE,CAAC;QACD,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,EAAE,gBAAgB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAA;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/commands/groups/view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,KAAK,gBAAgB,GAAG,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAExD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDrF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getCurrentWorkspaceId, getTwistClient } from '../../lib/api.js';
|
|
2
|
+
import { colors, formatJson, formatNdjson, pluralize } from '../../lib/output.js';
|
|
3
|
+
import { resolveGroupRef } from '../../lib/refs.js';
|
|
4
|
+
export async function viewGroup(ref, options) {
|
|
5
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
6
|
+
const group = await resolveGroupRef(ref, workspaceId);
|
|
7
|
+
// Batch-fetch only the users in this group, not the entire workspace
|
|
8
|
+
const client = await getTwistClient();
|
|
9
|
+
const userCalls = group.userIds.map((userId) => client.workspaceUsers.getUserById({ workspaceId, userId }, { batch: true }));
|
|
10
|
+
const userResponses = group.userIds.length > 0 ? await client.batch(...userCalls) : [];
|
|
11
|
+
const members = group.userIds.map((id, i) => {
|
|
12
|
+
const user = userResponses[i]?.data;
|
|
13
|
+
return {
|
|
14
|
+
id,
|
|
15
|
+
name: user?.name ?? null,
|
|
16
|
+
email: user?.email ?? null,
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
if (options.json) {
|
|
20
|
+
if (options.full) {
|
|
21
|
+
console.log(formatJson({ ...group, members }));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(formatJson({
|
|
25
|
+
id: group.id,
|
|
26
|
+
name: group.name,
|
|
27
|
+
workspaceId: group.workspaceId,
|
|
28
|
+
members,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (options.ndjson) {
|
|
34
|
+
console.log(formatNdjson([{ ...group, members }]));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(colors.channel(group.name));
|
|
38
|
+
console.log(colors.timestamp(`id:${group.id}`));
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log(`${members.length} ${pluralize(members.length, 'member')}`);
|
|
41
|
+
if (members.length === 0)
|
|
42
|
+
return;
|
|
43
|
+
for (const m of members) {
|
|
44
|
+
const name = m.name ?? `user:${m.id}`;
|
|
45
|
+
const email = m.email ? colors.timestamp(`<${m.email}>`) : '';
|
|
46
|
+
const id = colors.timestamp(`id:${m.id}`);
|
|
47
|
+
console.log(` ${id} ${colors.author(name)} ${email}`.trimEnd());
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/groups/view.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ const loadCompletionCommand = async () => (await import('./commands/completion/i
|
|
|
23
23
|
const loadAwayCommand = async () => (await import('./commands/away/index.js')).registerAwayCommand;
|
|
24
24
|
const loadUpdateCommand = async () => (await import('./commands/update/index.js')).registerUpdateCommand;
|
|
25
25
|
const loadChangelogCommand = async () => (await import('./commands/changelog.js')).registerChangelogCommand;
|
|
26
|
-
const loadGroupsCommand = async () => (await import('./commands/groups.js')).registerGroupsCommand;
|
|
26
|
+
const loadGroupsCommand = async () => (await import('./commands/groups/index.js')).registerGroupsCommand;
|
|
27
27
|
const loadDoctorCommand = async () => (await import('./commands/doctor.js')).registerDoctorCommand;
|
|
28
28
|
const loadConfigCommand = async () => (await import('./commands/config/index.js')).registerConfigCommand;
|
|
29
29
|
const commands = {
|
|
@@ -49,7 +49,10 @@ const commands = {
|
|
|
49
49
|
update: ['Update the CLI to the latest version for the configured channel', loadUpdateCommand],
|
|
50
50
|
changelog: ['Show recent changelog entries', loadChangelogCommand],
|
|
51
51
|
doctor: ['Diagnose common CLI setup and environment issues', loadDoctorCommand],
|
|
52
|
-
groups: [
|
|
52
|
+
groups: [
|
|
53
|
+
'Group operations (list, view, create, rename, delete, add-user, remove-user)',
|
|
54
|
+
loadGroupsCommand,
|
|
55
|
+
],
|
|
53
56
|
config: ['Manage CLI configuration', loadConfigCommand],
|
|
54
57
|
};
|
|
55
58
|
const commandAliases = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -7,6 +7,19 @@ export declare function getCurrentWorkspaceId(flagValue?: number): Promise<numbe
|
|
|
7
7
|
export declare function getSessionUser(): Promise<User>;
|
|
8
8
|
export declare function getWorkspaceUsers(workspaceId: number): Promise<WorkspaceUser[]>;
|
|
9
9
|
export declare function getWorkspaceGroups(workspaceId: number): Promise<Group[]>;
|
|
10
|
+
export declare function getGroup(id: number): Promise<Group>;
|
|
11
|
+
export declare function createGroup(args: {
|
|
12
|
+
workspaceId: number;
|
|
13
|
+
name: string;
|
|
14
|
+
userIds?: number[];
|
|
15
|
+
}): Promise<Group>;
|
|
16
|
+
export declare function updateGroup(args: {
|
|
17
|
+
id: number;
|
|
18
|
+
name?: string;
|
|
19
|
+
}): Promise<Group>;
|
|
20
|
+
export declare function deleteGroup(id: number): Promise<void>;
|
|
21
|
+
export declare function addUsersToGroup(id: number, userIds: number[]): Promise<void>;
|
|
22
|
+
export declare function removeUsersFromGroup(id: number, userIds: number[]): Promise<void>;
|
|
10
23
|
export declare function clearUserCache(): void;
|
|
11
24
|
/**
|
|
12
25
|
* Validates a batch response and returns the data, throwing on errors.
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,KAAK,EACV,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,KAAK,EACV,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;AAkOzB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAGhE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,CAMxD;AAKD,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAO5D;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAsB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B/E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGrF;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAG9E;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAGzD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGjB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAGrF;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3D;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF;AAED,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAKxF;AAED,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA"}
|