@pnp/cli-microsoft365 10.0.0-beta.58f28f9 → 10.0.0-beta.67e608f

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.
Files changed (208) hide show
  1. package/allCommands.json +1 -1
  2. package/allCommandsFull.json +1 -1
  3. package/dist/m365/commands/login.js +122 -69
  4. package/dist/m365/commands/setup.js +1 -1
  5. package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +0 -5
  6. package/dist/m365/entra/commands/administrativeunit/administrativeunit-get.js +0 -5
  7. package/dist/m365/entra/commands/administrativeunit/administrativeunit-list.js +0 -5
  8. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-add.js +0 -5
  9. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-get.js +0 -5
  10. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-list.js +0 -5
  11. package/dist/m365/entra/commands/administrativeunit/administrativeunit-remove.js +0 -5
  12. package/dist/m365/entra/commands/app/app-add.js +0 -5
  13. package/dist/m365/entra/commands/app/app-get.js +0 -5
  14. package/dist/m365/entra/commands/app/app-list.js +0 -5
  15. package/dist/m365/entra/commands/app/app-permission-add.js +0 -5
  16. package/dist/m365/entra/commands/app/app-remove.js +0 -5
  17. package/dist/m365/entra/commands/app/app-role-add.js +0 -5
  18. package/dist/m365/entra/commands/app/app-role-list.js +0 -5
  19. package/dist/m365/entra/commands/app/app-role-remove.js +0 -5
  20. package/dist/m365/entra/commands/app/app-set.js +0 -5
  21. package/dist/m365/entra/commands/approleassignment/approleassignment-add.js +0 -5
  22. package/dist/m365/entra/commands/approleassignment/approleassignment-list.js +0 -5
  23. package/dist/m365/entra/commands/approleassignment/approleassignment-remove.js +0 -5
  24. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-add.js +0 -5
  25. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-get.js +0 -5
  26. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-list.js +0 -5
  27. package/dist/m365/entra/commands/group/group-add.js +0 -4
  28. package/dist/m365/entra/commands/group/group-get.js +0 -5
  29. package/dist/m365/entra/commands/group/group-list.js +0 -5
  30. package/dist/m365/entra/commands/group/{group-user-add.js → group-member-add.js} +18 -18
  31. package/dist/m365/entra/commands/group/{group-user-list.js → group-member-list.js} +16 -21
  32. package/dist/m365/entra/commands/group/{group-user-set.js → group-member-set.js} +19 -19
  33. package/dist/m365/entra/commands/group/group-remove.js +0 -5
  34. package/dist/m365/entra/commands/groupsetting/groupsetting-add.js +0 -5
  35. package/dist/m365/entra/commands/groupsetting/groupsetting-get.js +0 -5
  36. package/dist/m365/entra/commands/groupsetting/groupsetting-list.js +0 -5
  37. package/dist/m365/entra/commands/groupsetting/groupsetting-remove.js +0 -5
  38. package/dist/m365/entra/commands/groupsetting/groupsetting-set.js +0 -5
  39. package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-get.js +0 -5
  40. package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-list.js +0 -5
  41. package/dist/m365/entra/commands/license/license-list.js +0 -5
  42. package/dist/m365/entra/commands/m365group/m365group-add.js +0 -5
  43. package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +0 -5
  44. package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +0 -5
  45. package/dist/m365/entra/commands/m365group/m365group-get.js +0 -5
  46. package/dist/m365/entra/commands/m365group/m365group-list.js +0 -5
  47. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-clear.js +0 -5
  48. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-list.js +0 -5
  49. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-remove.js +0 -5
  50. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-restore.js +0 -5
  51. package/dist/m365/entra/commands/m365group/m365group-remove.js +0 -5
  52. package/dist/m365/entra/commands/m365group/m365group-renew.js +0 -5
  53. package/dist/m365/entra/commands/m365group/m365group-report-activitycounts.js +0 -4
  54. package/dist/m365/entra/commands/m365group/m365group-report-activitydetail.js +0 -4
  55. package/dist/m365/entra/commands/m365group/m365group-report-activityfilecounts.js +0 -4
  56. package/dist/m365/entra/commands/m365group/m365group-report-activitygroupcounts.js +0 -4
  57. package/dist/m365/entra/commands/m365group/m365group-report-activitystorage.js +0 -4
  58. package/dist/m365/entra/commands/m365group/m365group-set.js +138 -73
  59. package/dist/m365/entra/commands/m365group/m365group-teamify.js +0 -5
  60. package/dist/m365/entra/commands/m365group/m365group-user-add.js +0 -6
  61. package/dist/m365/entra/commands/m365group/m365group-user-list.js +0 -5
  62. package/dist/m365/entra/commands/m365group/m365group-user-remove.js +93 -62
  63. package/dist/m365/entra/commands/m365group/m365group-user-set.js +3 -15
  64. package/dist/m365/entra/commands/oauth2grant/oauth2grant-add.js +0 -5
  65. package/dist/m365/entra/commands/oauth2grant/oauth2grant-list.js +0 -5
  66. package/dist/m365/entra/commands/oauth2grant/oauth2grant-remove.js +0 -5
  67. package/dist/m365/entra/commands/oauth2grant/oauth2grant-set.js +0 -5
  68. package/dist/m365/entra/commands/policy/policy-list.js +0 -5
  69. package/dist/m365/entra/commands/siteclassification/siteclassification-disable.js +0 -5
  70. package/dist/m365/entra/commands/siteclassification/siteclassification-enable.js +0 -5
  71. package/dist/m365/entra/commands/siteclassification/siteclassification-get.js +0 -5
  72. package/dist/m365/entra/commands/siteclassification/siteclassification-set.js +0 -5
  73. package/dist/m365/entra/commands/user/user-add.js +0 -5
  74. package/dist/m365/entra/commands/user/user-get.js +0 -5
  75. package/dist/m365/entra/commands/user/user-guest-add.js +0 -5
  76. package/dist/m365/entra/commands/user/user-hibp.js +0 -5
  77. package/dist/m365/entra/commands/user/user-license-add.js +0 -5
  78. package/dist/m365/entra/commands/user/user-license-list.js +0 -5
  79. package/dist/m365/entra/commands/user/user-license-remove.js +0 -5
  80. package/dist/m365/entra/commands/user/user-list.js +0 -5
  81. package/dist/m365/entra/commands/user/user-password-validate.js +0 -5
  82. package/dist/m365/entra/commands/user/user-recyclebinitem-clear.js +0 -5
  83. package/dist/m365/entra/commands/user/user-recyclebinitem-list.js +0 -5
  84. package/dist/m365/entra/commands/user/user-recyclebinitem-remove.js +0 -5
  85. package/dist/m365/entra/commands/user/user-recyclebinitem-restore.js +0 -5
  86. package/dist/m365/entra/commands/user/user-registrationdetails-list.js +0 -4
  87. package/dist/m365/entra/commands/user/user-remove.js +0 -5
  88. package/dist/m365/entra/commands/user/user-set.js +0 -5
  89. package/dist/m365/entra/commands/user/user-signin-list.js +0 -5
  90. package/dist/m365/entra/commands.js +3 -3
  91. package/dist/m365/spfx/commands/project/project-doctor/{doctor-1.20.0-rc.1.js → doctor-1.20.0.js} +4 -2
  92. package/dist/m365/spfx/commands/project/project-doctor/rules/FN002021_DEVDEP_rushstack_eslint_config.js +10 -0
  93. package/dist/m365/spfx/commands/project/project-doctor.js +1 -1
  94. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.20.0-rc.1.js → upgrade-1.20.0.js} +28 -26
  95. package/dist/m365/spfx/commands/project/project-upgrade.js +13 -15
  96. package/dist/m365/spfx/commands/spfx-doctor.js +1 -1
  97. package/dist/m365/spo/commands/file/file-copy.js +6 -6
  98. package/dist/m365/spo/commands/file/file-move.js +6 -6
  99. package/dist/m365/spo/commands/folder/folder-move.js +43 -35
  100. package/dist/m365/spo/commands/group/group-member-add.js +3 -23
  101. package/dist/m365/spo/commands/group/group-member-remove.js +1 -18
  102. package/dist/m365/spo/commands/page/page-remove.js +37 -16
  103. package/dist/m365/spo/commands/site/site-sharingpermission-set.js +68 -0
  104. package/dist/m365/spo/commands/user/user-ensure.js +1 -11
  105. package/dist/m365/spo/commands.js +1 -0
  106. package/dist/utils/spo.js +62 -21
  107. package/dist/utils/timersUtil.js +2 -1
  108. package/dist/utils/urlUtil.js +8 -0
  109. package/dist/utils/zod.js +11 -2
  110. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-add.mdx +0 -6
  111. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-get.mdx +0 -6
  112. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-list.mdx +0 -6
  113. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-add.mdx +0 -6
  114. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-get.mdx +0 -6
  115. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-list.mdx +0 -6
  116. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-remove.mdx +0 -6
  117. package/docs/docs/cmd/entra/app/app-add.mdx +0 -1
  118. package/docs/docs/cmd/entra/app/app-get.mdx +0 -1
  119. package/docs/docs/cmd/entra/app/app-list.mdx +0 -1
  120. package/docs/docs/cmd/entra/app/app-permission-add.mdx +0 -1
  121. package/docs/docs/cmd/entra/app/app-permission-list.mdx +0 -6
  122. package/docs/docs/cmd/entra/app/app-remove.mdx +0 -1
  123. package/docs/docs/cmd/entra/app/app-role-add.mdx +0 -1
  124. package/docs/docs/cmd/entra/app/app-role-list.mdx +0 -1
  125. package/docs/docs/cmd/entra/app/app-role-remove.mdx +0 -1
  126. package/docs/docs/cmd/entra/app/app-set.mdx +0 -1
  127. package/docs/docs/cmd/entra/approleassignment/approleassignment-add.mdx +0 -6
  128. package/docs/docs/cmd/entra/approleassignment/approleassignment-list.mdx +0 -6
  129. package/docs/docs/cmd/entra/approleassignment/approleassignment-remove.mdx +0 -6
  130. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-add.mdx +0 -1
  131. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-get.mdx +0 -1
  132. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-list.mdx +0 -1
  133. package/docs/docs/cmd/entra/group/group-add.mdx +0 -6
  134. package/docs/docs/cmd/entra/group/group-get.mdx +0 -6
  135. package/docs/docs/cmd/entra/group/group-list.mdx +0 -6
  136. package/docs/docs/cmd/entra/group/group-member-add.mdx +62 -0
  137. package/docs/docs/cmd/entra/group/{group-user-list.mdx → group-member-list.mdx} +14 -20
  138. package/docs/docs/cmd/entra/group/group-member-set.mdx +62 -0
  139. package/docs/docs/cmd/entra/group/group-remove.mdx +0 -6
  140. package/docs/docs/cmd/entra/groupsetting/groupsetting-add.mdx +0 -6
  141. package/docs/docs/cmd/entra/groupsetting/groupsetting-get.mdx +0 -6
  142. package/docs/docs/cmd/entra/groupsetting/groupsetting-list.mdx +0 -6
  143. package/docs/docs/cmd/entra/groupsetting/groupsetting-remove.mdx +0 -6
  144. package/docs/docs/cmd/entra/groupsetting/groupsetting-set.mdx +0 -6
  145. package/docs/docs/cmd/entra/groupsettingtemplate/groupsettingtemplate-get.mdx +0 -6
  146. package/docs/docs/cmd/entra/groupsettingtemplate/groupsettingtemplate-list.mdx +0 -6
  147. package/docs/docs/cmd/entra/license/license-list.mdx +0 -6
  148. package/docs/docs/cmd/entra/m365group/m365group-add.mdx +0 -6
  149. package/docs/docs/cmd/entra/m365group/m365group-conversation-list.mdx +0 -6
  150. package/docs/docs/cmd/entra/m365group/m365group-conversation-post-list.mdx +0 -6
  151. package/docs/docs/cmd/entra/m365group/m365group-get.mdx +0 -6
  152. package/docs/docs/cmd/entra/m365group/m365group-list.mdx +0 -6
  153. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-clear.mdx +0 -6
  154. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-list.mdx +0 -6
  155. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-remove.mdx +0 -6
  156. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-restore.mdx +0 -6
  157. package/docs/docs/cmd/entra/m365group/m365group-remove.mdx +0 -6
  158. package/docs/docs/cmd/entra/m365group/m365group-renew.mdx +0 -6
  159. package/docs/docs/cmd/entra/m365group/m365group-report-activitycounts.mdx +0 -6
  160. package/docs/docs/cmd/entra/m365group/m365group-report-activitydetail.mdx +0 -6
  161. package/docs/docs/cmd/entra/m365group/m365group-report-activityfilecounts.mdx +0 -6
  162. package/docs/docs/cmd/entra/m365group/m365group-report-activitygroupcounts.mdx +2 -8
  163. package/docs/docs/cmd/entra/m365group/m365group-report-activitystorage.mdx +2 -8
  164. package/docs/docs/cmd/entra/m365group/m365group-set.mdx +34 -22
  165. package/docs/docs/cmd/entra/m365group/m365group-teamify.mdx +5 -11
  166. package/docs/docs/cmd/entra/m365group/m365group-user-add.mdx +5 -11
  167. package/docs/docs/cmd/entra/m365group/m365group-user-list.mdx +0 -12
  168. package/docs/docs/cmd/entra/m365group/m365group-user-remove.mdx +29 -21
  169. package/docs/docs/cmd/entra/m365group/m365group-user-set.mdx +4 -17
  170. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +3 -9
  171. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -7
  172. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-remove.mdx +4 -10
  173. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-set.mdx +3 -9
  174. package/docs/docs/cmd/entra/policy/policy-list.mdx +3 -9
  175. package/docs/docs/cmd/entra/siteclassification/siteclassification-disable.mdx +3 -9
  176. package/docs/docs/cmd/entra/siteclassification/siteclassification-enable.mdx +7 -13
  177. package/docs/docs/cmd/entra/siteclassification/siteclassification-get.mdx +1 -7
  178. package/docs/docs/cmd/entra/siteclassification/siteclassification-set.mdx +8 -14
  179. package/docs/docs/cmd/entra/user/user-add.mdx +4 -10
  180. package/docs/docs/cmd/entra/user/user-get.mdx +7 -13
  181. package/docs/docs/cmd/entra/user/user-guest-add.mdx +3 -9
  182. package/docs/docs/cmd/entra/user/user-hibp.mdx +2 -8
  183. package/docs/docs/cmd/entra/user/user-license-add.mdx +0 -6
  184. package/docs/docs/cmd/entra/user/user-license-list.mdx +0 -6
  185. package/docs/docs/cmd/entra/user/user-license-remove.mdx +2 -8
  186. package/docs/docs/cmd/entra/user/user-list.mdx +1 -7
  187. package/docs/docs/cmd/entra/user/user-password-validate.mdx +1 -7
  188. package/docs/docs/cmd/entra/user/user-recyclebinitem-clear.mdx +2 -8
  189. package/docs/docs/cmd/entra/user/user-recyclebinitem-list.mdx +0 -6
  190. package/docs/docs/cmd/entra/user/user-recyclebinitem-remove.mdx +2 -8
  191. package/docs/docs/cmd/entra/user/user-recyclebinitem-restore.mdx +0 -6
  192. package/docs/docs/cmd/entra/user/user-registrationdetails-list.mdx +7 -13
  193. package/docs/docs/cmd/entra/user/user-remove.mdx +2 -8
  194. package/docs/docs/cmd/entra/user/user-set.mdx +0 -6
  195. package/docs/docs/cmd/entra/user/user-signin-list.mdx +9 -15
  196. package/docs/docs/cmd/login.mdx +9 -0
  197. package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -1
  198. package/docs/docs/cmd/spo/file/file-move.mdx +1 -3
  199. package/docs/docs/cmd/spo/folder/folder-move.mdx +84 -13
  200. package/docs/docs/cmd/spo/group/group-member-add.mdx +8 -14
  201. package/docs/docs/cmd/spo/group/group-member-remove.mdx +5 -11
  202. package/docs/docs/cmd/spo/page/page-remove.mdx +30 -12
  203. package/docs/docs/cmd/spo/site/site-sharingpermission-set.mdx +58 -0
  204. package/docs/docs/cmd/spo/user/user-ensure.mdx +2 -5
  205. package/package.json +1 -1
  206. package/dist/m365/entra/aadCommands.js +0 -89
  207. package/docs/docs/cmd/entra/group/group-user-add.mdx +0 -62
  208. package/docs/docs/cmd/entra/group/group-user-set.mdx +0 -62
@@ -12,9 +12,11 @@ import { validation } from '../../../../utils/validation.js';
12
12
  import GraphCommand from '../../../base/GraphCommand.js';
13
13
  import commands from '../../commands.js';
14
14
  import { entraGroup } from '../../../../utils/entraGroup.js';
15
- import aadCommands from '../../aadCommands.js';
16
15
  import { accessToken } from '../../../../utils/accessToken.js';
17
16
  import auth from '../../../../Auth.js';
17
+ import { entraUser } from '../../../../utils/entraUser.js';
18
+ import { formatting } from '../../../../utils/formatting.js';
19
+ import { odata } from '../../../../utils/odata.js';
18
20
  class EntraM365GroupSetCommand extends GraphCommand {
19
21
  get name() {
20
22
  return commands.M365GROUP_SET;
@@ -22,9 +24,6 @@ class EntraM365GroupSetCommand extends GraphCommand {
22
24
  get description() {
23
25
  return 'Updates Microsoft 365 Group properties';
24
26
  }
25
- alias() {
26
- return [aadCommands.M365GROUP_SET];
27
- }
28
27
  constructor() {
29
28
  super();
30
29
  _EntraM365GroupSetCommand_instances.add(this);
@@ -36,7 +35,6 @@ class EntraM365GroupSetCommand extends GraphCommand {
36
35
  __classPrivateFieldGet(this, _EntraM365GroupSetCommand_instances, "m", _EntraM365GroupSetCommand_initTypes).call(this);
37
36
  }
38
37
  async commandAction(logger, args) {
39
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_SET, commands.M365GROUP_SET);
40
38
  try {
41
39
  if ((args.options.allowExternalSenders !== undefined || args.options.autoSubscribeNewMembers !== undefined) && accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[auth.defaultResource].accessToken)) {
42
40
  throw `Option 'allowExternalSenders' and 'autoSubscribeNewMembers' can only be used when using delegated permissions.`;
@@ -102,59 +100,13 @@ class EntraM365GroupSetCommand extends GraphCommand {
102
100
  else if (this.debug) {
103
101
  await logger.logToStderr('logoPath not set. Skipping');
104
102
  }
105
- if (args.options.owners) {
106
- const owners = args.options.owners.split(',').map(o => o.trim());
107
- if (this.verbose) {
108
- await logger.logToStderr('Retrieving user information to set group owners...');
109
- }
110
- const requestOptions = {
111
- url: `${this.resource}/v1.0/users?$filter=${owners.map(o => `userPrincipalName eq '${o}'`).join(' or ')}&$select=id`,
112
- headers: {
113
- 'content-type': 'application/json'
114
- },
115
- responseType: 'json'
116
- };
117
- const res = await request.get(requestOptions);
118
- await Promise.all(res.value.map(u => request.post({
119
- url: `${this.resource}/v1.0/groups/${groupId}/owners/$ref`,
120
- headers: {
121
- 'content-type': 'application/json'
122
- },
123
- responseType: 'json',
124
- data: {
125
- "@odata.id": `https://graph.microsoft.com/v1.0/users/${u.id}`
126
- }
127
- })));
128
- }
129
- else if (this.debug) {
130
- await logger.logToStderr('Owners not set. Skipping');
131
- }
132
- if (args.options.members) {
133
- const members = args.options.members.split(',').map(o => o.trim());
134
- if (this.verbose) {
135
- await logger.logToStderr('Retrieving user information to set group members...');
136
- }
137
- const requestOptions = {
138
- url: `${this.resource}/v1.0/users?$filter=${members.map(o => `userPrincipalName eq '${o}'`).join(' or ')}&$select=id`,
139
- headers: {
140
- 'content-type': 'application/json'
141
- },
142
- responseType: 'json'
143
- };
144
- const res = await request.get(requestOptions);
145
- await Promise.all(res.value.map(u => request.post({
146
- url: `${this.resource}/v1.0/groups/${groupId}/members/$ref`,
147
- headers: {
148
- 'content-type': 'application/json'
149
- },
150
- responseType: 'json',
151
- data: {
152
- "@odata.id": `https://graph.microsoft.com/v1.0/users/${u.id}`
153
- }
154
- })));
103
+ const ownerIds = await this.getUserIds(logger, args.options.ownerIds, args.options.ownerUserNames);
104
+ const memberIds = await this.getUserIds(logger, args.options.memberIds, args.options.memberUserNames);
105
+ if (ownerIds.length > 0) {
106
+ await this.updateUsers(logger, groupId, 'owners', ownerIds);
155
107
  }
156
- else if (this.debug) {
157
- await logger.logToStderr('Members not set. Skipping');
108
+ if (memberIds.length > 0) {
109
+ await this.updateUsers(logger, groupId, 'members', memberIds);
158
110
  }
159
111
  }
160
112
  catch (err) {
@@ -186,6 +138,87 @@ class EntraM365GroupSetCommand extends GraphCommand {
186
138
  return 'image/jpeg';
187
139
  }
188
140
  }
141
+ async getUserIds(logger, userIds, userNames) {
142
+ if (userIds) {
143
+ return formatting.splitAndTrim(userIds);
144
+ }
145
+ if (userNames) {
146
+ if (this.verbose) {
147
+ await logger.logToStderr(`Retrieving user IDs...`);
148
+ }
149
+ return entraUser.getUserIdsByUpns(formatting.splitAndTrim(userNames));
150
+ }
151
+ return [];
152
+ }
153
+ async updateUsers(logger, groupId, role, userIds) {
154
+ const groupUsers = await odata.getAllItems(`${this.resource}/v1.0/groups/${groupId}/${role}/microsoft.graph.user?$select=id`);
155
+ const userIdsToAdd = userIds.filter(userId => !groupUsers.some(groupUser => groupUser.id === userId));
156
+ const userIdsToRemove = groupUsers.filter(groupUser => !userIds.some(userId => groupUser.id === userId)).map(user => user.id);
157
+ if (this.verbose) {
158
+ await logger.logToStderr(`Adding ${userIdsToAdd.length} ${role}...`);
159
+ }
160
+ for (let i = 0; i < userIdsToAdd.length; i += 400) {
161
+ const userIdsBatch = userIdsToAdd.slice(i, i + 400);
162
+ const batchRequestOptions = this.getBatchRequestOptions();
163
+ // only 20 requests per one batch are allowed
164
+ for (let j = 0; j < userIdsBatch.length; j += 20) {
165
+ // only 20 users can be added in one request
166
+ const userIdsChunk = userIdsBatch.slice(j, j + 20);
167
+ batchRequestOptions.data.requests.push({
168
+ id: j + 1,
169
+ method: 'PATCH',
170
+ url: `/groups/${groupId}`,
171
+ headers: {
172
+ 'content-type': 'application/json;odata.metadata=none',
173
+ accept: 'application/json;odata.metadata=none'
174
+ },
175
+ body: {
176
+ [`${role}@odata.bind`]: userIdsChunk.map(u => `${this.resource}/v1.0/directoryObjects/${u}`)
177
+ }
178
+ });
179
+ }
180
+ const res = await request.post(batchRequestOptions);
181
+ for (const response of res.responses) {
182
+ if (response.status !== 204) {
183
+ throw response.body;
184
+ }
185
+ }
186
+ }
187
+ if (this.verbose) {
188
+ await logger.logToStderr(`Removing ${userIdsToRemove.length} ${role}...`);
189
+ }
190
+ for (let i = 0; i < userIdsToRemove.length; i += 20) {
191
+ const userIdsBatch = userIdsToRemove.slice(i, i + 20);
192
+ const batchRequestOptions = this.getBatchRequestOptions();
193
+ userIdsBatch.map(userId => {
194
+ batchRequestOptions.data.requests.push({
195
+ id: userId,
196
+ method: 'DELETE',
197
+ url: `/groups/${groupId}/${role}/${userId}/$ref`
198
+ });
199
+ });
200
+ const res = await request.post(batchRequestOptions);
201
+ for (const response of res.responses) {
202
+ if (response.status !== 204) {
203
+ throw response.body;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ getBatchRequestOptions() {
209
+ const requestOptions = {
210
+ url: `${this.resource}/v1.0/$batch`,
211
+ headers: {
212
+ 'content-type': 'application/json;odata.metadata=none',
213
+ accept: 'application/json;odata.metadata=none'
214
+ },
215
+ responseType: 'json',
216
+ data: {
217
+ requests: []
218
+ }
219
+ };
220
+ return requestOptions;
221
+ }
189
222
  }
190
223
  _EntraM365GroupSetCommand_instances = new WeakSet(), _EntraM365GroupSetCommand_initTelemetry = function _EntraM365GroupSetCommand_initTelemetry() {
191
224
  this.telemetry.push((args) => {
@@ -194,8 +227,10 @@ _EntraM365GroupSetCommand_instances = new WeakSet(), _EntraM365GroupSetCommand_i
194
227
  displayName: typeof args.options.displayName !== 'undefined',
195
228
  newDisplayName: typeof args.options.newDisplayName !== 'undefined',
196
229
  description: typeof args.options.description !== 'undefined',
197
- owners: typeof args.options.owners !== 'undefined',
198
- members: typeof args.options.members !== 'undefined',
230
+ ownerIds: typeof args.options.ownerIds !== 'undefined',
231
+ ownerUserNames: typeof args.options.ownerUserNames !== 'undefined',
232
+ memberIds: typeof args.options.memberIds !== 'undefined',
233
+ memberUserNames: typeof args.options.memberUserNames !== 'undefined',
199
234
  isPrivate: !!args.options.isPrivate,
200
235
  logoPath: typeof args.options.logoPath !== 'undefined',
201
236
  allowExternalSenders: !!args.options.allowExternalSenders,
@@ -214,9 +249,13 @@ _EntraM365GroupSetCommand_instances = new WeakSet(), _EntraM365GroupSetCommand_i
214
249
  }, {
215
250
  option: '-d, --description [description]'
216
251
  }, {
217
- option: '--owners [owners]'
252
+ option: '--ownerIds [ownerIds]'
218
253
  }, {
219
- option: '--members [members]'
254
+ option: '--ownerUserNames [ownerUserNames]'
255
+ }, {
256
+ option: '--memberIds [memberIds]'
257
+ }, {
258
+ option: '--memberUserNames [memberUserNames]'
220
259
  }, {
221
260
  option: '--isPrivate [isPrivate]',
222
261
  autocomplete: ['true', 'false']
@@ -237,17 +276,31 @@ _EntraM365GroupSetCommand_instances = new WeakSet(), _EntraM365GroupSetCommand_i
237
276
  });
238
277
  }, _EntraM365GroupSetCommand_initOptionSets = function _EntraM365GroupSetCommand_initOptionSets() {
239
278
  this.optionSets.push({ options: ['id', 'displayName'] });
279
+ this.optionSets.push({
280
+ options: ['ownerIds', 'ownerUserNames'],
281
+ runsWhen: (args) => {
282
+ return args.options.ownerIds !== undefined || args.options.ownerUserNames !== undefined;
283
+ }
284
+ });
285
+ this.optionSets.push({
286
+ options: ['memberIds', 'memberUserNames'],
287
+ runsWhen: (args) => {
288
+ return args.options.memberIds !== undefined || args.options.memberUserNames !== undefined;
289
+ }
290
+ });
240
291
  }, _EntraM365GroupSetCommand_initTypes = function _EntraM365GroupSetCommand_initTypes() {
241
292
  this.types.boolean.push('isPrivate', 'allowEternalSenders', 'autoSubscribeNewMembers', 'hideFromAddressLists', 'hideFromOutlookClients');
242
- this.types.string.push('id', 'displayName', 'newDisplayName', 'description', 'owners', 'members', 'logoPath');
293
+ this.types.string.push('id', 'displayName', 'newDisplayName', 'description', 'ownerIds', 'ownerUserNames', 'memberIds', 'memberUserNames', 'logoPath');
243
294
  }, _EntraM365GroupSetCommand_initValidators = function _EntraM365GroupSetCommand_initValidators() {
244
295
  this.validators.push(async (args) => {
245
296
  if (!args.options.newDisplayName &&
246
297
  args.options.description === undefined &&
247
- !args.options.members &&
248
- !args.options.owners &&
298
+ args.options.ownerIds === undefined &&
299
+ args.options.ownerUserNames === undefined &&
300
+ args.options.memberIds === undefined &&
301
+ args.options.memberUserNames === undefined &&
249
302
  args.options.isPrivate === undefined &&
250
- !args.options.logoPath &&
303
+ args.options.logoPath === undefined &&
251
304
  args.options.allowExternalSenders === undefined &&
252
305
  args.options.autoSubscribeNewMembers === undefined &&
253
306
  args.options.hideFromAddressLists === undefined &&
@@ -257,16 +310,28 @@ _EntraM365GroupSetCommand_instances = new WeakSet(), _EntraM365GroupSetCommand_i
257
310
  if (args.options.id && !validation.isValidGuid(args.options.id)) {
258
311
  return `${args.options.id} is not a valid GUID`;
259
312
  }
260
- if (args.options.owners) {
261
- const isValidArray = validation.isValidUserPrincipalNameArray(args.options.owners);
262
- if (isValidArray !== true) {
263
- return `Option 'owners' contains one or more invalid UPNs: ${isValidArray}.`;
313
+ if (args.options.ownerIds) {
314
+ const isValidGUIDArrayResult = validation.isValidGuidArray(args.options.ownerIds);
315
+ if (isValidGUIDArrayResult !== true) {
316
+ return `The following GUIDs are invalid for the option 'ownerIds': ${isValidGUIDArrayResult}.`;
317
+ }
318
+ }
319
+ if (args.options.ownerUserNames) {
320
+ const isValidUPNArrayResult = validation.isValidUserPrincipalNameArray(args.options.ownerUserNames);
321
+ if (isValidUPNArrayResult !== true) {
322
+ return `The following user principal names are invalid for the option 'ownerUserNames': ${isValidUPNArrayResult}.`;
323
+ }
324
+ }
325
+ if (args.options.memberIds) {
326
+ const isValidGUIDArrayResult = validation.isValidGuidArray(args.options.memberIds);
327
+ if (isValidGUIDArrayResult !== true) {
328
+ return `The following GUIDs are invalid for the option 'memberIds': ${isValidGUIDArrayResult}.`;
264
329
  }
265
330
  }
266
- if (args.options.members) {
267
- const isValidArray = validation.isValidUserPrincipalNameArray(args.options.members);
268
- if (isValidArray !== true) {
269
- return `Option 'members' contains one or more invalid UPNs: ${isValidArray}.`;
331
+ if (args.options.memberUserNames) {
332
+ const isValidUPNArrayResult = validation.isValidUserPrincipalNameArray(args.options.memberUserNames);
333
+ if (isValidUPNArrayResult !== true) {
334
+ return `The following user principal names are invalid for the option 'memberUserNames': ${isValidUPNArrayResult}.`;
270
335
  }
271
336
  }
272
337
  if (args.options.logoPath) {
@@ -10,7 +10,6 @@ import { entraGroup } from '../../../../utils/entraGroup.js';
10
10
  import { formatting } from '../../../../utils/formatting.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import GraphCommand from '../../../base/GraphCommand.js';
13
- import aadCommands from '../../aadCommands.js';
14
13
  import commands from '../../commands.js';
15
14
  class EntraM365GroupTeamifyCommand extends GraphCommand {
16
15
  get name() {
@@ -19,9 +18,6 @@ class EntraM365GroupTeamifyCommand extends GraphCommand {
19
18
  get description() {
20
19
  return 'Creates a new Microsoft Teams team under existing Microsoft 365 group';
21
20
  }
22
- alias() {
23
- return [aadCommands.M365GROUP_TEAMIFY];
24
- }
25
21
  constructor() {
26
22
  super();
27
23
  _EntraM365GroupTeamifyCommand_instances.add(this);
@@ -54,7 +50,6 @@ class EntraM365GroupTeamifyCommand extends GraphCommand {
54
50
  return groupItem.id;
55
51
  }
56
52
  async commandAction(logger, args) {
57
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_TEAMIFY, commands.M365GROUP_TEAMIFY);
58
53
  try {
59
54
  const groupId = await this.getGroupId(args.options);
60
55
  const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
@@ -9,8 +9,6 @@ import { entraGroup } from '../../../../utils/entraGroup.js';
9
9
  import { validation } from '../../../../utils/validation.js';
10
10
  import { formatting } from '../../../../utils/formatting.js';
11
11
  import GraphCommand from '../../../base/GraphCommand.js';
12
- import teamsCommands from '../../../teams/commands.js';
13
- import aadCommands from '../../aadCommands.js';
14
12
  import { entraUser } from '../../../../utils/entraUser.js';
15
13
  import commands from '../../commands.js';
16
14
  class EntraM365GroupUserAddCommand extends GraphCommand {
@@ -20,9 +18,6 @@ class EntraM365GroupUserAddCommand extends GraphCommand {
20
18
  get description() {
21
19
  return 'Adds user to specified Microsoft 365 Group or Microsoft Teams team';
22
20
  }
23
- alias() {
24
- return [teamsCommands.USER_ADD, aadCommands.M365GROUP_USER_ADD];
25
- }
26
21
  constructor() {
27
22
  super();
28
23
  _EntraM365GroupUserAddCommand_instances.add(this);
@@ -34,7 +29,6 @@ class EntraM365GroupUserAddCommand extends GraphCommand {
34
29
  __classPrivateFieldGet(this, _EntraM365GroupUserAddCommand_instances, "m", _EntraM365GroupUserAddCommand_initTypes).call(this);
35
30
  }
36
31
  async commandAction(logger, args) {
37
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_USER_ADD, commands.M365GROUP_USER_ADD);
38
32
  try {
39
33
  const providedGroupId = await this.getGroupId(logger, args);
40
34
  const isUnifiedGroup = await entraGroup.isUnifiedGroup(providedGroupId);
@@ -9,7 +9,6 @@ import { validation } from '../../../../utils/validation.js';
9
9
  import GraphCommand from '../../../base/GraphCommand.js';
10
10
  import commands from '../../commands.js';
11
11
  import { entraGroup } from '../../../../utils/entraGroup.js';
12
- import aadCommands from '../../aadCommands.js';
13
12
  class EntraM365GroupUserListCommand extends GraphCommand {
14
13
  get name() {
15
14
  return commands.M365GROUP_USER_LIST;
@@ -17,9 +16,6 @@ class EntraM365GroupUserListCommand extends GraphCommand {
17
16
  get description() {
18
17
  return "Lists users for the specified Microsoft 365 group";
19
18
  }
20
- alias() {
21
- return [aadCommands.M365GROUP_USER_LIST];
22
- }
23
19
  constructor() {
24
20
  super();
25
21
  _EntraM365GroupUserListCommand_instances.add(this);
@@ -29,7 +25,6 @@ class EntraM365GroupUserListCommand extends GraphCommand {
29
25
  __classPrivateFieldGet(this, _EntraM365GroupUserListCommand_instances, "m", _EntraM365GroupUserListCommand_initValidators).call(this);
30
26
  }
31
27
  async commandAction(logger, args) {
32
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_USER_LIST, commands.M365GROUP_USER_LIST);
33
28
  try {
34
29
  const groupId = await this.getGroupId(args.options, logger);
35
30
  const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
@@ -3,15 +3,14 @@ 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 _EntraM365GroupUserRemoveCommand_instances, _EntraM365GroupUserRemoveCommand_initTelemetry, _EntraM365GroupUserRemoveCommand_initOptions, _EntraM365GroupUserRemoveCommand_initValidators, _EntraM365GroupUserRemoveCommand_initOptionSets;
6
+ var _EntraM365GroupUserRemoveCommand_instances, _EntraM365GroupUserRemoveCommand_initTelemetry, _EntraM365GroupUserRemoveCommand_initOptions, _EntraM365GroupUserRemoveCommand_initValidators, _EntraM365GroupUserRemoveCommand_initOptionSets, _EntraM365GroupUserRemoveCommand_initTypes;
7
7
  import { cli } from '../../../../cli/cli.js';
8
8
  import request from '../../../../request.js';
9
9
  import { entraGroup } from '../../../../utils/entraGroup.js';
10
+ import { entraUser } from '../../../../utils/entraUser.js';
10
11
  import { formatting } from '../../../../utils/formatting.js';
11
12
  import { validation } from '../../../../utils/validation.js';
12
13
  import GraphCommand from '../../../base/GraphCommand.js';
13
- import teamsCommands from '../../../teams/commands.js';
14
- import aadCommands from '../../aadCommands.js';
15
14
  import commands from '../../commands.js';
16
15
  class EntraM365GroupUserRemoveCommand extends GraphCommand {
17
16
  get name() {
@@ -20,9 +19,6 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
20
19
  get description() {
21
20
  return 'Removes the specified user from specified Microsoft 365 Group or Microsoft Teams team';
22
21
  }
23
- alias() {
24
- return [teamsCommands.USER_REMOVE, aadCommands.M365GROUP_USER_REMOVE];
25
- }
26
22
  constructor() {
27
23
  super();
28
24
  _EntraM365GroupUserRemoveCommand_instances.add(this);
@@ -30,61 +26,23 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
30
26
  __classPrivateFieldGet(this, _EntraM365GroupUserRemoveCommand_instances, "m", _EntraM365GroupUserRemoveCommand_initOptions).call(this);
31
27
  __classPrivateFieldGet(this, _EntraM365GroupUserRemoveCommand_instances, "m", _EntraM365GroupUserRemoveCommand_initValidators).call(this);
32
28
  __classPrivateFieldGet(this, _EntraM365GroupUserRemoveCommand_instances, "m", _EntraM365GroupUserRemoveCommand_initOptionSets).call(this);
29
+ __classPrivateFieldGet(this, _EntraM365GroupUserRemoveCommand_instances, "m", _EntraM365GroupUserRemoveCommand_initTypes).call(this);
33
30
  }
34
31
  async commandAction(logger, args) {
35
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_USER_REMOVE, commands.M365GROUP_USER_REMOVE);
36
- const groupId = (typeof args.options.groupId !== 'undefined') ? args.options.groupId : args.options.teamId;
32
+ if (args.options.userName) {
33
+ await this.warn(logger, `Option 'userName' is deprecated. Please use 'ids' or 'userNames' instead.`);
34
+ }
37
35
  const removeUser = async () => {
38
36
  try {
37
+ const groupId = await this.getGroupId(logger, args.options.groupId, args.options.teamId, args.options.groupName, args.options.teamName);
39
38
  const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
40
39
  if (!isUnifiedGroup) {
41
40
  throw Error(`Specified group with id '${groupId}' is not a Microsoft 365 group.`);
42
41
  }
43
- // retrieve user
44
- const user = await request.get({
45
- url: `${this.resource}/v1.0/users/${formatting.encodeQueryParameter(args.options.userName)}/id`,
46
- headers: {
47
- accept: 'application/json;odata.metadata=none'
48
- },
49
- responseType: 'json'
50
- });
51
- // used to verify if the group exists or not
52
- await request.get({
53
- url: `${this.resource}/v1.0/groups/${groupId}/id`,
54
- headers: {
55
- 'accept': 'application/json;odata.metadata=none'
56
- }
57
- });
58
- try {
59
- // try to delete the user from the owners. Accepted error is 404
60
- await request.delete({
61
- url: `${this.resource}/v1.0/groups/${groupId}/owners/${user.value}/$ref`,
62
- headers: {
63
- 'accept': 'application/json;odata.metadata=none'
64
- }
65
- });
66
- }
67
- catch (err) {
68
- // the 404 error is accepted
69
- if (err.response.status !== 404) {
70
- throw err.response.data;
71
- }
72
- }
73
- // try to delete the user from the members. Accepted error is 404
74
- try {
75
- await request.delete({
76
- url: `${this.resource}/v1.0/groups/${groupId}/members/${user.value}/$ref`,
77
- headers: {
78
- 'accept': 'application/json;odata.metadata=none'
79
- }
80
- });
81
- }
82
- catch (err) {
83
- // the 404 error is accepted
84
- if (err.response.status !== 404) {
85
- throw err.response.data;
86
- }
87
- }
42
+ const userNames = args.options.userNames || args.options.userName;
43
+ const userIds = await this.getUserIds(logger, args.options.ids, userNames);
44
+ await this.removeUsersFromGroup(groupId, userIds, 'owners');
45
+ await this.removeUsersFromGroup(groupId, userIds, 'members');
88
46
  }
89
47
  catch (err) {
90
48
  this.handleRejectedODataJsonPromise(err);
@@ -94,43 +52,116 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
94
52
  await removeUser();
95
53
  }
96
54
  else {
97
- const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userName} from the ${(typeof args.options.groupId !== 'undefined' ? 'group' : 'team')} ${groupId}?` });
55
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userName || args.options.userNames || args.options.ids} from ${args.options.groupId || args.options.groupName || args.options.teamId || args.options.teamName}?` });
98
56
  if (result) {
99
57
  await removeUser();
100
58
  }
101
59
  }
102
60
  }
61
+ async getGroupId(logger, groupId, teamId, groupName, teamName) {
62
+ const id = groupId || teamId;
63
+ if (id) {
64
+ return id;
65
+ }
66
+ const name = groupName ?? teamName;
67
+ if (this.verbose) {
68
+ await logger.logToStderr(`Retrieving Group ID by display name ${name}...`);
69
+ }
70
+ return entraGroup.getGroupIdByDisplayName(name);
71
+ }
72
+ async getUserIds(logger, userIds, userNames) {
73
+ if (userIds) {
74
+ return formatting.splitAndTrim(userIds);
75
+ }
76
+ if (this.verbose) {
77
+ await logger.logToStderr(`Retrieving user IDs for {userNames}...`);
78
+ }
79
+ return entraUser.getUserIdsByUpns(formatting.splitAndTrim(userNames));
80
+ }
81
+ async removeUsersFromGroup(groupId, userIds, role) {
82
+ for (const userId of userIds) {
83
+ try {
84
+ await request.delete({
85
+ url: `${this.resource}/v1.0/groups/${groupId}/${role}/${userId}/$ref`,
86
+ headers: {
87
+ 'accept': 'application/json;odata.metadata=none'
88
+ }
89
+ });
90
+ }
91
+ catch (err) {
92
+ // the 404 error is accepted
93
+ if (err.response.status !== 404) {
94
+ throw err.response.data;
95
+ }
96
+ }
97
+ }
98
+ }
103
99
  }
104
100
  _EntraM365GroupUserRemoveCommand_instances = new WeakSet(), _EntraM365GroupUserRemoveCommand_initTelemetry = function _EntraM365GroupUserRemoveCommand_initTelemetry() {
105
101
  this.telemetry.push((args) => {
106
102
  Object.assign(this.telemetryProperties, {
107
- force: (!(!args.options.force)).toString(),
103
+ force: !!args.options.force,
108
104
  teamId: typeof args.options.teamId !== 'undefined',
109
- groupId: typeof args.options.groupId !== 'undefined'
105
+ groupId: typeof args.options.groupId !== 'undefined',
106
+ teamName: typeof args.options.teamName !== 'undefined',
107
+ groupName: typeof args.options.groupName !== 'undefined',
108
+ userName: typeof args.options.userName !== 'undefined',
109
+ ids: typeof args.options.ids !== 'undefined',
110
+ userNames: typeof args.options.userNames !== 'undefined'
110
111
  });
111
112
  });
112
113
  }, _EntraM365GroupUserRemoveCommand_initOptions = function _EntraM365GroupUserRemoveCommand_initOptions() {
113
114
  this.options.unshift({
114
- option: "-i, --groupId [groupId]"
115
+ option: '-i, --groupId [groupId]'
116
+ }, {
117
+ option: '--groupName [groupName]'
115
118
  }, {
116
- option: "--teamId [teamId]"
119
+ option: '--teamId [teamId]'
117
120
  }, {
118
- option: '-n, --userName <userName>'
121
+ option: '--teamName [teamName]'
122
+ }, {
123
+ option: '-n, --userName [userName]'
124
+ }, {
125
+ option: '--ids [ids]'
126
+ }, {
127
+ option: '--userNames [userNames]'
119
128
  }, {
120
129
  option: '-f, --force'
121
130
  });
122
131
  }, _EntraM365GroupUserRemoveCommand_initValidators = function _EntraM365GroupUserRemoveCommand_initValidators() {
123
132
  this.validators.push(async (args) => {
124
133
  if (args.options.teamId && !validation.isValidGuid(args.options.teamId)) {
125
- return `${args.options.teamId} is not a valid GUID`;
134
+ return `${args.options.teamId} is not a valid GUID for option 'teamId'.`;
126
135
  }
127
136
  if (args.options.groupId && !validation.isValidGuid(args.options.groupId)) {
128
- return `${args.options.groupId} is not a valid GUID`;
137
+ return `${args.options.groupId} is not a valid GUID for option 'groupId'.`;
138
+ }
139
+ if (args.options.ids) {
140
+ const isValidGUIDArrayResult = validation.isValidGuidArray(args.options.ids);
141
+ if (isValidGUIDArrayResult !== true) {
142
+ return `The following GUIDs are invalid for the option 'ids': ${isValidGUIDArrayResult}.`;
143
+ }
144
+ }
145
+ if (args.options.userNames) {
146
+ const isValidUPNArrayResult = validation.isValidUserPrincipalNameArray(args.options.userNames);
147
+ if (isValidUPNArrayResult !== true) {
148
+ return `The following user principal names are invalid for the option 'userNames': ${isValidUPNArrayResult}.`;
149
+ }
150
+ }
151
+ if (args.options.userName && !validation.isValidUserPrincipalName(args.options.userName)) {
152
+ return `The specified userName '${args.options.userName}' is not a valid user principal name.`;
129
153
  }
130
154
  return true;
131
155
  });
132
156
  }, _EntraM365GroupUserRemoveCommand_initOptionSets = function _EntraM365GroupUserRemoveCommand_initOptionSets() {
133
- this.optionSets.push({ options: ['groupId', 'teamId'] });
157
+ this.optionSets.push({
158
+ options: ['groupId', 'teamId', 'groupName', 'teamName']
159
+ }, {
160
+ options: ['userName', 'ids', 'userNames']
161
+ });
162
+ }, _EntraM365GroupUserRemoveCommand_initTypes = function _EntraM365GroupUserRemoveCommand_initTypes() {
163
+ this.types.string.push('groupId', 'groupName', 'teamId', 'teamName', 'userName', 'ids', 'userNames');
164
+ this.types.boolean.push('force');
134
165
  };
135
166
  export default new EntraM365GroupUserRemoveCommand();
136
167
  //# sourceMappingURL=m365group-user-remove.js.map
@@ -8,11 +8,9 @@ import request from '../../../../request.js';
8
8
  import { validation } from '../../../../utils/validation.js';
9
9
  import { formatting } from '../../../../utils/formatting.js';
10
10
  import GraphCommand from '../../../base/GraphCommand.js';
11
- import teamsCommands from '../../../teams/commands.js';
12
11
  import commands from '../../commands.js';
13
12
  import { entraGroup } from '../../../../utils/entraGroup.js';
14
13
  import { entraUser } from '../../../../utils/entraUser.js';
15
- import aadCommands from '../../aadCommands.js';
16
14
  class EntraM365GroupUserSetCommand extends GraphCommand {
17
15
  get name() {
18
16
  return commands.M365GROUP_USER_SET;
@@ -20,9 +18,6 @@ class EntraM365GroupUserSetCommand extends GraphCommand {
20
18
  get description() {
21
19
  return 'Updates role of the specified user in the specified Microsoft 365 Group or Microsoft Teams team';
22
20
  }
23
- alias() {
24
- return [teamsCommands.USER_SET, aadCommands.M365GROUP_USER_SET];
25
- }
26
21
  constructor() {
27
22
  super();
28
23
  _EntraM365GroupUserSetCommand_instances.add(this);
@@ -34,18 +29,13 @@ class EntraM365GroupUserSetCommand extends GraphCommand {
34
29
  __classPrivateFieldGet(this, _EntraM365GroupUserSetCommand_instances, "m", _EntraM365GroupUserSetCommand_initTypes).call(this);
35
30
  }
36
31
  async commandAction(logger, args) {
37
- await this.showDeprecationWarning(logger, aadCommands.M365GROUP_USER_SET, commands.M365GROUP_USER_SET);
38
- if (args.options.userName) {
39
- await this.warn(logger, `Option 'userName' is deprecated. Please use 'ids' or 'userNames' instead.`);
40
- }
41
32
  try {
42
- const userNames = args.options.userNames || args.options.userName;
43
33
  const groupId = await this.getGroupId(logger, args);
44
34
  const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
45
35
  if (!isUnifiedGroup) {
46
36
  throw Error(`Specified group with id '${groupId}' is not a Microsoft 365 group.`);
47
37
  }
48
- const userIds = await this.getUserIds(logger, args.options.ids, userNames);
38
+ const userIds = await this.getUserIds(logger, args.options.ids, args.options.userNames);
49
39
  // we can't simply switch the role
50
40
  // first add users to the new role
51
41
  await this.addUsers(groupId, userIds, args.options.role);
@@ -182,8 +172,6 @@ _EntraM365GroupUserSetCommand_instances = new WeakSet(), _EntraM365GroupUserSetC
182
172
  });
183
173
  }, _EntraM365GroupUserSetCommand_initOptions = function _EntraM365GroupUserSetCommand_initOptions() {
184
174
  this.options.unshift({
185
- option: '-n, --userName [userName]'
186
- }, {
187
175
  option: '--ids [ids]'
188
176
  }, {
189
177
  option: '--userNames [userNames]'
@@ -226,9 +214,9 @@ _EntraM365GroupUserSetCommand_instances = new WeakSet(), _EntraM365GroupUserSetC
226
214
  });
227
215
  }, _EntraM365GroupUserSetCommand_initOptionSets = function _EntraM365GroupUserSetCommand_initOptionSets() {
228
216
  this.optionSets.push({ options: ['groupId', 'groupName', 'teamId', 'teamName'] });
229
- this.optionSets.push({ options: ['userName', 'ids', 'userNames'] });
217
+ this.optionSets.push({ options: ['ids', 'userNames'] });
230
218
  }, _EntraM365GroupUserSetCommand_initTypes = function _EntraM365GroupUserSetCommand_initTypes() {
231
- this.types.string.push('userName', 'ids', 'userNames', 'groupId', 'groupName', 'teamId', 'teamName', 'role');
219
+ this.types.string.push('ids', 'userNames', 'groupId', 'groupName', 'teamId', 'teamName', 'role');
232
220
  };
233
221
  export default new EntraM365GroupUserSetCommand();
234
222
  //# sourceMappingURL=m365group-user-set.js.map