@pnp/cli-microsoft365 5.4.0-beta.fdd7cb1 → 5.5.0-beta.3b0d087
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/Auth.js +3 -3
- package/dist/Command.js +22 -0
- package/dist/m365/aad/commands/app/app-set.js +4 -1
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-remove.js +129 -0
- package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-restore.js +60 -9
- package/dist/m365/aad/commands.js +1 -0
- package/dist/m365/base/PowerAppsCommand.js +10 -0
- package/dist/m365/flow/commands/flow-export.js +3 -0
- package/dist/m365/pa/commands/app/app-get.js +3 -5
- package/dist/m365/pa/commands/app/app-list.js +10 -9
- package/dist/m365/pa/commands/app/app-remove.js +3 -3
- package/dist/m365/pa/commands/connector/connector-export.js +3 -3
- package/dist/m365/pa/commands/connector/connector-list.js +10 -9
- package/dist/m365/pa/commands/environment/environment-get.js +3 -3
- package/dist/m365/pa/commands/environment/environment-list.js +4 -4
- package/dist/m365/planner/commands/bucket/bucket-add.js +17 -9
- package/dist/m365/planner/commands/bucket/bucket-get.js +19 -11
- package/dist/m365/planner/commands/bucket/bucket-list.js +17 -9
- package/dist/m365/planner/commands/bucket/bucket-remove.js +19 -11
- package/dist/m365/planner/commands/bucket/bucket-set.js +19 -11
- package/dist/m365/planner/commands/plan/plan-add.js +98 -5
- package/dist/m365/planner/commands/plan/plan-get.js +58 -17
- package/dist/m365/planner/commands/plan/plan-remove.js +141 -0
- package/dist/m365/planner/commands/task/task-add.js +73 -24
- package/dist/m365/planner/commands/task/task-checklistitem-list.js +53 -0
- package/dist/m365/planner/commands/task/task-checklistitem-remove.js +85 -0
- package/dist/m365/planner/commands/task/task-get.js +14 -9
- package/dist/m365/planner/commands/task/task-list.js +19 -11
- package/dist/m365/planner/commands/task/task-reference-add.js +1 -7
- package/dist/m365/planner/commands/task/task-reference-remove.js +122 -0
- package/dist/m365/planner/commands/task/task-remove.js +4 -19
- package/dist/m365/planner/commands/task/task-set.js +34 -24
- package/dist/m365/planner/commands/tenant/tenant-settings-set.js +95 -0
- package/dist/m365/planner/commands.js +6 -1
- package/dist/m365/planner/taskPriority.js +27 -0
- package/dist/m365/search/commands/externalconnection/externalconnection-get.js +69 -0
- package/dist/m365/search/commands.js +1 -0
- package/dist/m365/spfx/commands/project/project-doctor/doctor-1.15.0.js +23 -0
- package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN015008_FILE_eslintrc_js.js +7 -0
- package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.15.0-rc.0.js → upgrade-1.15.0.js} +34 -32
- package/dist/m365/spfx/commands/project/project-upgrade.js +13 -15
- package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
- package/dist/m365/spo/base-permissions.js +9 -0
- package/dist/m365/spo/commands/customaction/customaction-get.js +32 -4
- package/dist/m365/spo/commands/customaction/customaction-remove.js +43 -8
- package/dist/m365/spo/commands/field/field-set.js +16 -9
- package/dist/m365/spo/commands/group/group-add.js +96 -0
- package/dist/m365/spo/commands/group/group-set.js +167 -0
- package/dist/m365/spo/commands/hubsite/hubsite-get.js +99 -13
- package/dist/m365/spo/commands/hubsite/hubsite-list.js +1 -1
- package/dist/m365/spo/commands/list/ListPrincipalType.js +13 -0
- package/dist/m365/spo/commands/list/list-get.js +6 -0
- package/dist/m365/spo/commands/list/list-list.js +10 -1
- package/dist/m365/spo/commands/listitem/listitem-get.js +9 -9
- package/dist/m365/spo/commands/listitem/listitem-list.js +5 -1
- package/dist/m365/spo/commands/listitem/listitem-set.js +2 -2
- package/dist/m365/spo/commands/roledefinition/RoleDefinition.js +3 -0
- package/dist/m365/spo/commands/roledefinition/RoleType.js +16 -0
- package/dist/m365/spo/commands/roledefinition/roledefinition-get.js +59 -0
- package/dist/m365/spo/commands/site/site-classic-list.js +1 -0
- package/dist/m365/spo/commands/site/site-classic-set.js +1 -0
- package/dist/m365/spo/commands/site/site-list.js +59 -17
- package/dist/m365/spo/commands/site/site-set.js +322 -162
- package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +9 -6
- package/dist/m365/spo/commands.js +3 -0
- package/dist/m365/teams/commands/cache/cache-remove.js +155 -0
- package/dist/m365/teams/commands/team/team-archive.js +51 -15
- package/dist/m365/teams/commands/team/team-remove.js +47 -11
- package/dist/m365/teams/commands/team/team-unarchive.js +48 -12
- package/dist/m365/teams/commands.js +1 -0
- package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +1 -9
- package/dist/utils/accessToken.js +18 -0
- package/dist/utils/planner.js +9 -8
- package/dist/utils/validation.js +5 -1
- package/docs/docs/cmd/aad/app/app-set.md +1 -1
- package/docs/docs/cmd/aad/o365group/o365group-recyclebinitem-remove.md +45 -0
- package/docs/docs/cmd/aad/o365group/o365group-recyclebinitem-restore.md +21 -3
- package/docs/docs/cmd/aad/user/user-get.md +12 -0
- package/docs/docs/cmd/planner/bucket/bucket-add.md +9 -6
- package/docs/docs/cmd/planner/bucket/bucket-get.md +10 -7
- package/docs/docs/cmd/planner/bucket/bucket-list.md +8 -5
- package/docs/docs/cmd/planner/bucket/bucket-remove.md +8 -5
- package/docs/docs/cmd/planner/bucket/bucket-set.md +9 -6
- package/docs/docs/cmd/planner/plan/plan-add.md +18 -2
- package/docs/docs/cmd/planner/plan/plan-get.md +14 -2
- package/docs/docs/cmd/planner/plan/plan-remove.md +48 -0
- package/docs/docs/cmd/planner/task/task-add.md +51 -12
- package/docs/docs/cmd/planner/task/task-checklistitem-list.md +24 -0
- package/docs/docs/cmd/planner/task/task-checklistitem-remove.md +36 -0
- package/docs/docs/cmd/planner/task/task-get.md +17 -8
- package/docs/docs/cmd/planner/task/task-list.md +9 -6
- package/docs/docs/cmd/planner/task/task-reference-remove.md +39 -0
- package/docs/docs/cmd/planner/task/task-set.md +20 -7
- package/docs/docs/cmd/planner/tenant/tenant-settings-set.md +56 -0
- package/docs/docs/cmd/search/externalconnection/externalconnection-get.md +33 -0
- package/docs/docs/cmd/spfx/project/project-upgrade.md +1 -1
- package/docs/docs/cmd/spo/customaction/customaction-get.md +15 -2
- package/docs/docs/cmd/spo/customaction/customaction-remove.md +33 -2
- package/docs/docs/cmd/spo/field/field-set.md +7 -4
- package/docs/docs/cmd/spo/group/group-add.md +51 -0
- package/docs/docs/cmd/spo/group/group-set.md +69 -0
- package/docs/docs/cmd/spo/hubsite/hubsite-get.md +39 -7
- package/docs/docs/cmd/spo/hubsite/hubsite-list.md +1 -4
- package/docs/docs/cmd/spo/list/list-list.md +3 -0
- package/docs/docs/cmd/spo/listitem/listitem-get.md +11 -2
- package/docs/docs/cmd/spo/listitem/listitem-list.md +8 -0
- package/docs/docs/cmd/spo/roledefinition/roledefinition-get.md +27 -0
- package/docs/docs/cmd/spo/site/site-classic-list.md +3 -0
- package/docs/docs/cmd/spo/site/site-classic-set.md +3 -0
- package/docs/docs/cmd/spo/site/site-list.md +19 -7
- package/docs/docs/cmd/spo/site/site-set.md +50 -6
- package/docs/docs/cmd/teams/cache/cache-remove.md +46 -0
- package/docs/docs/cmd/teams/team/team-archive.md +20 -5
- package/docs/docs/cmd/teams/team/team-remove.md +19 -5
- package/docs/docs/cmd/teams/team/team-unarchive.md +18 -4
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-get.md +1 -1
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-list.md +1 -1
- package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-list.md +1 -1
- package/npm-shrinkwrap.json +175 -160
- package/package.json +13 -13
- package/dist/m365/planner/commands/plan/plan-details-get.js +0 -116
- package/docs/docs/cmd/planner/plan/plan-details-get.md +0 -45
|
@@ -5,7 +5,7 @@ const Command_1 = require("../../../../Command");
|
|
|
5
5
|
const utils_1 = require("../../../../utils");
|
|
6
6
|
const SpoCommand_1 = require("../../../base/SpoCommand");
|
|
7
7
|
const commands_1 = require("../../commands");
|
|
8
|
-
const
|
|
8
|
+
const spoSiteAddCommand = require("../site/site-add");
|
|
9
9
|
const spoSiteGetCommand = require("../site/site-get");
|
|
10
10
|
const spoSiteRemoveCommand = require("../site/site-remove");
|
|
11
11
|
const spoTenantAppCatalogUrlGetCommand = require("./tenant-appcatalogurl-get");
|
|
@@ -21,7 +21,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
21
21
|
logger.logToStderr('Checking for existing app catalog URL...');
|
|
22
22
|
}
|
|
23
23
|
cli_1.Cli
|
|
24
|
-
.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand, { options: { _: [] } })
|
|
24
|
+
.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand, { options: { output: 'text', _: [] } })
|
|
25
25
|
.then((spoTenantAppCatalogUrlGetCommandOutput) => {
|
|
26
26
|
const appCatalogUrl = spoTenantAppCatalogUrlGetCommandOutput.stdout;
|
|
27
27
|
if (!appCatalogUrl) {
|
|
@@ -33,6 +33,7 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
33
33
|
if (this.verbose) {
|
|
34
34
|
logger.logToStderr(`Found app catalog URL ${appCatalogUrl}`);
|
|
35
35
|
}
|
|
36
|
+
//Using JSON.parse
|
|
36
37
|
return this.ensureNoExistingSite(appCatalogUrl, args.options.force, logger);
|
|
37
38
|
})
|
|
38
39
|
.then(() => this.ensureNoExistingSite(args.options.url, args.options.force, logger))
|
|
@@ -92,17 +93,19 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
92
93
|
if (this.verbose) {
|
|
93
94
|
logger.logToStderr(`Creating app catalog at ${options.url}...`);
|
|
94
95
|
}
|
|
95
|
-
const
|
|
96
|
+
const siteAddOptions = {
|
|
96
97
|
webTemplate: 'APPCATALOG#0',
|
|
97
98
|
title: 'App catalog',
|
|
99
|
+
type: 'ClassicSite',
|
|
98
100
|
url: options.url,
|
|
99
101
|
timeZone: options.timeZone,
|
|
100
|
-
|
|
102
|
+
owners: options.owner,
|
|
101
103
|
wait: options.wait,
|
|
102
104
|
verbose: this.verbose,
|
|
103
|
-
debug: this.debug
|
|
105
|
+
debug: this.debug,
|
|
106
|
+
removeDeletedSite: false
|
|
104
107
|
};
|
|
105
|
-
return cli_1.Cli.executeCommand(
|
|
108
|
+
return cli_1.Cli.executeCommand(spoSiteAddCommand, { options: Object.assign(Object.assign({}, siteAddOptions), { _: [] }) });
|
|
106
109
|
}
|
|
107
110
|
options() {
|
|
108
111
|
const options = [
|
|
@@ -63,9 +63,11 @@ exports.default = {
|
|
|
63
63
|
FOLDER_REMOVE: `${prefix} folder remove`,
|
|
64
64
|
FOLDER_RENAME: `${prefix} folder rename`,
|
|
65
65
|
GET: `${prefix} get`,
|
|
66
|
+
GROUP_ADD: `${prefix} group add`,
|
|
66
67
|
GROUP_GET: `${prefix} group get`,
|
|
67
68
|
GROUP_LIST: `${prefix} group list`,
|
|
68
69
|
GROUP_REMOVE: `${prefix} group remove`,
|
|
70
|
+
GROUP_SET: `${prefix} group set`,
|
|
69
71
|
GROUP_USER_ADD: `${prefix} group user add`,
|
|
70
72
|
GROUP_USER_LIST: `${prefix} group user list`,
|
|
71
73
|
GROUP_USER_REMOVE: `${prefix} group user remove`,
|
|
@@ -167,6 +169,7 @@ exports.default = {
|
|
|
167
169
|
REPORT_SITEUSAGEPAGES: `${prefix} report siteusagepages`,
|
|
168
170
|
REPORT_SITEUSAGESITECOUNTS: `${prefix} report siteusagesitecounts`,
|
|
169
171
|
REPORT_SITEUSAGESTORAGE: `${prefix} report siteusagestorage`,
|
|
172
|
+
ROLEDEFINITION_GET: `${prefix} roledefinition get`,
|
|
170
173
|
ROLEDEFINITION_LIST: `${prefix} roledefinition list`,
|
|
171
174
|
ROLEDEFINITION_REMOVE: `${prefix} roledefinition remove`,
|
|
172
175
|
SEARCH: `${prefix} search`,
|
|
@@ -0,0 +1,155 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const util = require("util");
|
|
13
|
+
const cli_1 = require("../../../../cli");
|
|
14
|
+
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
15
|
+
const commands_1 = require("../../commands");
|
|
16
|
+
class TeamsCacheRemoveCommand extends GraphCommand_1.default {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.exec = util.promisify(require('child_process').exec);
|
|
20
|
+
}
|
|
21
|
+
get name() {
|
|
22
|
+
return commands_1.default.CACHE_REMOVE;
|
|
23
|
+
}
|
|
24
|
+
get description() {
|
|
25
|
+
return 'Removes the Microsoft Teams client cache';
|
|
26
|
+
}
|
|
27
|
+
getTelemetryProperties(args) {
|
|
28
|
+
const telemetryProps = super.getTelemetryProperties(args);
|
|
29
|
+
telemetryProps.confirm = (!(!args.options.confirm)).toString();
|
|
30
|
+
return telemetryProps;
|
|
31
|
+
}
|
|
32
|
+
commandAction(logger, args, cb) {
|
|
33
|
+
if (args.options.confirm) {
|
|
34
|
+
this.clearTeamsCache(logger, cb);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
logger.logToStderr('This command will execute the following steps.');
|
|
38
|
+
logger.logToStderr('- Stop the Microsoft Teams client.');
|
|
39
|
+
logger.logToStderr('- Clear the Microsoft Teams cached files.');
|
|
40
|
+
cli_1.Cli.prompt({
|
|
41
|
+
type: 'confirm',
|
|
42
|
+
name: 'continue',
|
|
43
|
+
default: false,
|
|
44
|
+
message: `Are you sure you want to clear your Microsoft Teams cache?`
|
|
45
|
+
}, (result) => {
|
|
46
|
+
if (!result.continue) {
|
|
47
|
+
cb();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.clearTeamsCache(logger, cb);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
clearTeamsCache(logger, cb) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
try {
|
|
58
|
+
yield this.killRunningProcess(logger);
|
|
59
|
+
yield this.removeCacheFiles(logger);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
cb(e.message);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
logger.logToStderr('Teams cache cleared!');
|
|
66
|
+
cb();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
killRunningProcess(logger) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
if (this.verbose) {
|
|
72
|
+
logger.logToStderr('Stop Teams client');
|
|
73
|
+
}
|
|
74
|
+
const platform = process.platform;
|
|
75
|
+
let cmd = '';
|
|
76
|
+
switch (platform) {
|
|
77
|
+
case 'win32':
|
|
78
|
+
cmd = 'taskkill /IM "Teams.exe" /F';
|
|
79
|
+
break;
|
|
80
|
+
case 'darwin':
|
|
81
|
+
cmd = `ps ax | grep MacOS/Teams -m 1 | grep -v grep | awk '{ print $1 }'`;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
if (this.debug) {
|
|
85
|
+
logger.logToStderr(cmd);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const cmdOutput = yield this.exec(cmd);
|
|
89
|
+
if (cmdOutput.stdout !== '' && platform === 'darwin') {
|
|
90
|
+
process.kill(cmdOutput.stdout);
|
|
91
|
+
}
|
|
92
|
+
if (this.verbose) {
|
|
93
|
+
logger.logToStderr('Teams client closed');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
const errorMessage = e.message;
|
|
98
|
+
if (errorMessage.includes('ERROR: The process "Teams.exe" not found.')) {
|
|
99
|
+
if (this.verbose) {
|
|
100
|
+
logger.logToStderr('Teams client isn\'t running');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
throw new Error(errorMessage);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
removeCacheFiles(logger) {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
if (this.verbose) {
|
|
112
|
+
logger.logToStderr('Clear Teams cached files');
|
|
113
|
+
}
|
|
114
|
+
const platform = process.platform;
|
|
115
|
+
let cmd = '';
|
|
116
|
+
switch (platform) {
|
|
117
|
+
case 'win32':
|
|
118
|
+
cmd = 'cd %userprofile% && rmdir /s /q AppData\\Roaming\\Microsoft\\Teams';
|
|
119
|
+
break;
|
|
120
|
+
case 'darwin':
|
|
121
|
+
cmd = 'rm -r ~/Library/Application\\ Support/Microsoft/Teams';
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
if (this.debug) {
|
|
125
|
+
logger.logToStderr(cmd);
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
yield this.exec(cmd);
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
throw new Error(e.message);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
options() {
|
|
136
|
+
const options = [
|
|
137
|
+
{
|
|
138
|
+
option: '--confirm'
|
|
139
|
+
}
|
|
140
|
+
];
|
|
141
|
+
const parentOptions = super.options();
|
|
142
|
+
return options.concat(parentOptions);
|
|
143
|
+
}
|
|
144
|
+
validate() {
|
|
145
|
+
if (process.env.CLIMICROSOFT365_ENV === 'docker') {
|
|
146
|
+
return 'Because you\'re running CLI for Microsoft 365 in a Docker container, we can\'t clear the cache on your host. Instead run this command on your host using "npx ..."';
|
|
147
|
+
}
|
|
148
|
+
if (process.platform !== 'win32' && process.platform !== 'darwin') {
|
|
149
|
+
return `${process.platform} platform is unsupported for this command`;
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
module.exports = new TeamsCacheRemoveCommand();
|
|
155
|
+
//# sourceMappingURL=cache-remove.js.map
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const request_1 = require("../../../../request");
|
|
4
4
|
const utils_1 = require("../../../../utils");
|
|
5
|
+
const aadGroup_1 = require("../../../../utils/aadGroup");
|
|
5
6
|
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
6
7
|
const commands_1 = require("../../commands");
|
|
7
8
|
class TeamsTeamArchiveCommand extends GraphCommand_1.default {
|
|
@@ -16,27 +17,53 @@ class TeamsTeamArchiveCommand extends GraphCommand_1.default {
|
|
|
16
17
|
telemetryProps.shouldSetSpoSiteReadOnlyForMembers = args.options.shouldSetSpoSiteReadOnlyForMembers === true;
|
|
17
18
|
return telemetryProps;
|
|
18
19
|
}
|
|
20
|
+
getTeamId(args) {
|
|
21
|
+
if (args.options.id) {
|
|
22
|
+
return Promise.resolve(args.options.id);
|
|
23
|
+
}
|
|
24
|
+
return aadGroup_1.aadGroup
|
|
25
|
+
.getGroupByDisplayName(args.options.name)
|
|
26
|
+
.then(group => {
|
|
27
|
+
if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
|
|
28
|
+
return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
|
|
29
|
+
}
|
|
30
|
+
return group.id;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
19
33
|
commandAction(logger, args, cb) {
|
|
34
|
+
if (args.options.teamId) {
|
|
35
|
+
args.options.id = args.options.teamId;
|
|
36
|
+
this.warn(logger, `Option 'teamId' is deprecated. Please use 'id' instead.`);
|
|
37
|
+
}
|
|
20
38
|
const siteReadOnlyForMembers = args.options.shouldSetSpoSiteReadOnlyForMembers === true;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
this
|
|
40
|
+
.getTeamId(args)
|
|
41
|
+
.then((teamId) => {
|
|
42
|
+
const requestOptions = {
|
|
43
|
+
url: `${this.resource}/v1.0/teams/${encodeURIComponent(teamId)}/archive`,
|
|
44
|
+
headers: {
|
|
45
|
+
'content-type': 'application/json;odata=nometadata',
|
|
46
|
+
'accept': 'application/json;odata.metadata=none'
|
|
47
|
+
},
|
|
48
|
+
responseType: 'json',
|
|
49
|
+
data: {
|
|
50
|
+
shouldSetSpoSiteReadOnlyForMembers: siteReadOnlyForMembers
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return request_1.default.post(requestOptions);
|
|
54
|
+
})
|
|
34
55
|
.then(_ => cb(), (res) => this.handleRejectedODataJsonPromise(res, logger, cb));
|
|
35
56
|
}
|
|
36
57
|
options() {
|
|
37
58
|
const options = [
|
|
38
59
|
{
|
|
39
|
-
option: '-i, --
|
|
60
|
+
option: '-i, --id [id]'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
option: '-n, --name [name]'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
option: '--teamId [teamId]'
|
|
40
67
|
},
|
|
41
68
|
{
|
|
42
69
|
option: '--shouldSetSpoSiteReadOnlyForMembers'
|
|
@@ -46,9 +73,18 @@ class TeamsTeamArchiveCommand extends GraphCommand_1.default {
|
|
|
46
73
|
return options.concat(parentOptions);
|
|
47
74
|
}
|
|
48
75
|
validate(args) {
|
|
49
|
-
if (!
|
|
76
|
+
if (!args.options.id && !args.options.name && !args.options.teamId) {
|
|
77
|
+
return 'Specify either id or name';
|
|
78
|
+
}
|
|
79
|
+
if (args.options.name && (args.options.id || args.options.teamId)) {
|
|
80
|
+
return 'Specify either id or name but not both';
|
|
81
|
+
}
|
|
82
|
+
if (args.options.teamId && !utils_1.validation.isValidGuid(args.options.teamId)) {
|
|
50
83
|
return `${args.options.teamId} is not a valid GUID`;
|
|
51
84
|
}
|
|
85
|
+
if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
|
|
86
|
+
return `${args.options.id} is not a valid GUID`;
|
|
87
|
+
}
|
|
52
88
|
return true;
|
|
53
89
|
}
|
|
54
90
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const cli_1 = require("../../../../cli");
|
|
4
4
|
const request_1 = require("../../../../request");
|
|
5
5
|
const utils_1 = require("../../../../utils");
|
|
6
|
+
const aadGroup_1 = require("../../../../utils/aadGroup");
|
|
6
7
|
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
7
8
|
const commands_1 = require("../../commands");
|
|
8
9
|
class TeamsTeamRemoveCommand extends GraphCommand_1.default {
|
|
@@ -17,17 +18,37 @@ class TeamsTeamRemoveCommand extends GraphCommand_1.default {
|
|
|
17
18
|
telemetryProps.confirm = (!(!args.options.confirm)).toString();
|
|
18
19
|
return telemetryProps;
|
|
19
20
|
}
|
|
21
|
+
getTeamId(args) {
|
|
22
|
+
if (args.options.id) {
|
|
23
|
+
return Promise.resolve(args.options.id);
|
|
24
|
+
}
|
|
25
|
+
return aadGroup_1.aadGroup
|
|
26
|
+
.getGroupByDisplayName(args.options.name)
|
|
27
|
+
.then(group => {
|
|
28
|
+
if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
|
|
29
|
+
return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
|
|
30
|
+
}
|
|
31
|
+
return group.id;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
20
34
|
commandAction(logger, args, cb) {
|
|
35
|
+
if (args.options.teamId) {
|
|
36
|
+
args.options.id = args.options.teamId;
|
|
37
|
+
this.warn(logger, `Option 'teamId' is deprecated. Please use 'id' instead.`);
|
|
38
|
+
}
|
|
21
39
|
const removeTeam = () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
this
|
|
41
|
+
.getTeamId(args)
|
|
42
|
+
.then((teamId) => {
|
|
43
|
+
const requestOptions = {
|
|
44
|
+
url: `${this.resource}/v1.0/groups/${encodeURIComponent(teamId)}`,
|
|
45
|
+
headers: {
|
|
46
|
+
accept: 'application/json;odata.metadata=none'
|
|
47
|
+
},
|
|
48
|
+
responseType: 'json'
|
|
49
|
+
};
|
|
50
|
+
return request_1.default.delete(requestOptions);
|
|
51
|
+
})
|
|
31
52
|
.then(_ => cb(), (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
|
|
32
53
|
};
|
|
33
54
|
if (args.options.confirm) {
|
|
@@ -52,7 +73,13 @@ class TeamsTeamRemoveCommand extends GraphCommand_1.default {
|
|
|
52
73
|
options() {
|
|
53
74
|
const options = [
|
|
54
75
|
{
|
|
55
|
-
option: '-i, --
|
|
76
|
+
option: '-i, --id [id]'
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
option: '-n, --name [name]'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
option: '--teamId [teamId]'
|
|
56
83
|
},
|
|
57
84
|
{
|
|
58
85
|
option: '--confirm'
|
|
@@ -62,9 +89,18 @@ class TeamsTeamRemoveCommand extends GraphCommand_1.default {
|
|
|
62
89
|
return options.concat(parentOptions);
|
|
63
90
|
}
|
|
64
91
|
validate(args) {
|
|
65
|
-
if (!
|
|
92
|
+
if (!args.options.id && !args.options.name && !args.options.teamId) {
|
|
93
|
+
return 'Specify either id or name';
|
|
94
|
+
}
|
|
95
|
+
if (args.options.name && (args.options.id || args.options.teamId)) {
|
|
96
|
+
return 'Specify either id or name but not both';
|
|
97
|
+
}
|
|
98
|
+
if (args.options.teamId && !utils_1.validation.isValidGuid(args.options.teamId)) {
|
|
66
99
|
return `${args.options.teamId} is not a valid GUID`;
|
|
67
100
|
}
|
|
101
|
+
if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
|
|
102
|
+
return `${args.options.id} is not a valid GUID`;
|
|
103
|
+
}
|
|
68
104
|
return true;
|
|
69
105
|
}
|
|
70
106
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const request_1 = require("../../../../request");
|
|
4
4
|
const utils_1 = require("../../../../utils");
|
|
5
|
+
const aadGroup_1 = require("../../../../utils/aadGroup");
|
|
5
6
|
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
6
7
|
const commands_1 = require("../../commands");
|
|
7
8
|
class TeamsTeamUnarchiveCommand extends GraphCommand_1.default {
|
|
@@ -11,33 +12,68 @@ class TeamsTeamUnarchiveCommand extends GraphCommand_1.default {
|
|
|
11
12
|
get description() {
|
|
12
13
|
return 'Restores an archived Microsoft Teams team';
|
|
13
14
|
}
|
|
15
|
+
getTeamId(args) {
|
|
16
|
+
if (args.options.id) {
|
|
17
|
+
return Promise.resolve(args.options.id);
|
|
18
|
+
}
|
|
19
|
+
return aadGroup_1.aadGroup
|
|
20
|
+
.getGroupByDisplayName(args.options.name)
|
|
21
|
+
.then(group => {
|
|
22
|
+
if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
|
|
23
|
+
return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
|
|
24
|
+
}
|
|
25
|
+
return group.id;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
14
28
|
commandAction(logger, args, cb) {
|
|
29
|
+
if (args.options.teamId) {
|
|
30
|
+
args.options.id = args.options.teamId;
|
|
31
|
+
this.warn(logger, `Option 'teamId' is deprecated. Please use 'id' instead.`);
|
|
32
|
+
}
|
|
15
33
|
const endpoint = `${this.resource}/v1.0`;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
this
|
|
35
|
+
.getTeamId(args)
|
|
36
|
+
.then((teamId) => {
|
|
37
|
+
const requestOptions = {
|
|
38
|
+
url: `${endpoint}/teams/${encodeURIComponent(teamId)}/unarchive`,
|
|
39
|
+
headers: {
|
|
40
|
+
'content-type': 'application/json;odata=nometadata',
|
|
41
|
+
'accept': 'application/json;odata.metadata=none'
|
|
42
|
+
},
|
|
43
|
+
responseType: 'json'
|
|
44
|
+
};
|
|
45
|
+
return request_1.default.post(requestOptions);
|
|
46
|
+
})
|
|
26
47
|
.then(_ => cb(), (res) => this.handleRejectedODataJsonPromise(res, logger, cb));
|
|
27
48
|
}
|
|
28
49
|
options() {
|
|
29
50
|
const options = [
|
|
30
51
|
{
|
|
31
|
-
option: '-i, --
|
|
52
|
+
option: '-i, --id [id]'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
option: '-n, --name [name]'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
option: '--teamId [teamId]'
|
|
32
59
|
}
|
|
33
60
|
];
|
|
34
61
|
const parentOptions = super.options();
|
|
35
62
|
return options.concat(parentOptions);
|
|
36
63
|
}
|
|
37
64
|
validate(args) {
|
|
38
|
-
if (!
|
|
65
|
+
if (!args.options.id && !args.options.name && !args.options.teamId) {
|
|
66
|
+
return 'Specify either id or name';
|
|
67
|
+
}
|
|
68
|
+
if (args.options.name && (args.options.id || args.options.teamId)) {
|
|
69
|
+
return 'Specify either id or name but not both';
|
|
70
|
+
}
|
|
71
|
+
if (args.options.teamId && !utils_1.validation.isValidGuid(args.options.teamId)) {
|
|
39
72
|
return `${args.options.teamId} is not a valid GUID`;
|
|
40
73
|
}
|
|
74
|
+
if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
|
|
75
|
+
return `${args.options.id} is not a valid GUID`;
|
|
76
|
+
}
|
|
41
77
|
return true;
|
|
42
78
|
}
|
|
43
79
|
}
|
|
@@ -8,6 +8,7 @@ exports.default = {
|
|
|
8
8
|
APP_REMOVE: `${prefix} app remove`,
|
|
9
9
|
APP_UNINSTALL: `${prefix} app uninstall`,
|
|
10
10
|
APP_UPDATE: `${prefix} app update`,
|
|
11
|
+
CACHE_REMOVE: `${prefix} cache remove`,
|
|
11
12
|
CHANNEL_ADD: `${prefix} channel add`,
|
|
12
13
|
CHANNEL_GET: `${prefix} channel get`,
|
|
13
14
|
CHANNEL_LIST: `${prefix} channel list`,
|
|
@@ -34,15 +34,7 @@ class TenantServiceAnnouncementHealthGetCommand extends GraphCommand_1.default {
|
|
|
34
34
|
},
|
|
35
35
|
responseType: 'json'
|
|
36
36
|
};
|
|
37
|
-
return request_1.default
|
|
38
|
-
.get(requestOptions)
|
|
39
|
-
.then(response => {
|
|
40
|
-
const serviceHealth = response;
|
|
41
|
-
if (!serviceHealth) {
|
|
42
|
-
return Promise.reject(`Error fetching service health`);
|
|
43
|
-
}
|
|
44
|
-
return Promise.resolve(serviceHealth);
|
|
45
|
-
});
|
|
37
|
+
return request_1.default.get(requestOptions);
|
|
46
38
|
}
|
|
47
39
|
options() {
|
|
48
40
|
const options = [
|
|
@@ -57,6 +57,24 @@ exports.accessToken = {
|
|
|
57
57
|
catch (_a) {
|
|
58
58
|
}
|
|
59
59
|
return userName;
|
|
60
|
+
},
|
|
61
|
+
getUserIdFromAccessToken(accessToken) {
|
|
62
|
+
let userId = '';
|
|
63
|
+
if (!accessToken || accessToken.length === 0) {
|
|
64
|
+
return userId;
|
|
65
|
+
}
|
|
66
|
+
const chunks = accessToken.split('.');
|
|
67
|
+
if (chunks.length !== 3) {
|
|
68
|
+
return userId;
|
|
69
|
+
}
|
|
70
|
+
const tokenString = Buffer.from(chunks[1], 'base64').toString();
|
|
71
|
+
try {
|
|
72
|
+
const token = JSON.parse(tokenString);
|
|
73
|
+
userId = token.oid;
|
|
74
|
+
}
|
|
75
|
+
catch (_a) {
|
|
76
|
+
}
|
|
77
|
+
return userId;
|
|
60
78
|
}
|
|
61
79
|
};
|
|
62
80
|
//# sourceMappingURL=accessToken.js.map
|
package/dist/utils/planner.js
CHANGED
|
@@ -24,10 +24,11 @@ exports.planner = {
|
|
|
24
24
|
/**
|
|
25
25
|
* Get Planner plan by ID.
|
|
26
26
|
* @param id Planner ID.
|
|
27
|
+
* @param metadata OData metadata level. Default is none
|
|
27
28
|
*/
|
|
28
|
-
getPlanById(id) {
|
|
29
|
+
getPlanById(id, metadata = 'none') {
|
|
29
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
const requestOptions = getRequestOptions(`${graphResource}/v1.0/planner/plans/${id}`,
|
|
31
|
+
const requestOptions = getRequestOptions(`${graphResource}/v1.0/planner/plans/${id}`, metadata);
|
|
31
32
|
try {
|
|
32
33
|
return yield request_1.default.get(requestOptions);
|
|
33
34
|
}
|
|
@@ -44,19 +45,19 @@ exports.planner = {
|
|
|
44
45
|
return odata_1.odata.getAllItems(`${graphResource}/v1.0/groups/${groupId}/planner/plans`, 'none');
|
|
45
46
|
},
|
|
46
47
|
/**
|
|
47
|
-
* Get Planner plan by
|
|
48
|
-
* @param
|
|
48
|
+
* Get Planner plan by title in a specific group.
|
|
49
|
+
* @param title Title of the Planner plan. Case insensitive.
|
|
49
50
|
* @param groupId Owner group ID .
|
|
50
51
|
*/
|
|
51
|
-
|
|
52
|
+
getPlanByTitle(title, groupId) {
|
|
52
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
54
|
const plans = yield this.getPlansByGroupId(groupId);
|
|
54
|
-
const filteredPlans = plans.filter(p => p.title && p.title.toLowerCase() ===
|
|
55
|
+
const filteredPlans = plans.filter(p => p.title && p.title.toLowerCase() === title.toLowerCase());
|
|
55
56
|
if (!filteredPlans.length) {
|
|
56
|
-
throw Error(`The specified plan '${
|
|
57
|
+
throw Error(`The specified plan '${title}' does not exist.`);
|
|
57
58
|
}
|
|
58
59
|
if (filteredPlans.length > 1) {
|
|
59
|
-
throw Error(`Multiple plans with
|
|
60
|
+
throw Error(`Multiple plans with title '${title}' found: ${filteredPlans.map(x => x.id)}.`);
|
|
60
61
|
}
|
|
61
62
|
return filteredPlans[0];
|
|
62
63
|
});
|
package/dist/utils/validation.js
CHANGED
|
@@ -6,8 +6,12 @@ exports.validation = {
|
|
|
6
6
|
return guids.every(guid => this.isValidGuid(guid));
|
|
7
7
|
},
|
|
8
8
|
isValidGuid(guid) {
|
|
9
|
+
if (!guid) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
9
12
|
const guidRegEx = new RegExp(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
|
|
10
|
-
|
|
13
|
+
// verify if the guid is a valid guid. @meid will be replaced in a later stage with the actual user id of the logged in user
|
|
14
|
+
return guidRegEx.test(guid) || guid.toLocaleLowerCase().trim() === "@meid";
|
|
11
15
|
},
|
|
12
16
|
isValidTeamsChannelId(guid) {
|
|
13
17
|
const guidRegEx = new RegExp(/^19:[0-9a-zA-Z-_]+@thread\.(skype|tacv2)$/i);
|
|
@@ -20,7 +20,7 @@ m365 aad app set [options]
|
|
|
20
20
|
: Name of the Azure AD application registration to update. Specify either `appId`, `objectId` or `name`
|
|
21
21
|
|
|
22
22
|
`-u, --uri [uri]`
|
|
23
|
-
: Application ID
|
|
23
|
+
: Comma-separated list of Application ID URIs to update
|
|
24
24
|
|
|
25
25
|
`-r, --redirectUris [redirectUris]`
|
|
26
26
|
: Comma-separated list of redirect URIs to add to the app registration. Requires `platform` to be specified
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# aad o365group recyclebinitem remove
|
|
2
|
+
|
|
3
|
+
Permanently deletes a Microsoft 365 Group from the recycle bin in the current tenant
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
m365 aad o365group recyclebinitem remove [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|
|
13
|
+
`-i, --id [id]`
|
|
14
|
+
: The ID of the Microsoft 365 Group to remove. Specify either `id`, `displayName` or `mailNickname` but not multiple.
|
|
15
|
+
|
|
16
|
+
`-d, --displayName [displayName]`
|
|
17
|
+
: Display name for the Microsoft 365 Group to remove. Specify either `id`, `displayName` or `mailNickname` but not multiple.
|
|
18
|
+
|
|
19
|
+
`-m, --mailNickname [mailNickname]`
|
|
20
|
+
: Name of the group e-mail (part before the @). Specify either `id`, `displayName` or `mailNickname` but not multiple.
|
|
21
|
+
|
|
22
|
+
`--confirm`
|
|
23
|
+
: Don't prompt for confirmation.
|
|
24
|
+
|
|
25
|
+
--8<-- "docs/cmd/_global.md"
|
|
26
|
+
|
|
27
|
+
## Examples
|
|
28
|
+
|
|
29
|
+
Removes the Microsoft 365 Group with specific ID
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
m365 aad o365group recyclebinitem remove --id "00000000-0000-0000-0000-000000000000"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Removes the Microsoft 365 Group with specific name
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
m365 aad o365group recyclebinitem remove --displayName "My Group"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Remove the Microsoft 365 Group with specific mail nickname without confirmation
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
m365 aad o365group recyclebinitem remove --mailNickname "Mygroup" --confirm
|
|
45
|
+
```
|