@doist/twist-cli 2.41.2 → 2.43.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/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +2 -2
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/channel/add.d.ts +3 -0
- package/dist/commands/channel/add.d.ts.map +1 -0
- package/dist/commands/channel/add.js +5 -0
- package/dist/commands/channel/add.js.map +1 -0
- package/dist/commands/channel/index.d.ts.map +1 -1
- package/dist/commands/channel/index.js +77 -0
- package/dist/commands/channel/index.js.map +1 -1
- package/dist/commands/channel/members.d.ts +5 -0
- package/dist/commands/channel/members.d.ts.map +1 -0
- package/dist/commands/channel/members.js +57 -0
- package/dist/commands/channel/members.js.map +1 -0
- package/dist/commands/channel/membership-helpers.d.ts +20 -0
- package/dist/commands/channel/membership-helpers.d.ts.map +1 -0
- package/dist/commands/channel/membership-helpers.js +117 -0
- package/dist/commands/channel/membership-helpers.js.map +1 -0
- package/dist/commands/channel/remove.d.ts +3 -0
- package/dist/commands/channel/remove.d.ts.map +1 -0
- package/dist/commands/channel/remove.js +5 -0
- package/dist/commands/channel/remove.js.map +1 -0
- package/dist/commands/channel/set.d.ts +7 -0
- package/dist/commands/channel/set.d.ts.map +1 -0
- package/dist/commands/channel/set.js +70 -0
- package/dist/commands/channel/set.js.map +1 -0
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +10 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auth-provider.d.ts +19 -0
- package/dist/lib/auth-provider.d.ts.map +1 -1
- package/dist/lib/auth-provider.js +86 -144
- package/dist/lib/auth-provider.js.map +1 -1
- package/dist/lib/refs.d.ts +20 -0
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +76 -0
- 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 +10 -0
- package/dist/lib/skills/content.js.map +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [2.43.0](https://github.com/Doist/twist-cli/compare/v2.42.0...v2.43.0) (2026-05-22)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- **channel:** channel membership control (members/add/remove/sync) ([#244](https://github.com/Doist/twist-cli/issues/244)) ([84ea32b](https://github.com/Doist/twist-cli/commit/84ea32b6498597ecfbc0ce9ce5094c19dbc0ee07))
|
|
6
|
+
|
|
7
|
+
## [2.42.0](https://github.com/Doist/twist-cli/compare/v2.41.2...v2.42.0) (2026-05-21)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- **auth:** adopt cli-core createDcrProvider for OAuth ([#243](https://github.com/Doist/twist-cli/issues/243)) ([670d6df](https://github.com/Doist/twist-cli/commit/670d6dfac79c0e9059ff62a5a8defb4a7a2c00c7))
|
|
12
|
+
|
|
1
13
|
## [2.41.2](https://github.com/Doist/twist-cli/compare/v2.41.1...v2.41.2) (2026-05-20)
|
|
2
14
|
|
|
3
15
|
### Bug Fixes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAGH,KAAK,eAAe,EACvB,MAAM,4BAA4B,CAAA;AAKnC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CA0BxF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { attachLoginCommand } from '@doist/cli-core/auth';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { renderError, renderSuccess } from '../../lib/auth-pages.js';
|
|
4
|
-
import { createTwistAuthProvider,
|
|
4
|
+
import { createTwistAuthProvider, getScopes, } from '../../lib/auth-provider.js';
|
|
5
5
|
import { logTokenStorageResult } from './helpers.js';
|
|
6
6
|
const PREFERRED_CALLBACK_PORT = 8766;
|
|
7
7
|
export function attachTwistLoginCommand(parent, store) {
|
|
@@ -10,7 +10,7 @@ export function attachTwistLoginCommand(parent, store) {
|
|
|
10
10
|
provider,
|
|
11
11
|
store,
|
|
12
12
|
preferredPort: PREFERRED_CALLBACK_PORT,
|
|
13
|
-
resolveScopes: ({ readOnly }) => (readOnly
|
|
13
|
+
resolveScopes: ({ readOnly }) => getScopes(readOnly),
|
|
14
14
|
renderSuccess,
|
|
15
15
|
renderError,
|
|
16
16
|
onSuccess({ view, account }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EACH,uBAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EACH,uBAAuB,EACvB,SAAS,GAEZ,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAEpC,MAAM,UAAU,uBAAuB,CAAC,MAAe,EAAE,KAAsB;IAC3E,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;IAE1C,OAAO,kBAAkB,CAAC,MAAM,EAAE;QAC9B,QAAQ;QACR,KAAK;QACL,aAAa,EAAE,uBAAuB;QACtC,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QACpD,aAAa;QACb,WAAW;QACX,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,kCAAkC,CAAC,CAAA;gBACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC3D,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAA;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACT,qBAAqB,CACjB,MAAM,EACN,wDAAwD,EACxD,eAAe,CAClB,CAAA;YACL,CAAC;QACL,CAAC;KACJ,CAAC,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAA;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAA2B,MAAM,yBAAyB,CAAA;AAE9F,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/channel/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAE9F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,UAAkB,EAClB,IAAc,EACd,OAA+B;IAE/B,OAAO,uBAAuB,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;AACpE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAS3C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6K7D"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import { withCaseInsensitiveChoices } from '../../lib/completion.js';
|
|
3
|
+
import { addChannelMembers } from './add.js';
|
|
3
4
|
import { listChannels } from './list.js';
|
|
5
|
+
import { listChannelMembers } from './members.js';
|
|
6
|
+
import { removeChannelMembers } from './remove.js';
|
|
7
|
+
import { setChannelMembers } from './set.js';
|
|
4
8
|
import { showChannelThreads } from './threads.js';
|
|
5
9
|
export function registerChannelCommand(program) {
|
|
6
10
|
const channel = program
|
|
@@ -63,5 +67,78 @@ Notes:
|
|
|
63
67
|
Sorted newest-first by last activity. --limit, --cursor, --since, --until,
|
|
64
68
|
and --unread are applied client-side; --archive-filter is applied server-side.`)
|
|
65
69
|
.action(showChannelThreads);
|
|
70
|
+
const members = channel
|
|
71
|
+
.command('members')
|
|
72
|
+
.description('Channel membership operations (list, add, remove, set)');
|
|
73
|
+
members
|
|
74
|
+
.command('list <channel-ref>', { isDefault: true })
|
|
75
|
+
.description("List a channel's members and groups fully present in the channel")
|
|
76
|
+
.option('--json', 'Output as JSON')
|
|
77
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
78
|
+
.option('--full', 'Include all fields in JSON output')
|
|
79
|
+
.addHelpText('after', `
|
|
80
|
+
Examples:
|
|
81
|
+
tw channel members 12345
|
|
82
|
+
tw channel members "general" --json
|
|
83
|
+
tw channel members add 12345 alice group:Design
|
|
84
|
+
tw channel members remove 12345 alice
|
|
85
|
+
tw channel members set 12345 group:Squad --apply
|
|
86
|
+
|
|
87
|
+
Notes:
|
|
88
|
+
"Groups fully in channel" lists groups whose entire current membership is
|
|
89
|
+
already in the channel — a hint, not a persistent link.`)
|
|
90
|
+
.action(listChannelMembers);
|
|
91
|
+
members
|
|
92
|
+
.command('add <channel-ref> [refs...]')
|
|
93
|
+
.description('Add users and/or groups to a channel')
|
|
94
|
+
.option('--dry-run', 'Show what would change without changing')
|
|
95
|
+
.option('--json', 'Output result as JSON')
|
|
96
|
+
.option('--full', 'Include the full updated channel in JSON output')
|
|
97
|
+
.addHelpText('after', `
|
|
98
|
+
Examples:
|
|
99
|
+
tw channel members add 12345 alice@doist.com bob@doist.com
|
|
100
|
+
tw channel members add "general" group:Frontend
|
|
101
|
+
tw channel members add 12345 alice group:Design id:789 --json
|
|
102
|
+
|
|
103
|
+
Notes:
|
|
104
|
+
Refs accept user identifiers (id:N, email, name) or "group:<ref>" to expand
|
|
105
|
+
a group to its current members. Group expansion is one-shot — users added
|
|
106
|
+
later to the group will not auto-join the channel.`)
|
|
107
|
+
.action(addChannelMembers);
|
|
108
|
+
members
|
|
109
|
+
.command('remove <channel-ref> [refs...]')
|
|
110
|
+
.description('Remove users and/or groups from a channel')
|
|
111
|
+
.option('--dry-run', 'Show what would change without changing')
|
|
112
|
+
.option('--json', 'Output result as JSON')
|
|
113
|
+
.option('--full', 'Include the full updated channel in JSON output')
|
|
114
|
+
.addHelpText('after', `
|
|
115
|
+
Examples:
|
|
116
|
+
tw channel members remove 12345 alice@doist.com
|
|
117
|
+
tw channel members remove "general" group:Frontend
|
|
118
|
+
|
|
119
|
+
Notes:
|
|
120
|
+
Refs accept user identifiers (id:N, email, name) or "group:<ref>" to expand
|
|
121
|
+
a group to its current members.`)
|
|
122
|
+
.action(removeChannelMembers);
|
|
123
|
+
members
|
|
124
|
+
.command('set <channel-ref> [refs...]')
|
|
125
|
+
.description('Replace channel membership with the resolved set of refs')
|
|
126
|
+
.option('--apply', 'Actually mutate (otherwise dry-run)')
|
|
127
|
+
.option('--include-self', 'Allow set to remove the acting user')
|
|
128
|
+
.option('--dry-run', 'Force dry-run (default behaviour)')
|
|
129
|
+
.option('--json', 'Output result as JSON')
|
|
130
|
+
.option('--full', 'Include the full updated channel in JSON output')
|
|
131
|
+
.addHelpText('after', `
|
|
132
|
+
Examples:
|
|
133
|
+
tw channel members set 12345 group:Frontend group:Design
|
|
134
|
+
tw channel members set "general" alice bob carol --apply
|
|
135
|
+
tw channel members set 12345 group:Squad --apply --include-self
|
|
136
|
+
|
|
137
|
+
Notes:
|
|
138
|
+
Dry-run by default. Pass --apply to mutate.
|
|
139
|
+
Refuses to remove the acting user unless --include-self is also passed.
|
|
140
|
+
Group expansion is one-shot — users added later to a referenced group will
|
|
141
|
+
not auto-join the channel.`)
|
|
142
|
+
.action(setChannelMembers);
|
|
66
143
|
}
|
|
67
144
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SAClB,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,UAAU,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC,CAAA;IAEtD,OAAO;SACF,OAAO,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACpD,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CACH,iBAAiB,EACjB,wEAAwE,CAC3E;SACA,MAAM,CACH,iBAAiB,EACjB,mEAAmE,CACtE;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;;;;;;;;;;;;;;;;;qGAmByF,CAC5F;SACA,MAAM,CAAC,YAAY,CAAC,CAAA;IAEzB,OAAO;SACF,OAAO,CAAC,uCAAuC,CAAC;SAChD,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,SAAS,CACN,0BAA0B,CACtB,IAAI,MAAM,CACN,2BAA2B,EAC3B,yDAAyD,CAC5D,EACD,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAChC,CACJ;SACA,MAAM,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,gBAAgB,EAAE,+CAA+C,CAAC;SACzE,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;SACzE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;;;;;;;;;iFAWqE,CACxE;SACA,MAAM,CAAC,kBAAkB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/members.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAKvD,wBAAsB,kBAAkB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CA4Df"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getCurrentWorkspaceId, getWorkspaceGroups } from '../../lib/api.js';
|
|
2
|
+
import { colors, formatJson, formatNdjson, pluralize } from '../../lib/output.js';
|
|
3
|
+
import { resolveChannelRef } from '../../lib/refs.js';
|
|
4
|
+
import { channelUserIds, fetchUsersByIds, groupsFullyInChannel } from './membership-helpers.js';
|
|
5
|
+
export async function listChannelMembers(channelRef, options) {
|
|
6
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
7
|
+
const [channel, groups] = await Promise.all([
|
|
8
|
+
resolveChannelRef(channelRef, workspaceId),
|
|
9
|
+
getWorkspaceGroups(workspaceId),
|
|
10
|
+
]);
|
|
11
|
+
const userIds = channelUserIds(channel);
|
|
12
|
+
const userMap = await fetchUsersByIds(workspaceId, userIds);
|
|
13
|
+
const userIdSet = new Set(userIds);
|
|
14
|
+
const fullyInChannel = groupsFullyInChannel(groups, userIdSet);
|
|
15
|
+
const members = userIds.map((id) => {
|
|
16
|
+
const user = userMap.get(id);
|
|
17
|
+
return { id, name: user?.name ?? null, email: user?.email ?? null };
|
|
18
|
+
});
|
|
19
|
+
const slimPayload = {
|
|
20
|
+
id: channel.id,
|
|
21
|
+
name: channel.name,
|
|
22
|
+
workspaceId: channel.workspaceId,
|
|
23
|
+
members,
|
|
24
|
+
groupsFullyInChannel: fullyInChannel.map((g) => ({
|
|
25
|
+
id: g.id,
|
|
26
|
+
name: g.name,
|
|
27
|
+
userIds: g.userIds,
|
|
28
|
+
})),
|
|
29
|
+
};
|
|
30
|
+
const fullPayload = { ...channel, members, groupsFullyInChannel: fullyInChannel };
|
|
31
|
+
if (options.json) {
|
|
32
|
+
console.log(formatJson(options.full ? fullPayload : slimPayload));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (options.ndjson) {
|
|
36
|
+
console.log(formatNdjson([options.full ? fullPayload : slimPayload]));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(colors.channel(channel.name));
|
|
40
|
+
console.log(colors.timestamp(`id:${channel.id}`));
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log(`${members.length} ${pluralize(members.length, 'member')}`);
|
|
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
|
+
if (fullyInChannel.length > 0) {
|
|
50
|
+
console.log('');
|
|
51
|
+
console.log(`Groups fully in channel (${fullyInChannel.length}):`);
|
|
52
|
+
for (const g of fullyInChannel) {
|
|
53
|
+
console.log(` ${colors.timestamp(`id:${g.id}`)} ${g.name} ${colors.timestamp(`(${g.userIds.length} ${pluralize(g.userIds.length, 'member')})`)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../src/commands/channel/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Channel, Group, WorkspaceUser } from '@doist/twist-sdk';
|
|
2
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
3
|
+
export type ChannelMutationOptions = MutationOptions;
|
|
4
|
+
export type ExpandedGroup = {
|
|
5
|
+
groupId: number;
|
|
6
|
+
groupName: string;
|
|
7
|
+
userIds: number[];
|
|
8
|
+
};
|
|
9
|
+
export declare function channelUserIds(channel: Channel): number[];
|
|
10
|
+
export declare function fetchUsersByIds(workspaceId: number, userIds: number[]): Promise<Map<number, WorkspaceUser>>;
|
|
11
|
+
export declare function logExpansion(expandedFrom: ExpandedGroup[]): void;
|
|
12
|
+
export declare function describeExpansion(expandedFrom: ExpandedGroup[]): string | undefined;
|
|
13
|
+
export declare function groupsFullyInChannel(groups: Group[], channelUserIdSet: Set<number>): Group[];
|
|
14
|
+
/**
|
|
15
|
+
* Shared add/remove mutation flow. Resolves the channel and the requested refs
|
|
16
|
+
* concurrently, diffs against current membership, then either previews
|
|
17
|
+
* (`--dry-run`) or applies the mutation and prints / emits JSON.
|
|
18
|
+
*/
|
|
19
|
+
export declare function mutateChannelMembership(channelRef: string, refs: string[], action: 'add' | 'remove', options: ChannelMutationOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=membership-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership-helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/membership-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAQrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAA;AAEpD,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAErF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAEzD;AAED,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAarC;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,aAAa,EAAE,GAAG,IAAI,CAQhE;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,SAAS,CAKnF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAI5F;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,KAAK,GAAG,QAAQ,EACxB,OAAO,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CAqFf"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { addUsersToChannel, getCurrentWorkspaceId, getOptionalBatchData, getTwistClient, removeUsersFromChannel, } from '../../lib/api.js';
|
|
2
|
+
import { colors, formatJson, pluralize, printDryRun } from '../../lib/output.js';
|
|
3
|
+
import { resolveChannelMemberRefs, resolveChannelRef } from '../../lib/refs.js';
|
|
4
|
+
export function channelUserIds(channel) {
|
|
5
|
+
return channel.userIds ?? [];
|
|
6
|
+
}
|
|
7
|
+
export async function fetchUsersByIds(workspaceId, userIds) {
|
|
8
|
+
if (userIds.length === 0)
|
|
9
|
+
return new Map();
|
|
10
|
+
const client = await getTwistClient();
|
|
11
|
+
const calls = userIds.map((userId) => client.workspaceUsers.getUserById({ workspaceId, userId }, { batch: true }));
|
|
12
|
+
const responses = await client.batch(...calls);
|
|
13
|
+
const map = new Map();
|
|
14
|
+
userIds.forEach((id, i) => {
|
|
15
|
+
const user = getOptionalBatchData(responses[i], `user ${id}`);
|
|
16
|
+
if (user)
|
|
17
|
+
map.set(id, user);
|
|
18
|
+
});
|
|
19
|
+
return map;
|
|
20
|
+
}
|
|
21
|
+
export function logExpansion(expandedFrom) {
|
|
22
|
+
for (const g of expandedFrom) {
|
|
23
|
+
console.log(colors.timestamp(`Expanded group "${g.groupName}" → ${g.userIds.length} ${pluralize(g.userIds.length, 'user')}`));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function describeExpansion(expandedFrom) {
|
|
27
|
+
if (expandedFrom.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
return expandedFrom
|
|
30
|
+
.map((g) => `${g.groupName} (id:${g.groupId}, ${g.userIds.length} users)`)
|
|
31
|
+
.join('\n');
|
|
32
|
+
}
|
|
33
|
+
export function groupsFullyInChannel(groups, channelUserIdSet) {
|
|
34
|
+
return groups.filter((g) => g.userIds.length > 0 && g.userIds.every((id) => channelUserIdSet.has(id)));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Shared add/remove mutation flow. Resolves the channel and the requested refs
|
|
38
|
+
* concurrently, diffs against current membership, then either previews
|
|
39
|
+
* (`--dry-run`) or applies the mutation and prints / emits JSON.
|
|
40
|
+
*/
|
|
41
|
+
export async function mutateChannelMembership(channelRef, refs, action, options) {
|
|
42
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
43
|
+
const [channel, { userIds: requested, expandedFrom }] = await Promise.all([
|
|
44
|
+
resolveChannelRef(channelRef, workspaceId),
|
|
45
|
+
resolveChannelMemberRefs(refs, workspaceId),
|
|
46
|
+
]);
|
|
47
|
+
const current = new Set(channelUserIds(channel));
|
|
48
|
+
const actionable = action === 'add'
|
|
49
|
+
? requested.filter((id) => !current.has(id))
|
|
50
|
+
: requested.filter((id) => current.has(id));
|
|
51
|
+
const skipped = action === 'add'
|
|
52
|
+
? requested.filter((id) => current.has(id))
|
|
53
|
+
: requested.filter((id) => !current.has(id));
|
|
54
|
+
const actionLabel = action === 'add' ? 'add users to' : 'remove users from';
|
|
55
|
+
const skippedLabel = action === 'add' ? 'Already members' : 'Not members';
|
|
56
|
+
if (options.dryRun) {
|
|
57
|
+
printDryRun(`${actionLabel} channel`, {
|
|
58
|
+
Channel: `${channel.name} (id:${channel.id})`,
|
|
59
|
+
'Expanded from groups': describeExpansion(expandedFrom),
|
|
60
|
+
[`Users to ${action}`]: actionable.length > 0 ? actionable.join(', ') : '(none)',
|
|
61
|
+
[skippedLabel]: skipped.length > 0 ? skipped.join(', ') : undefined,
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (actionable.length > 0) {
|
|
66
|
+
if (action === 'add') {
|
|
67
|
+
await addUsersToChannel(channel.id, actionable);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
await removeUsersFromChannel(channel.id, actionable);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const newMemberCount = action === 'add'
|
|
74
|
+
? channelUserIds(channel).length + actionable.length
|
|
75
|
+
: channelUserIds(channel).length - actionable.length;
|
|
76
|
+
if (options.json) {
|
|
77
|
+
if (options.full) {
|
|
78
|
+
const client = await getTwistClient();
|
|
79
|
+
const updated = await client.channels.getChannel(channel.id);
|
|
80
|
+
console.log(formatJson(updated, 'channel', true));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const result = {
|
|
84
|
+
id: channel.id,
|
|
85
|
+
memberCount: newMemberCount,
|
|
86
|
+
};
|
|
87
|
+
if (expandedFrom.length > 0)
|
|
88
|
+
result.expandedFrom = expandedFrom;
|
|
89
|
+
if (action === 'add') {
|
|
90
|
+
result.added = actionable;
|
|
91
|
+
result.alreadyMembers = skipped;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
result.removed = actionable;
|
|
95
|
+
result.notMembers = skipped;
|
|
96
|
+
}
|
|
97
|
+
console.log(formatJson(result));
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const pastVerb = action === 'add' ? 'Added' : 'Removed';
|
|
102
|
+
const preposition = action === 'add' ? 'to' : 'from';
|
|
103
|
+
const noneMsg = action === 'add'
|
|
104
|
+
? `No new members added to "${channel.name}" (already in channel).`
|
|
105
|
+
: `No members removed from "${channel.name}" (none of the users were in channel).`;
|
|
106
|
+
logExpansion(expandedFrom);
|
|
107
|
+
if (actionable.length === 0) {
|
|
108
|
+
console.log(noneMsg);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.log(`${pastVerb} ${actionable.length} ${pluralize(actionable.length, 'user')} ${preposition} "${channel.name}" (now ${newMemberCount} ${pluralize(newMemberCount, 'member')}).`);
|
|
112
|
+
}
|
|
113
|
+
if (skipped.length > 0) {
|
|
114
|
+
console.log(`${skippedLabel}: ${skipped.join(', ')}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=membership-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership-helpers.js","sourceRoot":"","sources":["../../../src/commands/channel/membership-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAA2B,MAAM,yBAAyB,CAAA;AAE9F,wBAAsB,oBAAoB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,sBAAsB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/commands/channel/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAE9F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,UAAkB,EAClB,IAAc,EACd,OAA+B;IAE/B,OAAO,uBAAuB,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AACvE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
2
|
+
export type SetOptions = MutationOptions & {
|
|
3
|
+
apply?: boolean;
|
|
4
|
+
includeSelf?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function setChannelMembers(channelRef: string, refs: string[], options: SetOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/set.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAK3D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,GACpB,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { addUsersToChannel, getCurrentWorkspaceId, getSessionUser, getTwistClient, removeUsersFromChannel, } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, pluralize, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveChannelMemberRefs, resolveChannelRef } from '../../lib/refs.js';
|
|
5
|
+
import { channelUserIds, describeExpansion, logExpansion } from './membership-helpers.js';
|
|
6
|
+
export async function setChannelMembers(channelRef, refs, options) {
|
|
7
|
+
const workspaceId = await getCurrentWorkspaceId();
|
|
8
|
+
const [channel, sessionUser, memberRefs] = await Promise.all([
|
|
9
|
+
resolveChannelRef(channelRef, workspaceId),
|
|
10
|
+
getSessionUser(),
|
|
11
|
+
resolveChannelMemberRefs(refs, workspaceId),
|
|
12
|
+
]);
|
|
13
|
+
const { userIds: targetIds, expandedFrom } = memberRefs;
|
|
14
|
+
const desired = new Set(targetIds);
|
|
15
|
+
const current = new Set(channelUserIds(channel));
|
|
16
|
+
const toAdd = [...desired].filter((id) => !current.has(id));
|
|
17
|
+
const toRemoveAll = [...current].filter((id) => !desired.has(id));
|
|
18
|
+
const selfId = sessionUser.id;
|
|
19
|
+
const wouldRemoveSelf = toRemoveAll.includes(selfId);
|
|
20
|
+
if (wouldRemoveSelf && !options.includeSelf) {
|
|
21
|
+
throw new CliError('INVALID_VALUE', `Set would remove you (id:${selfId}) from "${channel.name}".`, [
|
|
22
|
+
'Pass --include-self to allow removing yourself, or include yourself in the ref list.',
|
|
23
|
+
]);
|
|
24
|
+
}
|
|
25
|
+
const toRemove = wouldRemoveSelf && !options.includeSelf
|
|
26
|
+
? toRemoveAll.filter((id) => id !== selfId)
|
|
27
|
+
: toRemoveAll;
|
|
28
|
+
const isDryRun = options.dryRun || !options.apply;
|
|
29
|
+
if (isDryRun) {
|
|
30
|
+
printDryRun(`set channel membership`, {
|
|
31
|
+
Channel: `${channel.name} (id:${channel.id})`,
|
|
32
|
+
'Expanded from groups': describeExpansion(expandedFrom),
|
|
33
|
+
'To add': toAdd.length > 0 ? toAdd.join(', ') : '(none)',
|
|
34
|
+
'To remove': toRemove.length > 0 ? toRemove.join(', ') : '(none)',
|
|
35
|
+
Note: options.apply ? undefined : 'set is dry-run by default; pass --apply to mutate.',
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await Promise.all([
|
|
40
|
+
toAdd.length > 0 ? addUsersToChannel(channel.id, toAdd) : Promise.resolve(),
|
|
41
|
+
toRemove.length > 0 ? removeUsersFromChannel(channel.id, toRemove) : Promise.resolve(),
|
|
42
|
+
]);
|
|
43
|
+
const newMemberCount = current.size + toAdd.length - toRemove.length;
|
|
44
|
+
if (options.json) {
|
|
45
|
+
const result = {
|
|
46
|
+
id: channel.id,
|
|
47
|
+
memberCount: newMemberCount,
|
|
48
|
+
added: toAdd,
|
|
49
|
+
removed: toRemove,
|
|
50
|
+
};
|
|
51
|
+
if (expandedFrom.length > 0)
|
|
52
|
+
result.expandedFrom = expandedFrom;
|
|
53
|
+
if (options.full) {
|
|
54
|
+
const client = await getTwistClient();
|
|
55
|
+
const updated = await client.channels.getChannel(channel.id);
|
|
56
|
+
console.log(formatJson({ ...updated, ...result }, 'channel', true));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(formatJson(result));
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
logExpansion(expandedFrom);
|
|
64
|
+
console.log(`Set "${channel.name}": +${toAdd.length} / -${toRemove.length} (now ${newMemberCount} ${pluralize(newMemberCount, 'member')}).`);
|
|
65
|
+
if (toAdd.length > 0)
|
|
66
|
+
console.log(` Added: ${toAdd.join(', ')}`);
|
|
67
|
+
if (toRemove.length > 0)
|
|
68
|
+
console.log(` Removed: ${toRemove.join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/channel/set.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export declare function updateGroup(args: {
|
|
|
20
20
|
export declare function deleteGroup(id: number): Promise<void>;
|
|
21
21
|
export declare function addUsersToGroup(id: number, userIds: number[]): Promise<void>;
|
|
22
22
|
export declare function removeUsersFromGroup(id: number, userIds: number[]): Promise<void>;
|
|
23
|
+
export declare function addUsersToChannel(id: number, userIds: number[]): Promise<void>;
|
|
24
|
+
export declare function removeUsersFromChannel(id: number, userIds: number[]): Promise<void>;
|
|
23
25
|
export declare function clearUserCache(): void;
|
|
24
26
|
type BatchResult<T> = Pick<BatchResponse<T>, 'code' | 'data'>;
|
|
25
27
|
/**
|
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,aAAa,EAClB,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":"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"}
|
package/dist/lib/api.js
CHANGED
|
@@ -38,6 +38,8 @@ const API_SPINNER_MESSAGES = {
|
|
|
38
38
|
'channels.createChannel': { text: 'Creating channel...', color: 'green' },
|
|
39
39
|
'channels.updateChannel': { text: 'Updating channel...', color: 'yellow' },
|
|
40
40
|
'channels.deleteChannel': { text: 'Deleting channel...', color: 'yellow' },
|
|
41
|
+
'channels.addUsers': { text: 'Adding users to channel...', color: 'green' },
|
|
42
|
+
'channels.removeUsers': { text: 'Removing users from channel...', color: 'yellow' },
|
|
41
43
|
// Conversation operations
|
|
42
44
|
'conversations.getConversations': { text: 'Loading conversations...', color: 'blue' },
|
|
43
45
|
'conversations.getConversation': { text: 'Loading conversation...', color: 'blue' },
|
|
@@ -261,6 +263,14 @@ export async function removeUsersFromGroup(id, userIds) {
|
|
|
261
263
|
const client = await getTwistClient();
|
|
262
264
|
await client.groups.removeUsers({ id, userIds });
|
|
263
265
|
}
|
|
266
|
+
export async function addUsersToChannel(id, userIds) {
|
|
267
|
+
const client = await getTwistClient();
|
|
268
|
+
await client.channels.addUsers({ id, userIds });
|
|
269
|
+
}
|
|
270
|
+
export async function removeUsersFromChannel(id, userIds) {
|
|
271
|
+
const client = await getTwistClient();
|
|
272
|
+
await client.channels.removeUsers({ id, userIds });
|
|
273
|
+
}
|
|
264
274
|
export function clearUserCache() {
|
|
265
275
|
sessionUserCache = null;
|
|
266
276
|
}
|