@pnp/cli-microsoft365 7.0.0-beta.4bb805e → 7.0.0-beta.602a03f
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/dist/m365/aad/commands/user/user-get.js +7 -1
- package/dist/m365/aad/commands/user/user-list.js +3 -6
- package/dist/m365/aad/commands/user/user-set.js +20 -20
- package/dist/m365/pa/commands/app/app-consent-set.js +2 -2
- package/dist/m365/pa/commands/app/app-export.js +3 -3
- package/dist/m365/pa/commands/app/app-list.js +5 -5
- package/dist/m365/pa/commands/app/app-owner-set.js +115 -0
- package/dist/m365/pa/commands/app/app-permission-list.js +104 -0
- package/dist/m365/pa/commands.js +2 -0
- package/dist/m365/planner/commands/bucket/bucket-add.js +14 -10
- package/dist/m365/planner/commands/bucket/bucket-get.js +25 -19
- package/dist/m365/planner/commands/bucket/bucket-list.js +14 -10
- package/dist/m365/planner/commands/bucket/bucket-remove.js +26 -20
- package/dist/m365/planner/commands/bucket/bucket-set.js +26 -28
- package/dist/m365/planner/commands/roster/roster-member-add.js +3 -14
- package/dist/m365/pp/commands/aibuildermodel/aibuildermodel-get.js +2 -2
- package/dist/m365/pp/commands/aibuildermodel/aibuildermodel-list.js +2 -2
- package/dist/m365/pp/commands/aibuildermodel/aibuildermodel-remove.js +3 -3
- package/dist/m365/pp/commands/card/card-clone.js +3 -3
- package/dist/m365/pp/commands/card/card-get.js +2 -2
- package/dist/m365/pp/commands/card/card-list.js +2 -2
- package/dist/m365/pp/commands/card/card-remove.js +3 -3
- package/dist/m365/pp/commands/chatbot/chatbot-get.js +2 -2
- package/dist/m365/pp/commands/chatbot/chatbot-list.js +3 -3
- package/dist/m365/pp/commands/chatbot/chatbot-remove.js +3 -3
- package/dist/m365/pp/commands/dataverse/dataverse-table-get.js +2 -2
- package/dist/m365/pp/commands/dataverse/dataverse-table-list.js +2 -2
- package/dist/m365/pp/commands/dataverse/dataverse-table-remove.js +2 -2
- package/dist/m365/pp/commands/dataverse/dataverse-table-row-list.js +2 -2
- package/dist/m365/pp/commands/dataverse/dataverse-table-row-remove.js +2 -2
- package/dist/m365/pp/commands/solution/solution-get.js +2 -2
- package/dist/m365/pp/commands/solution/solution-list.js +2 -2
- package/dist/m365/pp/commands/solution/solution-publish.js +3 -3
- package/dist/m365/pp/commands/solution/solution-publisher-add.js +2 -2
- package/dist/m365/pp/commands/solution/solution-publisher-get.js +2 -2
- package/dist/m365/pp/commands/solution/solution-publisher-list.js +2 -2
- package/dist/m365/pp/commands/solution/solution-publisher-remove.js +3 -3
- package/dist/m365/pp/commands/solution/solution-remove.js +3 -3
- package/dist/m365/purview/commands/retentionevent/retentionevent-remove.js +19 -17
- package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-remove.js +19 -17
- package/dist/m365/spo/commands/file/file-list.js +3 -14
- package/dist/m365/spo/commands/list/list-add.js +0 -9
- package/dist/m365/spo/commands/list/list-retentionlabel-ensure.js +0 -4
- package/dist/m365/spo/commands/list/list-retentionlabel-get.js +0 -4
- package/dist/m365/spo/commands/list/list-set.js +0 -9
- package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +4 -4
- package/dist/m365/spo/commands/site/site-commsite-enable.js +9 -18
- package/dist/m365/spo/commands/tenant/tenant-commandset-set.js +107 -24
- package/dist/m365/spo/commands/theme/theme-get.js +1 -2
- package/dist/m365/spo/commands/user/user-get.js +5 -5
- package/dist/m365/spo/commands.js +0 -2
- package/dist/m365/teams/commands/chat/chat-member-add.js +117 -0
- package/dist/m365/teams/commands/meeting/meeting-get.js +16 -24
- package/dist/m365/teams/commands/meeting/meeting-list.js +2 -15
- package/dist/m365/teams/commands/team/team-app-list.js +1 -1
- package/dist/m365/teams/commands.js +1 -0
- package/docs/docs/cmd/aad/user/user-get.mdx +118 -25
- package/docs/docs/cmd/aad/user/user-list.mdx +0 -9
- package/docs/docs/cmd/aad/user/user-set.mdx +11 -11
- package/docs/docs/cmd/pa/app/app-consent-set.mdx +3 -3
- package/docs/docs/cmd/pa/app/app-export.mdx +3 -3
- package/docs/docs/cmd/pa/app/app-list.mdx +2 -2
- package/docs/docs/cmd/pa/app/app-owner-set.mdx +60 -0
- package/docs/docs/cmd/pa/app/app-permission-list.mdx +132 -0
- package/docs/docs/cmd/planner/bucket/bucket-add.mdx +21 -4
- package/docs/docs/cmd/planner/bucket/bucket-get.mdx +22 -5
- package/docs/docs/cmd/planner/bucket/bucket-list.mdx +21 -4
- package/docs/docs/cmd/planner/bucket/bucket-remove.mdx +21 -4
- package/docs/docs/cmd/planner/bucket/bucket-set.mdx +22 -5
- package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-get.mdx +4 -4
- package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-list.mdx +4 -4
- package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-remove.mdx +4 -4
- package/docs/docs/cmd/pp/card/card-clone.mdx +6 -6
- package/docs/docs/cmd/pp/card/card-get.mdx +6 -6
- package/docs/docs/cmd/pp/card/card-list.mdx +4 -4
- package/docs/docs/cmd/pp/card/card-remove.mdx +9 -9
- package/docs/docs/cmd/pp/chatbot/chatbot-get.mdx +6 -6
- package/docs/docs/cmd/pp/chatbot/chatbot-list.mdx +4 -4
- package/docs/docs/cmd/pp/chatbot/chatbot-remove.mdx +4 -4
- package/docs/docs/cmd/pp/dataverse/dataverse-table-get.mdx +2 -2
- package/docs/docs/cmd/pp/dataverse/dataverse-table-list.mdx +2 -2
- package/docs/docs/cmd/pp/dataverse/dataverse-table-remove.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-row-list.mdx +5 -5
- package/docs/docs/cmd/pp/dataverse/dataverse-table-row-remove.mdx +5 -5
- package/docs/docs/cmd/pp/solution/solution-get.mdx +6 -6
- package/docs/docs/cmd/pp/solution/solution-list.mdx +4 -4
- package/docs/docs/cmd/pp/solution/solution-publish.mdx +4 -4
- package/docs/docs/cmd/pp/solution/solution-publisher-add.mdx +3 -3
- package/docs/docs/cmd/pp/solution/solution-publisher-get.mdx +6 -6
- package/docs/docs/cmd/pp/solution/solution-publisher-list.mdx +4 -4
- package/docs/docs/cmd/pp/solution/solution-publisher-remove.mdx +5 -5
- package/docs/docs/cmd/pp/solution/solution-remove.mdx +9 -9
- package/docs/docs/cmd/spo/file/file-list.mdx +6 -10
- package/docs/docs/cmd/spo/file/file-retentionlabel-ensure.mdx +1 -1
- package/docs/docs/cmd/spo/list/list-add.mdx +0 -3
- package/docs/docs/cmd/spo/list/list-retentionlabel-ensure.mdx +0 -6
- package/docs/docs/cmd/spo/list/list-retentionlabel-get.mdx +0 -6
- package/docs/docs/cmd/spo/list/list-set.mdx +0 -3
- package/docs/docs/cmd/spo/listitem/listitem-attachment-list.mdx +7 -7
- package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +11 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-set.mdx +23 -11
- package/docs/docs/cmd/spo/user/user-get.mdx +6 -6
- package/docs/docs/cmd/teams/chat/chat-member-add.mdx +66 -0
- package/package.json +1 -1
|
@@ -13,15 +13,19 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
14
14
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
15
15
|
};
|
|
16
|
-
var _SpoTenantCommandSetSetCommand_instances, _SpoTenantCommandSetSetCommand_initTelemetry, _SpoTenantCommandSetSetCommand_initOptions, _SpoTenantCommandSetSetCommand_initValidators;
|
|
16
|
+
var _SpoTenantCommandSetSetCommand_instances, _SpoTenantCommandSetSetCommand_initTelemetry, _SpoTenantCommandSetSetCommand_initOptions, _SpoTenantCommandSetSetCommand_initValidators, _SpoTenantCommandSetSetCommand_initOptionSets;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
const validation_1 = require("../../../../utils/validation");
|
|
19
19
|
const SpoCommand_1 = require("../../../base/SpoCommand");
|
|
20
20
|
const commands_1 = require("../../commands");
|
|
21
|
+
const os = require("os");
|
|
21
22
|
const urlUtil_1 = require("../../../../utils/urlUtil");
|
|
23
|
+
const Cli_1 = require("../../../../cli/Cli");
|
|
24
|
+
const spoListItemListCommand = require("../listitem/listitem-list");
|
|
22
25
|
const request_1 = require("../../../../request");
|
|
23
26
|
const formatting_1 = require("../../../../utils/formatting");
|
|
24
27
|
const spo_1 = require("../../../../utils/spo");
|
|
28
|
+
const odata_1 = require("../../../../utils/odata");
|
|
25
29
|
class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
26
30
|
get name() {
|
|
27
31
|
return commands_1.default.TENANT_COMMANDSET_SET;
|
|
@@ -35,6 +39,7 @@ class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
|
35
39
|
__classPrivateFieldGet(this, _SpoTenantCommandSetSetCommand_instances, "m", _SpoTenantCommandSetSetCommand_initTelemetry).call(this);
|
|
36
40
|
__classPrivateFieldGet(this, _SpoTenantCommandSetSetCommand_instances, "m", _SpoTenantCommandSetSetCommand_initOptions).call(this);
|
|
37
41
|
__classPrivateFieldGet(this, _SpoTenantCommandSetSetCommand_instances, "m", _SpoTenantCommandSetSetCommand_initValidators).call(this);
|
|
42
|
+
__classPrivateFieldGet(this, _SpoTenantCommandSetSetCommand_instances, "m", _SpoTenantCommandSetSetCommand_initOptionSets).call(this);
|
|
38
43
|
}
|
|
39
44
|
commandAction(logger, args) {
|
|
40
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -43,34 +48,97 @@ class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
|
43
48
|
if (!appCatalogUrl) {
|
|
44
49
|
throw 'No app catalog URL found';
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
if (args.options.newClientSideComponentId !== undefined) {
|
|
52
|
+
const componentManifest = yield this.getComponentManifest(appCatalogUrl, args.options.newClientSideComponentId, logger);
|
|
53
|
+
const clientComponentManifest = JSON.parse(componentManifest.ClientComponentManifest);
|
|
54
|
+
if (clientComponentManifest.extensionType !== "ListViewCommandSet") {
|
|
55
|
+
throw `The extension type of this component is not of type 'ListViewCommandSet' but of type '${clientComponentManifest.extensionType}'`;
|
|
56
|
+
}
|
|
57
|
+
const solution = yield this.getSolutionFromAppCatalog(appCatalogUrl, componentManifest.SolutionId, logger);
|
|
58
|
+
if (!solution.ContainsTenantWideExtension) {
|
|
59
|
+
throw `The solution does not contain an extension that can be deployed to all sites. Make sure that you've entered the correct component Id.`;
|
|
60
|
+
}
|
|
61
|
+
else if (!solution.SkipFeatureDeployment) {
|
|
62
|
+
throw 'The solution has not been deployed to all sites. Make sure to deploy this solution to all sites.';
|
|
63
|
+
}
|
|
50
64
|
}
|
|
51
|
-
|
|
65
|
+
const listServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(appCatalogUrl, '/lists/TenantWideExtensions');
|
|
66
|
+
const listItemId = yield this.getListItemId(appCatalogUrl, args.options, listServerRelativeUrl, logger);
|
|
67
|
+
yield this.updateTenantWideExtension(logger, appCatalogUrl, args.options, listServerRelativeUrl, listItemId);
|
|
52
68
|
}
|
|
53
69
|
catch (err) {
|
|
54
70
|
this.handleRejectedODataJsonPromise(err);
|
|
55
71
|
}
|
|
56
72
|
});
|
|
57
73
|
}
|
|
58
|
-
|
|
74
|
+
getComponentManifest(appCatalogUrl, clientSideComponentId, logger) {
|
|
59
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
76
|
if (this.verbose) {
|
|
61
|
-
logger.logToStderr(
|
|
77
|
+
logger.logToStderr('Retrieving component manifest item from the ComponentManifests list on the app catalog site so that we get the solution id');
|
|
62
78
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
const camlQuery = `<View><ViewFields><FieldRef Name='ClientComponentId'></FieldRef><FieldRef Name='SolutionId'></FieldRef><FieldRef Name='ClientComponentManifest'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='ClientComponentId' /><Value Type='Guid'>${clientSideComponentId}</Value></Eq></Where></Query></View>`;
|
|
80
|
+
const commandOptions = {
|
|
81
|
+
webUrl: appCatalogUrl,
|
|
82
|
+
listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`,
|
|
83
|
+
camlQuery: camlQuery,
|
|
84
|
+
verbose: this.verbose,
|
|
85
|
+
debug: this.debug,
|
|
86
|
+
output: 'json'
|
|
69
87
|
};
|
|
70
|
-
|
|
88
|
+
const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
|
|
89
|
+
if (this.verbose) {
|
|
90
|
+
logger.logToStderr(output.stderr);
|
|
91
|
+
}
|
|
92
|
+
const outputParsed = JSON.parse(output.stdout);
|
|
93
|
+
if (outputParsed.length === 0) {
|
|
94
|
+
throw 'No component found with the specified clientSideComponentId found in the component manifest list. Make sure that the application is added to the application catalog';
|
|
95
|
+
}
|
|
96
|
+
return outputParsed[0];
|
|
71
97
|
});
|
|
72
98
|
}
|
|
73
|
-
|
|
99
|
+
getSolutionFromAppCatalog(appCatalogUrl, solutionId, logger) {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
if (this.verbose) {
|
|
102
|
+
logger.logToStderr(`Retrieving solution with id ${solutionId} from the application catalog`);
|
|
103
|
+
}
|
|
104
|
+
const camlQuery = `<View><ViewFields><FieldRef Name='SkipFeatureDeployment'></FieldRef><FieldRef Name='ContainsTenantWideExtension'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='AppProductID' /><Value Type='Guid'>${solutionId}</Value></Eq></Where></Query></View>`;
|
|
105
|
+
const commandOptions = {
|
|
106
|
+
webUrl: appCatalogUrl,
|
|
107
|
+
listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/AppCatalog`,
|
|
108
|
+
camlQuery: camlQuery,
|
|
109
|
+
verbose: this.verbose,
|
|
110
|
+
debug: this.debug,
|
|
111
|
+
output: 'json'
|
|
112
|
+
};
|
|
113
|
+
const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
|
|
114
|
+
if (this.verbose) {
|
|
115
|
+
logger.logToStderr(output.stderr);
|
|
116
|
+
}
|
|
117
|
+
const outputParsed = JSON.parse(output.stdout);
|
|
118
|
+
if (outputParsed.length === 0) {
|
|
119
|
+
throw `No component found with the solution id ${solutionId}. Make sure that the solution is available in the app catalog`;
|
|
120
|
+
}
|
|
121
|
+
return outputParsed[0];
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
getListItemId(appCatalogUrl, options, listServerRelativeUrl, logger) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
const { title, id, clientSideComponentId } = options;
|
|
127
|
+
const filter = title ? `Title eq '${title}'` : id ? `Id eq '${id}'` : `TenantWideExtensionComponentId eq '${clientSideComponentId}'`;
|
|
128
|
+
if (this.verbose) {
|
|
129
|
+
logger.logToStderr(`Getting tenant-wide listview commandset: "${title || id || clientSideComponentId}"...`);
|
|
130
|
+
}
|
|
131
|
+
const listItemInstances = yield odata_1.odata.getAllItems(`${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/Items?$filter=startswith(TenantWideExtensionLocation, 'ClientSideExtension.ListViewCommandSet') and ${filter}`);
|
|
132
|
+
if (!listItemInstances || listItemInstances.length === 0) {
|
|
133
|
+
throw 'The specified listview commandset was not found';
|
|
134
|
+
}
|
|
135
|
+
if (listItemInstances.length > 1) {
|
|
136
|
+
throw `Multiple listview commandsets with ${title ? `title '${title}'` : `ClientSideComponentId '${clientSideComponentId}'`} found. Please disambiguate using IDs: ${os.EOL}${listItemInstances.map(item => `- ${item.Id}`).join(os.EOL)}`;
|
|
137
|
+
}
|
|
138
|
+
return listItemInstances[0].Id;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
updateTenantWideExtension(logger, appCatalogUrl, options, listServerRelativeUrl, listItemId) {
|
|
74
142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
75
143
|
if (this.verbose) {
|
|
76
144
|
logger.logToStderr('Updating tenant wide extension to the TenantWideExtensions list');
|
|
@@ -82,10 +150,10 @@ class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
|
82
150
|
FieldValue: options.newTitle
|
|
83
151
|
});
|
|
84
152
|
}
|
|
85
|
-
if (options.
|
|
153
|
+
if (options.newClientSideComponentId !== undefined) {
|
|
86
154
|
formValues.push({
|
|
87
155
|
FieldName: 'TenantWideExtensionComponentId',
|
|
88
|
-
FieldValue: options.
|
|
156
|
+
FieldValue: options.newClientSideComponentId
|
|
89
157
|
});
|
|
90
158
|
}
|
|
91
159
|
if (options.location !== undefined) {
|
|
@@ -113,7 +181,7 @@ class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
|
113
181
|
});
|
|
114
182
|
}
|
|
115
183
|
const requestOptions = {
|
|
116
|
-
url: `${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/Items(${
|
|
184
|
+
url: `${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/Items(${listItemId})/ValidateUpdateListItem()`,
|
|
117
185
|
headers: {
|
|
118
186
|
'accept': 'application/json;odata=nometadata'
|
|
119
187
|
},
|
|
@@ -149,9 +217,12 @@ class SpoTenantCommandSetSetCommand extends SpoCommand_1.default {
|
|
|
149
217
|
_SpoTenantCommandSetSetCommand_instances = new WeakSet(), _SpoTenantCommandSetSetCommand_initTelemetry = function _SpoTenantCommandSetSetCommand_initTelemetry() {
|
|
150
218
|
this.telemetry.push((args) => {
|
|
151
219
|
Object.assign(this.telemetryProperties, {
|
|
220
|
+
title: typeof args.options.title !== 'undefined',
|
|
221
|
+
id: typeof args.options.id !== 'undefined',
|
|
222
|
+
clientSideComponentId: typeof args.options.clientSideComponentId !== 'undefined',
|
|
152
223
|
newTitle: typeof args.options.newTitle !== 'undefined',
|
|
153
224
|
listType: args.options.listType,
|
|
154
|
-
|
|
225
|
+
newClientSideComponentId: typeof args.options.newClientSideComponentId !== 'undefined',
|
|
155
226
|
clientSideComponentProperties: typeof args.options.clientSideComponentProperties !== 'undefined',
|
|
156
227
|
webTemplate: typeof args.options.webTemplate !== 'undefined',
|
|
157
228
|
location: args.options.location
|
|
@@ -159,14 +230,18 @@ _SpoTenantCommandSetSetCommand_instances = new WeakSet(), _SpoTenantCommandSetSe
|
|
|
159
230
|
});
|
|
160
231
|
}, _SpoTenantCommandSetSetCommand_initOptions = function _SpoTenantCommandSetSetCommand_initOptions() {
|
|
161
232
|
this.options.unshift({
|
|
162
|
-
option: '-i, --id
|
|
233
|
+
option: '-i, --id [id]'
|
|
234
|
+
}, {
|
|
235
|
+
option: '-t, --title [title]'
|
|
236
|
+
}, {
|
|
237
|
+
option: '-c, --clientSideComponentId [clientSideComponentId]'
|
|
163
238
|
}, {
|
|
164
|
-
option: '
|
|
239
|
+
option: '--newTitle [newTitle]'
|
|
165
240
|
}, {
|
|
166
241
|
option: '-l, --listType [listType]',
|
|
167
242
|
autocomplete: SpoTenantCommandSetSetCommand.listTypes
|
|
168
243
|
}, {
|
|
169
|
-
option: '
|
|
244
|
+
option: '--newClientSideComponentId [newClientSideComponentId]'
|
|
170
245
|
}, {
|
|
171
246
|
option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
|
|
172
247
|
}, {
|
|
@@ -179,15 +254,21 @@ _SpoTenantCommandSetSetCommand_instances = new WeakSet(), _SpoTenantCommandSetSe
|
|
|
179
254
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
180
255
|
if (!args.options.newTitle &&
|
|
181
256
|
!args.options.listType &&
|
|
182
|
-
!args.options.
|
|
257
|
+
!args.options.newClientSideComponentId &&
|
|
183
258
|
!args.options.clientSideComponentProperties &&
|
|
184
259
|
!args.options.webTemplate &&
|
|
185
260
|
!args.options.location) {
|
|
186
261
|
return 'Specify at least one property to update';
|
|
187
262
|
}
|
|
263
|
+
if (args.options.id && isNaN(parseInt(args.options.id))) {
|
|
264
|
+
return `${args.options.id} is not a number`;
|
|
265
|
+
}
|
|
188
266
|
if (args.options.clientSideComponentId && !validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
|
|
189
267
|
return `${args.options.clientSideComponentId} is not a valid GUID`;
|
|
190
268
|
}
|
|
269
|
+
if (args.options.newClientSideComponentId && !validation_1.validation.isValidGuid(args.options.newClientSideComponentId)) {
|
|
270
|
+
return `${args.options.newClientSideComponentId} is not a valid GUID`;
|
|
271
|
+
}
|
|
191
272
|
if (args.options.listType && SpoTenantCommandSetSetCommand.listTypes.indexOf(args.options.listType) < 0) {
|
|
192
273
|
return `${args.options.listType} is not a valid list type. Allowed values are ${SpoTenantCommandSetSetCommand.listTypes.join(', ')}`;
|
|
193
274
|
}
|
|
@@ -196,6 +277,8 @@ _SpoTenantCommandSetSetCommand_instances = new WeakSet(), _SpoTenantCommandSetSe
|
|
|
196
277
|
}
|
|
197
278
|
return true;
|
|
198
279
|
}));
|
|
280
|
+
}, _SpoTenantCommandSetSetCommand_initOptionSets = function _SpoTenantCommandSetSetCommand_initOptionSets() {
|
|
281
|
+
this.optionSets.push({ options: ['title', 'id', 'clientSideComponentId'] });
|
|
199
282
|
};
|
|
200
283
|
SpoTenantCommandSetSetCommand.listTypes = ['List', 'Library', 'SitePages'];
|
|
201
284
|
SpoTenantCommandSetSetCommand.locations = ['ContextMenu', 'CommandBar', 'Both'];
|
|
@@ -54,8 +54,7 @@ class SpoThemeGetCommand extends SpoCommand_1.default {
|
|
|
54
54
|
if (contents && contents.ErrorInfo) {
|
|
55
55
|
throw contents.ErrorInfo.ErrorMessage || 'ClientSvc unknown error';
|
|
56
56
|
}
|
|
57
|
-
const
|
|
58
|
-
const theme = json2[6];
|
|
57
|
+
const theme = json[6];
|
|
59
58
|
delete theme._ObjectType_;
|
|
60
59
|
logger.log(theme);
|
|
61
60
|
}
|
|
@@ -47,8 +47,8 @@ class SpoUserGetCommand extends SpoCommand_1.default {
|
|
|
47
47
|
else if (args.options.email) {
|
|
48
48
|
requestUrl = `${args.options.webUrl}/_api/web/siteusers/GetByEmail('${formatting_1.formatting.encodeQueryParameter(args.options.email)}')`;
|
|
49
49
|
}
|
|
50
|
-
else if (args.options.
|
|
51
|
-
requestUrl = `${args.options.webUrl}/_api/web/siteusers/GetByLoginName('${formatting_1.formatting.encodeQueryParameter(args.options.
|
|
50
|
+
else if (args.options.userName) {
|
|
51
|
+
requestUrl = `${args.options.webUrl}/_api/web/siteusers/GetByLoginName('${formatting_1.formatting.encodeQueryParameter(args.options.userName)}')`;
|
|
52
52
|
}
|
|
53
53
|
const requestOptions = {
|
|
54
54
|
url: requestUrl,
|
|
@@ -73,7 +73,7 @@ _SpoUserGetCommand_instances = new WeakSet(), _SpoUserGetCommand_initTelemetry =
|
|
|
73
73
|
Object.assign(this.telemetryProperties, {
|
|
74
74
|
id: (!(!args.options.id)).toString(),
|
|
75
75
|
email: (!(!args.options.email)).toString(),
|
|
76
|
-
|
|
76
|
+
userName: (!(!args.options.userName)).toString()
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
}, _SpoUserGetCommand_initOptions = function _SpoUserGetCommand_initOptions() {
|
|
@@ -84,7 +84,7 @@ _SpoUserGetCommand_instances = new WeakSet(), _SpoUserGetCommand_initTelemetry =
|
|
|
84
84
|
}, {
|
|
85
85
|
option: '--email [email]'
|
|
86
86
|
}, {
|
|
87
|
-
option: '--
|
|
87
|
+
option: '--userName [userName]'
|
|
88
88
|
});
|
|
89
89
|
}, _SpoUserGetCommand_initValidators = function _SpoUserGetCommand_initValidators() {
|
|
90
90
|
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -95,7 +95,7 @@ _SpoUserGetCommand_instances = new WeakSet(), _SpoUserGetCommand_initTelemetry =
|
|
|
95
95
|
return validation_1.validation.isValidSharePointUrl(args.options.webUrl);
|
|
96
96
|
}));
|
|
97
97
|
}, _SpoUserGetCommand_initOptionSets = function _SpoUserGetCommand_initOptionSets() {
|
|
98
|
-
this.optionSets.push({ options: ['id', 'email', '
|
|
98
|
+
this.optionSets.push({ options: ['id', 'email', 'userName'] });
|
|
99
99
|
};
|
|
100
100
|
module.exports = new SpoUserGetCommand();
|
|
101
101
|
//# sourceMappingURL=user-get.js.map
|
|
@@ -132,8 +132,6 @@ exports.default = {
|
|
|
132
132
|
LIST_CONTENTTYPE_REMOVE: `${prefix} list contenttype remove`,
|
|
133
133
|
LIST_CONTENTTYPE_DEFAULT_SET: `${prefix} list contenttype default set`,
|
|
134
134
|
LIST_GET: `${prefix} list get`,
|
|
135
|
-
LIST_LABEL_GET: `${prefix} list label get`,
|
|
136
|
-
LIST_LABEL_SET: `${prefix} list label set`,
|
|
137
135
|
LIST_LIST: `${prefix} list list`,
|
|
138
136
|
LIST_REMOVE: `${prefix} list remove`,
|
|
139
137
|
LIST_RETENTIONLABEL_ENSURE: `${prefix} list retentionlabel ensure`,
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
14
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
15
|
+
};
|
|
16
|
+
var _TeamsChatMemberAddCommand_instances, _TeamsChatMemberAddCommand_initTelemetry, _TeamsChatMemberAddCommand_initOptions, _TeamsChatMemberAddCommand_initValidators, _TeamsChatMemberAddCommand_initOptionSets;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const validation_1 = require("../../../../utils/validation");
|
|
19
|
+
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
20
|
+
const commands_1 = require("../../commands");
|
|
21
|
+
const request_1 = require("../../../../request");
|
|
22
|
+
const formatting_1 = require("../../../../utils/formatting");
|
|
23
|
+
class TeamsChatMemberAddCommand extends GraphCommand_1.default {
|
|
24
|
+
get name() {
|
|
25
|
+
return commands_1.default.CHAT_MEMBER_ADD;
|
|
26
|
+
}
|
|
27
|
+
get description() {
|
|
28
|
+
return 'Adds a member to a Microsoft Teams chat conversation.';
|
|
29
|
+
}
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
_TeamsChatMemberAddCommand_instances.add(this);
|
|
33
|
+
__classPrivateFieldGet(this, _TeamsChatMemberAddCommand_instances, "m", _TeamsChatMemberAddCommand_initTelemetry).call(this);
|
|
34
|
+
__classPrivateFieldGet(this, _TeamsChatMemberAddCommand_instances, "m", _TeamsChatMemberAddCommand_initOptions).call(this);
|
|
35
|
+
__classPrivateFieldGet(this, _TeamsChatMemberAddCommand_instances, "m", _TeamsChatMemberAddCommand_initValidators).call(this);
|
|
36
|
+
__classPrivateFieldGet(this, _TeamsChatMemberAddCommand_instances, "m", _TeamsChatMemberAddCommand_initOptionSets).call(this);
|
|
37
|
+
}
|
|
38
|
+
commandAction(logger, args) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
try {
|
|
41
|
+
if (this.verbose) {
|
|
42
|
+
logger.logToStderr(`Adding member ${args.options.userId || args.options.userName} to chat with id ${args.options.chatId}...`);
|
|
43
|
+
}
|
|
44
|
+
const chatMemberAddOptions = {
|
|
45
|
+
url: `${this.resource}/v1.0/chats/${args.options.chatId}/members`,
|
|
46
|
+
headers: {
|
|
47
|
+
accept: 'application/json;odata.metadata=none'
|
|
48
|
+
},
|
|
49
|
+
responseType: 'json',
|
|
50
|
+
data: {
|
|
51
|
+
'@odata.type': '#microsoft.graph.aadUserConversationMember',
|
|
52
|
+
'user@odata.bind': `https://graph.microsoft.com/v1.0/users/${args.options.userId || formatting_1.formatting.encodeQueryParameter(args.options.userName)}`,
|
|
53
|
+
visibleHistoryStartDateTime: args.options.includeAllHistory ? '0001-01-01T00:00:00Z' : args.options.visibleHistoryStartDateTime,
|
|
54
|
+
roles: [args.options.role || 'owner']
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
yield request_1.default.post(chatMemberAddOptions);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
this.handleRejectedODataJsonPromise(err);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_TeamsChatMemberAddCommand_instances = new WeakSet(), _TeamsChatMemberAddCommand_initTelemetry = function _TeamsChatMemberAddCommand_initTelemetry() {
|
|
66
|
+
this.telemetry.push((args) => {
|
|
67
|
+
Object.assign(this.telemetryProperties, {
|
|
68
|
+
userId: typeof args.options.userId !== 'undefined',
|
|
69
|
+
userName: typeof args.options.userName !== 'undefined',
|
|
70
|
+
role: typeof args.options.role !== 'undefined',
|
|
71
|
+
visibleHistoryStartDateTime: typeof args.options.visibleHistoryStartDateTime !== 'undefined',
|
|
72
|
+
includeAllHistory: !!args.options.includeAllHistory
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}, _TeamsChatMemberAddCommand_initOptions = function _TeamsChatMemberAddCommand_initOptions() {
|
|
76
|
+
this.options.unshift({
|
|
77
|
+
option: '-i, --chatId <chatId>'
|
|
78
|
+
}, {
|
|
79
|
+
option: '--userId [userId]'
|
|
80
|
+
}, {
|
|
81
|
+
option: '--userName [userName]'
|
|
82
|
+
}, {
|
|
83
|
+
option: '--role [role]',
|
|
84
|
+
autocomplete: TeamsChatMemberAddCommand.roles
|
|
85
|
+
}, {
|
|
86
|
+
option: '--visibleHistoryStartDateTime [visibleHistoryStartDateTime]'
|
|
87
|
+
}, {
|
|
88
|
+
option: '--includeAllHistory'
|
|
89
|
+
});
|
|
90
|
+
}, _TeamsChatMemberAddCommand_initValidators = function _TeamsChatMemberAddCommand_initValidators() {
|
|
91
|
+
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
if (!validation_1.validation.isValidTeamsChatId(args.options.chatId)) {
|
|
93
|
+
return `${args.options.chatId} is not a valid chatId.`;
|
|
94
|
+
}
|
|
95
|
+
if (args.options.userId && !validation_1.validation.isValidGuid(args.options.userId)) {
|
|
96
|
+
return `${args.options.userId} is not a valid userId.`;
|
|
97
|
+
}
|
|
98
|
+
if (args.options.userName && !validation_1.validation.isValidUserPrincipalName(args.options.userName)) {
|
|
99
|
+
return `${args.options.userName} is not a valid userName.`;
|
|
100
|
+
}
|
|
101
|
+
if (args.options.role && TeamsChatMemberAddCommand.roles.indexOf(args.options.role) < 0) {
|
|
102
|
+
return `${args.options.role} is not a valid role. Allowed values are ${TeamsChatMemberAddCommand.roles.join(', ')}`;
|
|
103
|
+
}
|
|
104
|
+
if (args.options.visibleHistoryStartDateTime && !validation_1.validation.isValidISODateTime(args.options.visibleHistoryStartDateTime)) {
|
|
105
|
+
return `'${args.options.visibleHistoryStartDateTime}' is not a valid visibleHistoryStartDateTime.`;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}));
|
|
109
|
+
}, _TeamsChatMemberAddCommand_initOptionSets = function _TeamsChatMemberAddCommand_initOptionSets() {
|
|
110
|
+
this.optionSets.push({ options: ['userId', 'userName'] }, {
|
|
111
|
+
options: ['visibleHistoryStartDateTime', 'includeAllHistory'],
|
|
112
|
+
runsWhen: (args) => args.options.visibleHistoryStartDateTime || args.options.includeAllHistory
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
TeamsChatMemberAddCommand.roles = ['owner', 'guest'];
|
|
116
|
+
module.exports = new TeamsChatMemberAddCommand();
|
|
117
|
+
//# sourceMappingURL=chat-member-add.js.map
|
|
@@ -16,13 +16,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
16
16
|
var _TeamsMeetingGetCommand_instances, _TeamsMeetingGetCommand_initTelemetry, _TeamsMeetingGetCommand_initOptions, _TeamsMeetingGetCommand_initValidators;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
const Auth_1 = require("../../../../Auth");
|
|
19
|
-
const Cli_1 = require("../../../../cli/Cli");
|
|
20
19
|
const request_1 = require("../../../../request");
|
|
21
20
|
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
22
21
|
const commands_1 = require("../../commands");
|
|
23
22
|
const validation_1 = require("../../../../utils/validation");
|
|
24
23
|
const accessToken_1 = require("../../../../utils/accessToken");
|
|
25
|
-
const
|
|
24
|
+
const aadUser_1 = require("../../../../utils/aadUser");
|
|
25
|
+
const formatting_1 = require("../../../../utils/formatting");
|
|
26
26
|
class TeamsMeetingGetCommand extends GraphCommand_1.default {
|
|
27
27
|
get name() {
|
|
28
28
|
return commands_1.default.MEETING_GET;
|
|
@@ -37,20 +37,6 @@ class TeamsMeetingGetCommand extends GraphCommand_1.default {
|
|
|
37
37
|
__classPrivateFieldGet(this, _TeamsMeetingGetCommand_instances, "m", _TeamsMeetingGetCommand_initOptions).call(this);
|
|
38
38
|
__classPrivateFieldGet(this, _TeamsMeetingGetCommand_instances, "m", _TeamsMeetingGetCommand_initValidators).call(this);
|
|
39
39
|
}
|
|
40
|
-
getUserId(options) {
|
|
41
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
const commandOptions = {
|
|
43
|
-
email: options.email,
|
|
44
|
-
userName: options.userName,
|
|
45
|
-
output: 'json',
|
|
46
|
-
debug: this.debug,
|
|
47
|
-
verbose: this.verbose
|
|
48
|
-
};
|
|
49
|
-
const output = yield Cli_1.Cli.executeCommandWithOutput(AadUserGetCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
|
|
50
|
-
const getUserOutput = JSON.parse(output.stdout);
|
|
51
|
-
return getUserOutput.id;
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
40
|
commandAction(logger, args) {
|
|
55
41
|
return __awaiter(this, void 0, void 0, function* () {
|
|
56
42
|
const isAppOnlyAccessToken = accessToken_1.accessToken.isAppOnlyAccessToken(Auth_1.default.service.accessTokens[this.resource].accessToken);
|
|
@@ -71,18 +57,13 @@ class TeamsMeetingGetCommand extends GraphCommand_1.default {
|
|
|
71
57
|
let requestUrl = `${this.resource}/v1.0/`;
|
|
72
58
|
if (isAppOnlyAccessToken) {
|
|
73
59
|
requestUrl += 'users/';
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const userId = yield this.getUserId(args.options);
|
|
79
|
-
requestUrl += userId;
|
|
80
|
-
}
|
|
60
|
+
const userId = yield this.getUserId(args.options);
|
|
61
|
+
requestUrl += userId;
|
|
81
62
|
}
|
|
82
63
|
else {
|
|
83
64
|
requestUrl += `me`;
|
|
84
65
|
}
|
|
85
|
-
requestUrl += `/onlineMeetings?$filter=JoinWebUrl eq '${
|
|
66
|
+
requestUrl += `/onlineMeetings?$filter=JoinWebUrl eq '${formatting_1.formatting.encodeQueryParameter(args.options.joinUrl)}'`;
|
|
86
67
|
const requestOptions = {
|
|
87
68
|
url: requestUrl,
|
|
88
69
|
headers: {
|
|
@@ -103,6 +84,17 @@ class TeamsMeetingGetCommand extends GraphCommand_1.default {
|
|
|
103
84
|
}
|
|
104
85
|
});
|
|
105
86
|
}
|
|
87
|
+
getUserId(options) {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
if (options.userId) {
|
|
90
|
+
return options.userId;
|
|
91
|
+
}
|
|
92
|
+
if (options.userName) {
|
|
93
|
+
return aadUser_1.aadUser.getUserIdByUpn(options.userName);
|
|
94
|
+
}
|
|
95
|
+
return aadUser_1.aadUser.getUserIdByEmail(options.email);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
106
98
|
}
|
|
107
99
|
_TeamsMeetingGetCommand_instances = new WeakSet(), _TeamsMeetingGetCommand_initTelemetry = function _TeamsMeetingGetCommand_initTelemetry() {
|
|
108
100
|
this.telemetry.push((args) => {
|
|
@@ -21,8 +21,8 @@ const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
|
21
21
|
const commands_1 = require("../../commands");
|
|
22
22
|
const odata_1 = require("../../../../utils/odata");
|
|
23
23
|
const validation_1 = require("../../../../utils/validation");
|
|
24
|
-
const AadUserGetCommand = require("../../../aad/commands/user/user-get");
|
|
25
24
|
const accessToken_1 = require("../../../../utils/accessToken");
|
|
25
|
+
const aadUser_1 = require("../../../../utils/aadUser");
|
|
26
26
|
class TeamsMeetingListCommand extends GraphCommand_1.default {
|
|
27
27
|
get name() {
|
|
28
28
|
return commands_1.default.MEETING_LIST;
|
|
@@ -60,7 +60,7 @@ class TeamsMeetingListCommand extends GraphCommand_1.default {
|
|
|
60
60
|
requestUrl += args.options.userName;
|
|
61
61
|
}
|
|
62
62
|
else if (args.options.email) {
|
|
63
|
-
const userId = yield
|
|
63
|
+
const userId = yield aadUser_1.aadUser.getUserIdByEmail(args.options.email);
|
|
64
64
|
requestUrl += userId;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -98,19 +98,6 @@ class TeamsMeetingListCommand extends GraphCommand_1.default {
|
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
|
-
getUserId(email) {
|
|
102
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
-
const options = {
|
|
104
|
-
email: email,
|
|
105
|
-
output: 'json',
|
|
106
|
-
debug: this.debug,
|
|
107
|
-
verbose: this.verbose
|
|
108
|
-
};
|
|
109
|
-
const output = yield Cli_1.Cli.executeCommandWithOutput(AadUserGetCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
|
|
110
|
-
const getUserOutput = JSON.parse(output.stdout);
|
|
111
|
-
return getUserOutput.id;
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
101
|
}
|
|
115
102
|
_TeamsMeetingListCommand_instances = new WeakSet(), _TeamsMeetingListCommand_initTelemetry = function _TeamsMeetingListCommand_initTelemetry() {
|
|
116
103
|
this.telemetry.push((args) => {
|
|
@@ -43,7 +43,7 @@ class TeamsTeamAppListCommand extends GraphCommand_1.default {
|
|
|
43
43
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
44
|
try {
|
|
45
45
|
if (this.verbose) {
|
|
46
|
-
logger.logToStderr(`Retrieving installed apps for team '${args.options.teamId || args.options.
|
|
46
|
+
logger.logToStderr(`Retrieving installed apps for team '${args.options.teamId || args.options.teamName}'`);
|
|
47
47
|
}
|
|
48
48
|
const teamId = yield this.getTeamId(args);
|
|
49
49
|
const res = yield odata_1.odata.getAllItems(`${this.resource}/v1.0/teams/${teamId}/installedApps?$expand=teamsApp,teamsAppDefinition`);
|
|
@@ -20,6 +20,7 @@ exports.default = {
|
|
|
20
20
|
CHANNEL_SET: `${prefix} channel set`,
|
|
21
21
|
CHAT_GET: `${prefix} chat get`,
|
|
22
22
|
CHAT_LIST: `${prefix} chat list`,
|
|
23
|
+
CHAT_MEMBER_ADD: `${prefix} chat member add`,
|
|
23
24
|
CHAT_MEMBER_LIST: `${prefix} chat member list`,
|
|
24
25
|
CHAT_MEMBER_REMOVE: `${prefix} chat member remove`,
|
|
25
26
|
CHAT_MESSAGE_LIST: `${prefix} chat message list`,
|