@pnp/cli-microsoft365 7.4.0-beta.d2ff47d → 7.4.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/.eslintrc.cjs +5 -0
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- package/dist/m365/external/commands/connection/connection-urltoitemresolver-add.js +69 -0
- package/dist/m365/external/commands.js +1 -0
- package/dist/m365/flow/commands/run/run-get.js +52 -13
- package/dist/m365/spo/commands/file/file-add.js +12 -8
- package/dist/m365/spo/commands/file/file-checkin.js +4 -1
- package/dist/m365/spo/commands/file/file-checkout-undo.js +5 -1
- package/dist/m365/spo/commands/file/file-checkout.js +4 -1
- package/dist/m365/spo/commands/file/file-copy.js +5 -1
- package/dist/m365/spo/commands/file/file-get.js +5 -1
- package/dist/m365/spo/commands/file/file-list.js +5 -1
- package/dist/m365/spo/commands/file/file-move.js +5 -1
- package/dist/m365/spo/commands/file/file-remove.js +5 -1
- package/dist/m365/spo/commands/file/file-rename.js +5 -1
- package/dist/m365/spo/commands/file/file-retentionlabel-ensure.js +4 -1
- package/dist/m365/spo/commands/file/file-retentionlabel-remove.js +5 -1
- package/dist/m365/spo/commands/file/file-roleassignment-add.js +4 -1
- package/dist/m365/spo/commands/file/file-roleassignment-remove.js +5 -1
- package/dist/m365/spo/commands/file/file-roleinheritance-break.js +5 -1
- package/dist/m365/spo/commands/file/file-roleinheritance-reset.js +5 -1
- package/dist/m365/spo/commands/file/file-sharinginfo-get.js +6 -3
- package/dist/m365/spo/commands/file/file-sharinglink-add.js +4 -1
- package/dist/m365/spo/commands/file/file-sharinglink-clear.js +5 -1
- package/dist/m365/spo/commands/file/file-sharinglink-get.js +4 -1
- package/dist/m365/spo/commands/file/file-sharinglink-list.js +4 -1
- package/dist/m365/spo/commands/file/file-sharinglink-remove.js +5 -1
- package/dist/m365/spo/commands/file/file-sharinglink-set.js +4 -1
- package/dist/m365/spo/commands/file/file-version-clear.js +6 -2
- package/dist/m365/spo/commands/file/file-version-get.js +1 -1
- package/dist/m365/spo/commands/file/file-version-list.js +4 -1
- package/dist/m365/spo/commands/file/file-version-remove.js +2 -1
- package/dist/m365/spo/commands/file/file-version-restore.js +2 -1
- package/dist/m365/spo/commands/folder/folder-add.js +4 -1
- package/dist/m365/spo/commands/folder/folder-copy.js +5 -1
- package/dist/m365/spo/commands/folder/folder-get.js +4 -1
- package/dist/m365/spo/commands/folder/folder-list.js +6 -2
- package/dist/m365/spo/commands/folder/folder-move.js +5 -1
- package/dist/m365/spo/commands/folder/folder-remove.js +5 -1
- package/dist/m365/spo/commands/folder/folder-rename.js +4 -1
- package/dist/m365/spo/commands/folder/folder-retentionlabel-ensure.js +4 -1
- package/dist/m365/spo/commands/folder/folder-retentionlabel-remove.js +5 -1
- package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +4 -1
- package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +6 -2
- package/dist/m365/spo/commands/folder/folder-roleinheritance-break.js +5 -1
- package/dist/m365/spo/commands/folder/folder-roleinheritance-reset.js +5 -1
- package/dist/m365/spo/commands/group/group-member-add.js +21 -4
- package/dist/m365/spo/commands/group/group-member-remove.js +27 -10
- package/dist/m365/spo/commands/user/user-ensure.js +16 -6
- package/dist/m365/teams/commands/user/user-app-add.js +35 -3
- package/docs/docs/cmd/external/connection/connection-urltoitemresolver-add.mdx +47 -0
- package/docs/docs/cmd/flow/run/run-get.mdx +167 -4
- package/docs/docs/cmd/spo/group/group-member-add.mdx +19 -7
- package/docs/docs/cmd/spo/group/group-member-remove.mdx +12 -6
- package/docs/docs/cmd/spo/user/user-ensure.mdx +8 -5
- package/docs/docs/cmd/teams/user/user-app-add.mdx +8 -5
- package/package.json +2 -2
|
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
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");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _SpoFolderRoleAssignmentRemoveCommand_instances, _SpoFolderRoleAssignmentRemoveCommand_initTelemetry, _SpoFolderRoleAssignmentRemoveCommand_initOptions, _SpoFolderRoleAssignmentRemoveCommand_initValidators;
|
|
6
|
+
var _SpoFolderRoleAssignmentRemoveCommand_instances, _SpoFolderRoleAssignmentRemoveCommand_initTelemetry, _SpoFolderRoleAssignmentRemoveCommand_initOptions, _SpoFolderRoleAssignmentRemoveCommand_initValidators, _SpoFolderRoleAssignmentRemoveCommand_initTypes;
|
|
7
7
|
import { cli } from '../../../../cli/cli.js';
|
|
8
8
|
import request from '../../../../request.js';
|
|
9
9
|
import { formatting } from '../../../../utils/formatting.js';
|
|
@@ -26,6 +26,7 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
|
|
|
26
26
|
__classPrivateFieldGet(this, _SpoFolderRoleAssignmentRemoveCommand_instances, "m", _SpoFolderRoleAssignmentRemoveCommand_initTelemetry).call(this);
|
|
27
27
|
__classPrivateFieldGet(this, _SpoFolderRoleAssignmentRemoveCommand_instances, "m", _SpoFolderRoleAssignmentRemoveCommand_initOptions).call(this);
|
|
28
28
|
__classPrivateFieldGet(this, _SpoFolderRoleAssignmentRemoveCommand_instances, "m", _SpoFolderRoleAssignmentRemoveCommand_initValidators).call(this);
|
|
29
|
+
__classPrivateFieldGet(this, _SpoFolderRoleAssignmentRemoveCommand_instances, "m", _SpoFolderRoleAssignmentRemoveCommand_initTypes).call(this);
|
|
29
30
|
}
|
|
30
31
|
async commandAction(logger, args) {
|
|
31
32
|
const removeRoleAssignment = async () => {
|
|
@@ -105,7 +106,7 @@ _SpoFolderRoleAssignmentRemoveCommand_instances = new WeakSet(), _SpoFolderRoleA
|
|
|
105
106
|
principalId: typeof args.options.principalId !== 'undefined',
|
|
106
107
|
upn: typeof args.options.upn !== 'undefined',
|
|
107
108
|
groupName: typeof args.options.groupName !== 'undefined',
|
|
108
|
-
force:
|
|
109
|
+
force: !!args.options.force
|
|
109
110
|
});
|
|
110
111
|
});
|
|
111
112
|
}, _SpoFolderRoleAssignmentRemoveCommand_initOptions = function _SpoFolderRoleAssignmentRemoveCommand_initOptions() {
|
|
@@ -140,6 +141,9 @@ _SpoFolderRoleAssignmentRemoveCommand_instances = new WeakSet(), _SpoFolderRoleA
|
|
|
140
141
|
}
|
|
141
142
|
return true;
|
|
142
143
|
});
|
|
144
|
+
}, _SpoFolderRoleAssignmentRemoveCommand_initTypes = function _SpoFolderRoleAssignmentRemoveCommand_initTypes() {
|
|
145
|
+
this.types.string.push('webUrl', 'folderUrl', 'upn', 'groupName');
|
|
146
|
+
this.types.boolean.push('force');
|
|
143
147
|
};
|
|
144
148
|
export default new SpoFolderRoleAssignmentRemoveCommand();
|
|
145
149
|
//# sourceMappingURL=folder-roleassignment-remove.js.map
|
|
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
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");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _SpoFolderRoleInheritanceBreakCommand_instances, _SpoFolderRoleInheritanceBreakCommand_initTelemetry, _SpoFolderRoleInheritanceBreakCommand_initOptions, _SpoFolderRoleInheritanceBreakCommand_initValidators;
|
|
6
|
+
var _SpoFolderRoleInheritanceBreakCommand_instances, _SpoFolderRoleInheritanceBreakCommand_initTelemetry, _SpoFolderRoleInheritanceBreakCommand_initOptions, _SpoFolderRoleInheritanceBreakCommand_initValidators, _SpoFolderRoleInheritanceBreakCommand_initTypes;
|
|
7
7
|
import { cli } from '../../../../cli/cli.js';
|
|
8
8
|
import request from '../../../../request.js';
|
|
9
9
|
import { formatting } from '../../../../utils/formatting.js';
|
|
@@ -24,6 +24,7 @@ class SpoFolderRoleInheritanceBreakCommand extends SpoCommand {
|
|
|
24
24
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceBreakCommand_instances, "m", _SpoFolderRoleInheritanceBreakCommand_initTelemetry).call(this);
|
|
25
25
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceBreakCommand_instances, "m", _SpoFolderRoleInheritanceBreakCommand_initOptions).call(this);
|
|
26
26
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceBreakCommand_instances, "m", _SpoFolderRoleInheritanceBreakCommand_initValidators).call(this);
|
|
27
|
+
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceBreakCommand_instances, "m", _SpoFolderRoleInheritanceBreakCommand_initTypes).call(this);
|
|
27
28
|
}
|
|
28
29
|
async commandAction(logger, args) {
|
|
29
30
|
const keepExistingPermissions = !args.options.clearExistingPermissions;
|
|
@@ -81,6 +82,9 @@ _SpoFolderRoleInheritanceBreakCommand_instances = new WeakSet(), _SpoFolderRoleI
|
|
|
81
82
|
});
|
|
82
83
|
}, _SpoFolderRoleInheritanceBreakCommand_initValidators = function _SpoFolderRoleInheritanceBreakCommand_initValidators() {
|
|
83
84
|
this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
|
|
85
|
+
}, _SpoFolderRoleInheritanceBreakCommand_initTypes = function _SpoFolderRoleInheritanceBreakCommand_initTypes() {
|
|
86
|
+
this.types.string.push('webUrl', 'folderUrl');
|
|
87
|
+
this.types.boolean.push('clearExistingPermissions', 'force');
|
|
84
88
|
};
|
|
85
89
|
export default new SpoFolderRoleInheritanceBreakCommand();
|
|
86
90
|
//# sourceMappingURL=folder-roleinheritance-break.js.map
|
|
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
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");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _SpoFolderRoleInheritanceResetCommand_instances, _SpoFolderRoleInheritanceResetCommand_initTelemetry, _SpoFolderRoleInheritanceResetCommand_initOptions, _SpoFolderRoleInheritanceResetCommand_initValidators;
|
|
6
|
+
var _SpoFolderRoleInheritanceResetCommand_instances, _SpoFolderRoleInheritanceResetCommand_initTelemetry, _SpoFolderRoleInheritanceResetCommand_initOptions, _SpoFolderRoleInheritanceResetCommand_initValidators, _SpoFolderRoleInheritanceResetCommand_initTypes;
|
|
7
7
|
import { cli } from '../../../../cli/cli.js';
|
|
8
8
|
import request from '../../../../request.js';
|
|
9
9
|
import { formatting } from '../../../../utils/formatting.js';
|
|
@@ -24,6 +24,7 @@ class SpoFolderRoleInheritanceResetCommand extends SpoCommand {
|
|
|
24
24
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceResetCommand_instances, "m", _SpoFolderRoleInheritanceResetCommand_initTelemetry).call(this);
|
|
25
25
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceResetCommand_instances, "m", _SpoFolderRoleInheritanceResetCommand_initOptions).call(this);
|
|
26
26
|
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceResetCommand_instances, "m", _SpoFolderRoleInheritanceResetCommand_initValidators).call(this);
|
|
27
|
+
__classPrivateFieldGet(this, _SpoFolderRoleInheritanceResetCommand_instances, "m", _SpoFolderRoleInheritanceResetCommand_initTypes).call(this);
|
|
27
28
|
}
|
|
28
29
|
async commandAction(logger, args) {
|
|
29
30
|
const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.folderUrl);
|
|
@@ -77,6 +78,9 @@ _SpoFolderRoleInheritanceResetCommand_instances = new WeakSet(), _SpoFolderRoleI
|
|
|
77
78
|
});
|
|
78
79
|
}, _SpoFolderRoleInheritanceResetCommand_initValidators = function _SpoFolderRoleInheritanceResetCommand_initValidators() {
|
|
79
80
|
this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
|
|
81
|
+
}, _SpoFolderRoleInheritanceResetCommand_initTypes = function _SpoFolderRoleInheritanceResetCommand_initTypes() {
|
|
82
|
+
this.types.string.push('webUrl', 'folderUrl');
|
|
83
|
+
this.types.boolean.push('force');
|
|
80
84
|
};
|
|
81
85
|
export default new SpoFolderRoleInheritanceResetCommand();
|
|
82
86
|
//# sourceMappingURL=folder-roleinheritance-reset.js.map
|
|
@@ -32,6 +32,14 @@ class SpoGroupMemberAddCommand extends SpoCommand {
|
|
|
32
32
|
}
|
|
33
33
|
async commandAction(logger, args) {
|
|
34
34
|
try {
|
|
35
|
+
if (args.options.aadGroupIds) {
|
|
36
|
+
args.options.entraGroupIds = args.options.aadGroupIds;
|
|
37
|
+
this.warn(logger, `Option 'aadGroupIds' is deprecated. Please use 'entraGroupIds' instead`);
|
|
38
|
+
}
|
|
39
|
+
if (args.options.aadGroupNames) {
|
|
40
|
+
args.options.entraGroupNames = args.options.aadGroupNames;
|
|
41
|
+
this.warn(logger, `Option 'aadGroupNames' is deprecated. Please use 'entraGroupNames' instead`);
|
|
42
|
+
}
|
|
35
43
|
const groupId = await this.getGroupId(args, logger);
|
|
36
44
|
const resolvedUsernameList = await this.getValidUsers(args, logger);
|
|
37
45
|
if (this.verbose) {
|
|
@@ -82,7 +90,7 @@ class SpoGroupMemberAddCommand extends SpoCommand {
|
|
|
82
90
|
await logger.logToStderr('Checking if the specified users and groups exist');
|
|
83
91
|
}
|
|
84
92
|
const validUserNames = [];
|
|
85
|
-
const identifiers = args.options.userNames ?? args.options.emails ?? args.options.
|
|
93
|
+
const identifiers = args.options.userNames ?? args.options.emails ?? args.options.entraGroupIds ?? args.options.entraGroupNames ?? args.options.userIds.toString();
|
|
86
94
|
await Promise.all(identifiers.split(',').map(async (identifier) => {
|
|
87
95
|
const trimmedIdentifier = identifier.trim();
|
|
88
96
|
try {
|
|
@@ -96,10 +104,10 @@ class SpoGroupMemberAddCommand extends SpoCommand {
|
|
|
96
104
|
else if (args.options.userNames) {
|
|
97
105
|
validUserNames.push(trimmedIdentifier);
|
|
98
106
|
}
|
|
99
|
-
else if (args.options.
|
|
107
|
+
else if (args.options.entraGroupIds) {
|
|
100
108
|
validUserNames.push(trimmedIdentifier);
|
|
101
109
|
}
|
|
102
|
-
else if (args.options.
|
|
110
|
+
else if (args.options.entraGroupNames) {
|
|
103
111
|
if (this.verbose) {
|
|
104
112
|
await logger.logToStderr(`Getting ID of Azure AD group ${trimmedIdentifier}`);
|
|
105
113
|
}
|
|
@@ -135,7 +143,9 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
|
|
|
135
143
|
userNames: typeof args.options.userNames !== 'undefined',
|
|
136
144
|
emails: typeof args.options.emails !== 'undefined',
|
|
137
145
|
userIds: typeof args.options.userIds !== 'undefined',
|
|
146
|
+
entraGroupIds: typeof args.options.entraGroupIds !== 'undefined',
|
|
138
147
|
aadGroupIds: typeof args.options.aadGroupIds !== 'undefined',
|
|
148
|
+
entraGroupNames: typeof args.options.entraGroupNames !== 'undefined',
|
|
139
149
|
aadGroupNames: typeof args.options.aadGroupNames !== 'undefined'
|
|
140
150
|
});
|
|
141
151
|
});
|
|
@@ -152,8 +162,12 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
|
|
|
152
162
|
option: '--emails [emails]'
|
|
153
163
|
}, {
|
|
154
164
|
option: '--userIds [userIds]'
|
|
165
|
+
}, {
|
|
166
|
+
option: '--entraGroupIds [entraGroupIds]'
|
|
155
167
|
}, {
|
|
156
168
|
option: '--aadGroupIds [aadGroupIds]'
|
|
169
|
+
}, {
|
|
170
|
+
option: '--entraGroupNames [entraGroupNames]'
|
|
157
171
|
}, {
|
|
158
172
|
option: '--aadGroupNames [aadGroupNames]'
|
|
159
173
|
});
|
|
@@ -176,13 +190,16 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
|
|
|
176
190
|
if (args.options.emails && args.options.emails.split(',').some(e => !validation.isValidUserPrincipalName(e))) {
|
|
177
191
|
return `${args.options.emails} contains one or more invalid email addresses`;
|
|
178
192
|
}
|
|
193
|
+
if (args.options.entraGroupIds && args.options.entraGroupIds.split(',').some(e => !validation.isValidGuid(e))) {
|
|
194
|
+
return `${args.options.entraGroupIds} contains one or more invalid GUIDs`;
|
|
195
|
+
}
|
|
179
196
|
if (args.options.aadGroupIds && args.options.aadGroupIds.split(',').some(e => !validation.isValidGuid(e))) {
|
|
180
197
|
return `${args.options.aadGroupIds} contains one or more invalid GUIDs`;
|
|
181
198
|
}
|
|
182
199
|
return true;
|
|
183
200
|
});
|
|
184
201
|
}, _SpoGroupMemberAddCommand_initOptionSets = function _SpoGroupMemberAddCommand_initOptionSets() {
|
|
185
|
-
this.optionSets.push({ options: ['groupId', 'groupName'] }, { options: ['userNames', 'emails', 'userIds', 'aadGroupIds', 'aadGroupNames'] });
|
|
202
|
+
this.optionSets.push({ options: ['groupId', 'groupName'] }, { options: ['userNames', 'emails', 'userIds', 'entraGroupIds', 'aadGroupIds', 'entraGroupNames', 'aadGroupNames'] });
|
|
186
203
|
};
|
|
187
204
|
export default new SpoGroupMemberAddCommand();
|
|
188
205
|
//# sourceMappingURL=group-member-add.js.map
|
|
@@ -45,6 +45,14 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
45
45
|
return userOutput.userPrincipalName;
|
|
46
46
|
}
|
|
47
47
|
async commandAction(logger, args) {
|
|
48
|
+
if (args.options.aadGroupId) {
|
|
49
|
+
args.options.entraGroupId = args.options.aadGroupId;
|
|
50
|
+
this.warn(logger, `Option 'aadGroupId' is deprecated. Please use 'entraGroupId' instead`);
|
|
51
|
+
}
|
|
52
|
+
if (args.options.aadGroupName) {
|
|
53
|
+
args.options.entraGroupName = args.options.aadGroupName;
|
|
54
|
+
this.warn(logger, `Option 'aadGroupName' is deprecated. Please use 'entraGroupName' instead`);
|
|
55
|
+
}
|
|
48
56
|
if (args.options.force) {
|
|
49
57
|
if (this.debug) {
|
|
50
58
|
await logger.logToStderr('Confirmation bypassed by entering confirm option. Removing the user from SharePoint Group...');
|
|
@@ -52,7 +60,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
52
60
|
await this.removeUserfromSPGroup(logger, args);
|
|
53
61
|
}
|
|
54
62
|
else {
|
|
55
|
-
const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.
|
|
63
|
+
const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.entraGroupId || args.options.entraGroupName} from the SharePoint group?` });
|
|
56
64
|
if (result) {
|
|
57
65
|
await this.removeUserfromSPGroup(logger, args);
|
|
58
66
|
}
|
|
@@ -60,7 +68,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
60
68
|
}
|
|
61
69
|
async removeUserfromSPGroup(logger, args) {
|
|
62
70
|
if (this.verbose) {
|
|
63
|
-
await logger.logToStderr(`Removing User ${args.options.userName || args.options.email || args.options.userId || args.options.
|
|
71
|
+
await logger.logToStderr(`Removing User ${args.options.userName || args.options.email || args.options.userId || args.options.entraGroupId || args.options.entraGroupName} from Group: ${args.options.groupId || args.options.groupName}`);
|
|
64
72
|
}
|
|
65
73
|
let requestUrl = `${args.options.webUrl}/_api/web/sitegroups/${args.options.groupId
|
|
66
74
|
? `GetById('${args.options.groupId}')`
|
|
@@ -74,8 +82,8 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
74
82
|
requestUrl += `/users/removeByLoginName(@LoginName)?@LoginName='${formatting.encodeQueryParameter(loginName)}'`;
|
|
75
83
|
}
|
|
76
84
|
else {
|
|
77
|
-
const
|
|
78
|
-
requestUrl += `/users/RemoveById(${
|
|
85
|
+
const entraGroupId = await this.getGroupId(args);
|
|
86
|
+
requestUrl += `/users/RemoveById(${entraGroupId})`;
|
|
79
87
|
}
|
|
80
88
|
const requestOptions = {
|
|
81
89
|
url: requestUrl,
|
|
@@ -107,14 +115,14 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
|
|
|
107
115
|
const output = await cli.executeCommandWithOutput(SpoGroupMemberListCommand, { options: { ...options, _: [] } });
|
|
108
116
|
const getGroupMemberListOutput = JSON.parse(output.stdout);
|
|
109
117
|
let foundGroups;
|
|
110
|
-
if (args.options.
|
|
111
|
-
foundGroups = getGroupMemberListOutput.filter((x) => { return x.LoginName.indexOf(args.options.
|
|
118
|
+
if (args.options.entraGroupId) {
|
|
119
|
+
foundGroups = getGroupMemberListOutput.filter((x) => { return x.LoginName.indexOf(args.options.entraGroupId) > -1 && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
|
|
112
120
|
}
|
|
113
121
|
else {
|
|
114
|
-
foundGroups = getGroupMemberListOutput.filter((x) => { return x.Title === args.options.
|
|
122
|
+
foundGroups = getGroupMemberListOutput.filter((x) => { return x.Title === args.options.entraGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
|
|
115
123
|
}
|
|
116
124
|
if (foundGroups.length === 0) {
|
|
117
|
-
throw `The Azure AD group ${args.options.
|
|
125
|
+
throw `The Azure AD group ${args.options.entraGroupId || args.options.entraGroupName} is not found in SharePoint group ${args.options.groupId || args.options.groupName}`;
|
|
118
126
|
}
|
|
119
127
|
return foundGroups[0].Id;
|
|
120
128
|
}
|
|
@@ -127,8 +135,10 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
|
|
|
127
135
|
userName: (!(!args.options.userName)).toString(),
|
|
128
136
|
email: (!(!args.options.email)).toString(),
|
|
129
137
|
userId: (!(!args.options.userId)).toString(),
|
|
138
|
+
entraGroupId: (!(!args.options.entraGroupId)).toString(),
|
|
130
139
|
aadGroupId: (!(!args.options.groupId)).toString(),
|
|
131
|
-
|
|
140
|
+
entraGroupName: (!(!args.options.entraGroupName)).toString(),
|
|
141
|
+
aadGroupName: (!(!args.options.aadGroupName)).toString(),
|
|
132
142
|
force: (!(!args.options.force)).toString()
|
|
133
143
|
});
|
|
134
144
|
});
|
|
@@ -145,8 +155,12 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
|
|
|
145
155
|
option: '--email [email]'
|
|
146
156
|
}, {
|
|
147
157
|
option: '--userId [userId]'
|
|
158
|
+
}, {
|
|
159
|
+
option: '--entraGroupId [entraGroupId]'
|
|
148
160
|
}, {
|
|
149
161
|
option: '--aadGroupId [aadGroupId]'
|
|
162
|
+
}, {
|
|
163
|
+
option: '--entraGroupName [entraGroupName]'
|
|
150
164
|
}, {
|
|
151
165
|
option: '--aadGroupName [aadGroupName]'
|
|
152
166
|
}, {
|
|
@@ -166,13 +180,16 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
|
|
|
166
180
|
if (args.options.email && !validation.isValidUserPrincipalName(args.options.email)) {
|
|
167
181
|
return `${args.options.email} is not a valid email`;
|
|
168
182
|
}
|
|
183
|
+
if (args.options.entraGroupId && !validation.isValidGuid(args.options.entraGroupId)) {
|
|
184
|
+
return `${args.options.entraGroupId} is not a valid GUID`;
|
|
185
|
+
}
|
|
169
186
|
if (args.options.aadGroupId && !validation.isValidGuid(args.options.aadGroupId)) {
|
|
170
187
|
return `${args.options.aadGroupId} is not a valid GUID`;
|
|
171
188
|
}
|
|
172
189
|
return validation.isValidSharePointUrl(args.options.webUrl);
|
|
173
190
|
});
|
|
174
191
|
}, _SpoGroupMemberRemoveCommand_initOptionSets = function _SpoGroupMemberRemoveCommand_initOptionSets() {
|
|
175
|
-
this.optionSets.push({ options: ['groupName', 'groupId'] }, { options: ['userName', 'email', 'userId', 'aadGroupId', 'aadGroupName'] });
|
|
192
|
+
this.optionSets.push({ options: ['groupName', 'groupId'] }, { options: ['userName', 'email', 'userId', 'entraGroupId', 'aadGroupId', 'entraGroupName', 'aadGroupName'] });
|
|
176
193
|
};
|
|
177
194
|
export default new SpoGroupMemberRemoveCommand();
|
|
178
195
|
//# sourceMappingURL=group-member-remove.js.map
|
|
@@ -25,12 +25,16 @@ class SpoUserEnsureCommand extends SpoCommand {
|
|
|
25
25
|
__classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initOptionSets).call(this);
|
|
26
26
|
}
|
|
27
27
|
async commandAction(logger, args) {
|
|
28
|
+
if (args.options.aadId) {
|
|
29
|
+
args.options.entraId = args.options.aadId;
|
|
30
|
+
this.warn(logger, `Option 'aadId' is deprecated. Please use 'entraId' instead`);
|
|
31
|
+
}
|
|
28
32
|
if (this.verbose) {
|
|
29
|
-
await logger.logToStderr(`Ensuring user ${args.options.
|
|
33
|
+
await logger.logToStderr(`Ensuring user ${args.options.entraId || args.options.userName} at site ${args.options.webUrl}`);
|
|
30
34
|
}
|
|
31
35
|
try {
|
|
32
36
|
const requestBody = {
|
|
33
|
-
logonName: args.options.userName || await this.getUpnByUserId(args.options.
|
|
37
|
+
logonName: args.options.userName || await this.getUpnByUserId(args.options.entraId, logger)
|
|
34
38
|
};
|
|
35
39
|
const requestOptions = {
|
|
36
40
|
url: `${args.options.webUrl}/_api/web/ensureuser`,
|
|
@@ -47,16 +51,17 @@ class SpoUserEnsureCommand extends SpoCommand {
|
|
|
47
51
|
this.handleRejectedODataJsonPromise(err);
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
|
-
async getUpnByUserId(
|
|
54
|
+
async getUpnByUserId(entraId, logger) {
|
|
51
55
|
if (this.verbose) {
|
|
52
|
-
await logger.logToStderr(`Retrieving user principal name for user with id ${
|
|
56
|
+
await logger.logToStderr(`Retrieving user principal name for user with id ${entraId}`);
|
|
53
57
|
}
|
|
54
|
-
return await aadUser.getUpnByUserId(
|
|
58
|
+
return await aadUser.getUpnByUserId(entraId);
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
61
|
_SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelemetry = function _SpoUserEnsureCommand_initTelemetry() {
|
|
58
62
|
this.telemetry.push((args) => {
|
|
59
63
|
Object.assign(this.telemetryProperties, {
|
|
64
|
+
entraId: typeof args.options.entraId !== 'undefined',
|
|
60
65
|
aadId: typeof args.options.aadId !== 'undefined',
|
|
61
66
|
userName: typeof args.options.userName !== 'undefined'
|
|
62
67
|
});
|
|
@@ -64,6 +69,8 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
|
|
|
64
69
|
}, _SpoUserEnsureCommand_initOptions = function _SpoUserEnsureCommand_initOptions() {
|
|
65
70
|
this.options.unshift({
|
|
66
71
|
option: '-u, --webUrl <webUrl>'
|
|
72
|
+
}, {
|
|
73
|
+
option: '--entraId [entraId]'
|
|
67
74
|
}, {
|
|
68
75
|
option: '--aadId [aadId]'
|
|
69
76
|
}, {
|
|
@@ -75,6 +82,9 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
|
|
|
75
82
|
if (isValidSharePointUrl !== true) {
|
|
76
83
|
return isValidSharePointUrl;
|
|
77
84
|
}
|
|
85
|
+
if (args.options.entraId && !validation.isValidGuid(args.options.entraId)) {
|
|
86
|
+
return `${args.options.entraId} is not a valid GUID.`;
|
|
87
|
+
}
|
|
78
88
|
if (args.options.aadId && !validation.isValidGuid(args.options.aadId)) {
|
|
79
89
|
return `${args.options.aadId} is not a valid GUID.`;
|
|
80
90
|
}
|
|
@@ -84,7 +94,7 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
|
|
|
84
94
|
return true;
|
|
85
95
|
});
|
|
86
96
|
}, _SpoUserEnsureCommand_initOptionSets = function _SpoUserEnsureCommand_initOptionSets() {
|
|
87
|
-
this.optionSets.push({ options: ['aadId', 'userName'] });
|
|
97
|
+
this.optionSets.push({ options: ['entraId', 'aadId', 'userName'] });
|
|
88
98
|
};
|
|
89
99
|
export default new SpoUserEnsureCommand();
|
|
90
100
|
//# sourceMappingURL=user-ensure.js.map
|
|
@@ -4,6 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
6
|
var _TeamsUserAppAddCommand_instances, _TeamsUserAppAddCommand_initTelemetry, _TeamsUserAppAddCommand_initOptions, _TeamsUserAppAddCommand_initValidators, _TeamsUserAppAddCommand_initOptionSets;
|
|
7
|
+
import { cli } from '../../../../cli/cli.js';
|
|
7
8
|
import request from '../../../../request.js';
|
|
8
9
|
import { formatting } from '../../../../utils/formatting.js';
|
|
9
10
|
import { validation } from '../../../../utils/validation.js';
|
|
@@ -25,8 +26,12 @@ class TeamsUserAppAddCommand extends GraphCommand {
|
|
|
25
26
|
__classPrivateFieldGet(this, _TeamsUserAppAddCommand_instances, "m", _TeamsUserAppAddCommand_initOptionSets).call(this);
|
|
26
27
|
}
|
|
27
28
|
async commandAction(logger, args) {
|
|
29
|
+
const appId = await this.getAppId(args);
|
|
28
30
|
const userId = (args.options.userId ?? args.options.userName);
|
|
29
31
|
const endpoint = `${this.resource}/v1.0`;
|
|
32
|
+
if (this.verbose) {
|
|
33
|
+
await logger.logToStderr(`Removing app with ID ${appId} for user ${args.options.userId}`);
|
|
34
|
+
}
|
|
30
35
|
const requestOptions = {
|
|
31
36
|
url: `${endpoint}/users/${formatting.encodeQueryParameter(userId)}/teamwork/installedApps`,
|
|
32
37
|
headers: {
|
|
@@ -35,7 +40,7 @@ class TeamsUserAppAddCommand extends GraphCommand {
|
|
|
35
40
|
},
|
|
36
41
|
responseType: 'json',
|
|
37
42
|
data: {
|
|
38
|
-
'teamsApp@odata.bind': `${endpoint}/appCatalogs/teamsApps/${
|
|
43
|
+
'teamsApp@odata.bind': `${endpoint}/appCatalogs/teamsApps/${appId}`
|
|
39
44
|
}
|
|
40
45
|
};
|
|
41
46
|
try {
|
|
@@ -45,17 +50,43 @@ class TeamsUserAppAddCommand extends GraphCommand {
|
|
|
45
50
|
this.handleRejectedODataJsonPromise(err);
|
|
46
51
|
}
|
|
47
52
|
}
|
|
53
|
+
async getAppId(args) {
|
|
54
|
+
if (args.options.id) {
|
|
55
|
+
return args.options.id;
|
|
56
|
+
}
|
|
57
|
+
const requestOptions = {
|
|
58
|
+
url: `${this.resource}/v1.0/appCatalogs/teamsApps?$filter=displayName eq '${formatting.encodeQueryParameter(args.options.name)}'`,
|
|
59
|
+
headers: {
|
|
60
|
+
accept: 'application/json;odata.metadata=none'
|
|
61
|
+
},
|
|
62
|
+
responseType: 'json'
|
|
63
|
+
};
|
|
64
|
+
const response = await request.get(requestOptions);
|
|
65
|
+
if (response.value.length === 1) {
|
|
66
|
+
return response.value[0].id;
|
|
67
|
+
}
|
|
68
|
+
if (response.value.length === 0) {
|
|
69
|
+
throw `The specified Teams app does not exist`;
|
|
70
|
+
}
|
|
71
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', response.value);
|
|
72
|
+
const result = (await cli.handleMultipleResultsFound(`Multiple Teams apps with name '${args.options.name}' found.`, resultAsKeyValuePair));
|
|
73
|
+
return result.id;
|
|
74
|
+
}
|
|
48
75
|
}
|
|
49
76
|
_TeamsUserAppAddCommand_instances = new WeakSet(), _TeamsUserAppAddCommand_initTelemetry = function _TeamsUserAppAddCommand_initTelemetry() {
|
|
50
77
|
this.telemetry.push((args) => {
|
|
51
78
|
Object.assign(this.telemetryProperties, {
|
|
79
|
+
id: typeof args.options.id !== 'undefined',
|
|
80
|
+
name: typeof args.options.name !== 'undefined',
|
|
52
81
|
userId: typeof args.options.userId !== 'undefined',
|
|
53
82
|
userName: typeof args.options.userName !== 'undefined'
|
|
54
83
|
});
|
|
55
84
|
});
|
|
56
85
|
}, _TeamsUserAppAddCommand_initOptions = function _TeamsUserAppAddCommand_initOptions() {
|
|
57
86
|
this.options.unshift({
|
|
58
|
-
option: '--id
|
|
87
|
+
option: '--id [id]'
|
|
88
|
+
}, {
|
|
89
|
+
option: '--name [name]'
|
|
59
90
|
}, {
|
|
60
91
|
option: '--userId [userId]'
|
|
61
92
|
}, {
|
|
@@ -63,7 +94,7 @@ _TeamsUserAppAddCommand_instances = new WeakSet(), _TeamsUserAppAddCommand_initT
|
|
|
63
94
|
});
|
|
64
95
|
}, _TeamsUserAppAddCommand_initValidators = function _TeamsUserAppAddCommand_initValidators() {
|
|
65
96
|
this.validators.push(async (args) => {
|
|
66
|
-
if (!validation.isValidGuid(args.options.id)) {
|
|
97
|
+
if (args.options.id && !validation.isValidGuid(args.options.id)) {
|
|
67
98
|
return `${args.options.id} is not a valid GUID`;
|
|
68
99
|
}
|
|
69
100
|
if (args.options.userId && !validation.isValidGuid(args.options.userId)) {
|
|
@@ -75,6 +106,7 @@ _TeamsUserAppAddCommand_instances = new WeakSet(), _TeamsUserAppAddCommand_initT
|
|
|
75
106
|
return true;
|
|
76
107
|
});
|
|
77
108
|
}, _TeamsUserAppAddCommand_initOptionSets = function _TeamsUserAppAddCommand_initOptionSets() {
|
|
109
|
+
this.optionSets.push({ options: ['id', 'name'] });
|
|
78
110
|
this.optionSets.push({ options: ['userId', 'userName'] });
|
|
79
111
|
};
|
|
80
112
|
export default new TeamsUserAppAddCommand();
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import Global from '/docs/cmd/_global.mdx';
|
|
2
|
+
|
|
3
|
+
# external connection urltoitemresolver add
|
|
4
|
+
|
|
5
|
+
Adds a URL to item resolver to an external connection
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
m365 external connection urltoitemresolver add [options]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Options
|
|
14
|
+
|
|
15
|
+
```md definition-list
|
|
16
|
+
`-c, --externalConnectionId <externalConnectionId>`
|
|
17
|
+
: The ID of the external connection to which to add the resolver
|
|
18
|
+
|
|
19
|
+
`--baseUrls <baseUrls>`
|
|
20
|
+
: Comma-separated list of base URLs
|
|
21
|
+
|
|
22
|
+
`--urlPattern <urlPattern>`
|
|
23
|
+
: Regex pattern to match URLs
|
|
24
|
+
|
|
25
|
+
`-i, --itemId <itemId>`
|
|
26
|
+
: Pattern that matches captured matches from the URL with the external item ID
|
|
27
|
+
|
|
28
|
+
`-p, --priority <priority>`
|
|
29
|
+
: Integer that defines the resolution order
|
|
30
|
+
```
|
|
31
|
+
<Global />
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
Adds a URL to item resolver to an existing connection
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
m365 external connection urltoitemresolver add --externalConnectionId "samplesolutiongallery" --baseUrls "https://adoption.microsoft.com" --urlPattern "/sample-solution-gallery/sample/(?<sampleId>[^/]+)" --itemId "{sampleId}" --priority 1
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Response
|
|
42
|
+
|
|
43
|
+
The command won't return a response on success.
|
|
44
|
+
|
|
45
|
+
## More information
|
|
46
|
+
|
|
47
|
+
- Microsoft Graph external connection activitySettings: [https://learn.microsoft.com/graph/api/resources/externalconnectors-activitysettings?view=graph-rest-1.0](https://learn.microsoft.com/graph/api/resources/externalconnectors-activitysettings?view=graph-rest-1.0)
|