@pnp/cli-microsoft365 7.5.0-beta.494c631 → 7.5.0-beta.c0c1edf

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 (206) hide show
  1. package/.devcontainer/Dockerfile +2 -2
  2. package/.eslintrc.cjs +6 -2
  3. package/.mocharc.json +3 -5
  4. package/Dockerfile +2 -5
  5. package/README.md +2 -2
  6. package/allCommands.json +1 -1
  7. package/allCommandsFull.json +1 -1
  8. package/dist/Command.js +1 -1
  9. package/dist/m365/app/commands/app-get.js +2 -2
  10. package/dist/m365/base/AppCommand.js +2 -2
  11. package/dist/m365/base/{YammerCommand.js → VivaEngageCommand.js} +2 -2
  12. package/dist/m365/cli/commands/cli-consent.js +5 -3
  13. package/dist/m365/entra/aadCommands.js +3 -0
  14. package/dist/m365/entra/commands/administrativeunit/administrativeunit-get.js +2 -2
  15. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-add.js +8 -8
  16. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-get.js +2 -2
  17. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-list.js +2 -2
  18. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-remove.js +153 -0
  19. package/dist/m365/entra/commands/administrativeunit/administrativeunit-remove.js +2 -2
  20. package/dist/m365/entra/commands/administrativeunit/administrativeunit-roleassignment-add.js +4 -4
  21. package/dist/m365/entra/commands/app/app-add.js +1 -1
  22. package/dist/m365/entra/commands/app/app-get.js +1 -1
  23. package/dist/m365/entra/commands/app/app-list.js +1 -1
  24. package/dist/m365/entra/commands/app/app-permission-add.js +4 -8
  25. package/dist/m365/entra/commands/app/app-permission-list.js +182 -0
  26. package/dist/m365/entra/commands/app/app-remove.js +1 -1
  27. package/dist/m365/entra/commands/app/app-role-add.js +1 -1
  28. package/dist/m365/entra/commands/app/app-role-list.js +1 -1
  29. package/dist/m365/entra/commands/app/app-role-remove.js +1 -1
  30. package/dist/m365/entra/commands/app/app-set.js +1 -1
  31. package/dist/m365/entra/commands/{sp/sp-add.js → enterpriseapp/enterpriseapp-add.js} +18 -18
  32. package/dist/m365/entra/commands/{sp/sp-get.js → enterpriseapp/enterpriseapp-get.js} +19 -19
  33. package/dist/m365/entra/commands/{sp/sp-list.js → enterpriseapp/enterpriseapp-list.js} +13 -13
  34. package/dist/m365/entra/commands/group/group-add.js +224 -0
  35. package/dist/m365/entra/commands/group/group-get.js +3 -3
  36. package/dist/m365/entra/commands/group/group-remove.js +2 -2
  37. package/dist/m365/entra/commands/group/group-user-add.js +145 -0
  38. package/dist/m365/entra/commands/group/group-user-list.js +2 -2
  39. package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +2 -2
  40. package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +3 -3
  41. package/dist/m365/entra/commands/m365group/m365group-get.js +3 -3
  42. package/dist/m365/entra/commands/m365group/m365group-remove.js +2 -2
  43. package/dist/m365/entra/commands/m365group/m365group-renew.js +2 -2
  44. package/dist/m365/entra/commands/m365group/m365group-report-activitygroupcounts.js +1 -1
  45. package/dist/m365/entra/commands/m365group/m365group-set.js +2 -2
  46. package/dist/m365/entra/commands/m365group/m365group-teamify.js +2 -2
  47. package/dist/m365/entra/commands/m365group/m365group-user-add.js +2 -2
  48. package/dist/m365/entra/commands/m365group/m365group-user-list.js +3 -3
  49. package/dist/m365/entra/commands/m365group/m365group-user-remove.js +2 -2
  50. package/dist/m365/entra/commands/m365group/m365group-user-set.js +2 -2
  51. package/dist/m365/entra/commands/user/user-get.js +38 -38
  52. package/dist/m365/entra/commands/user/user-registrationdetails-list.js +224 -0
  53. package/dist/m365/entra/commands.js +17 -0
  54. package/dist/m365/external/commands/connection/connection-doctor.js +2 -1
  55. package/dist/m365/file/commands/file-copy.js +151 -0
  56. package/dist/m365/file/commands.js +1 -0
  57. package/dist/m365/flow/commands/owner/owner-ensure.js +4 -4
  58. package/dist/m365/flow/commands/owner/owner-remove.js +4 -4
  59. package/dist/m365/onenote/commands/notebook/notebook-list.js +2 -2
  60. package/dist/m365/onenote/commands/page/page-list.js +2 -2
  61. package/dist/m365/pa/commands/app/app-owner-set.js +2 -2
  62. package/dist/m365/pa/commands/app/app-permission-ensure.js +4 -4
  63. package/dist/m365/pa/commands/app/app-permission-remove.js +4 -4
  64. package/dist/m365/planner/commands/bucket/bucket-add.js +2 -2
  65. package/dist/m365/planner/commands/bucket/bucket-get.js +2 -2
  66. package/dist/m365/planner/commands/bucket/bucket-list.js +2 -2
  67. package/dist/m365/planner/commands/bucket/bucket-remove.js +2 -2
  68. package/dist/m365/planner/commands/bucket/bucket-set.js +2 -2
  69. package/dist/m365/planner/commands/plan/plan-add.js +2 -2
  70. package/dist/m365/planner/commands/plan/plan-get.js +2 -2
  71. package/dist/m365/planner/commands/plan/plan-list.js +2 -2
  72. package/dist/m365/planner/commands/plan/plan-remove.js +2 -2
  73. package/dist/m365/planner/commands/plan/plan-set.js +2 -2
  74. package/dist/m365/planner/commands/roster/roster-member-add.js +2 -2
  75. package/dist/m365/planner/commands/roster/roster-member-get.js +2 -2
  76. package/dist/m365/planner/commands/roster/roster-member-remove.js +2 -2
  77. package/dist/m365/planner/commands/task/task-add.js +2 -2
  78. package/dist/m365/planner/commands/task/task-get.js +2 -2
  79. package/dist/m365/planner/commands/task/task-list.js +2 -2
  80. package/dist/m365/planner/commands/task/task-remove.js +2 -2
  81. package/dist/m365/planner/commands/task/task-set.js +2 -2
  82. package/dist/m365/spfx/commands/project/DeployWorkflow.js +4 -3
  83. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +1 -1
  84. package/dist/m365/spo/commands/group/group-member-add.js +4 -4
  85. package/dist/m365/spo/commands/group/group-member-remove.js +2 -2
  86. package/dist/m365/spo/commands/group/group-set.js +2 -2
  87. package/dist/m365/spo/commands/site/site-remove.js +2 -2
  88. package/dist/m365/spo/commands/site/site-set.js +2 -2
  89. package/dist/m365/spo/commands/spo-search.js +52 -22
  90. package/dist/m365/spo/commands/user/user-ensure.js +2 -2
  91. package/dist/m365/teams/commands/app/app-install.js +2 -2
  92. package/dist/m365/teams/commands/channel/channel-get.js +2 -2
  93. package/dist/m365/teams/commands/channel/channel-list.js +2 -2
  94. package/dist/m365/teams/commands/channel/channel-member-add.js +2 -2
  95. package/dist/m365/teams/commands/channel/channel-member-list.js +2 -2
  96. package/dist/m365/teams/commands/channel/channel-member-remove.js +2 -2
  97. package/dist/m365/teams/commands/channel/channel-member-set.js +2 -2
  98. package/dist/m365/teams/commands/channel/channel-remove.js +2 -2
  99. package/dist/m365/teams/commands/channel/channel-set.js +2 -2
  100. package/dist/m365/teams/commands/meeting/meeting-add.js +2 -2
  101. package/dist/m365/teams/commands/meeting/meeting-attendancereport-list.js +2 -2
  102. package/dist/m365/teams/commands/meeting/meeting-get.js +3 -3
  103. package/dist/m365/teams/commands/meeting/meeting-list.js +2 -2
  104. package/dist/m365/teams/commands/meeting/meeting-transcript-list.js +2 -2
  105. package/dist/m365/teams/commands/tab/tab-get.js +2 -2
  106. package/dist/m365/teams/commands/team/team-add.js +6 -6
  107. package/dist/m365/teams/commands/team/team-archive.js +2 -2
  108. package/dist/m365/teams/commands/team/team-get.js +2 -2
  109. package/dist/m365/teams/commands/team/team-remove.js +2 -2
  110. package/dist/m365/teams/commands/team/team-unarchive.js +2 -2
  111. package/dist/m365/{yammer/commands/group/group-list.js → viva/commands/engage/engage-group-list.js} +19 -14
  112. package/dist/m365/{yammer/commands/group/group-user-add.js → viva/commands/engage/engage-group-user-add.js} +19 -14
  113. package/dist/m365/{yammer/commands/group/group-user-remove.js → viva/commands/engage/engage-group-user-remove.js} +19 -14
  114. package/dist/m365/{yammer/commands/message/message-add.js → viva/commands/engage/engage-message-add.js} +19 -14
  115. package/dist/m365/{yammer/commands/message/message-get.js → viva/commands/engage/engage-message-get.js} +17 -12
  116. package/dist/m365/{yammer/commands/message/message-like-set.js → viva/commands/engage/engage-message-like-set.js} +21 -16
  117. package/dist/m365/{yammer/commands/message/message-list.js → viva/commands/engage/engage-message-list.js} +21 -16
  118. package/dist/m365/{yammer/commands/message/message-remove.js → viva/commands/engage/engage-message-remove.js} +20 -15
  119. package/dist/m365/{yammer/commands/network/network-list.js → viva/commands/engage/engage-network-list.js} +16 -11
  120. package/dist/m365/viva/commands/engage/engage-report-activitycounts.js +23 -0
  121. package/dist/m365/viva/commands/engage/engage-report-activityusercounts.js +23 -0
  122. package/dist/m365/viva/commands/engage/engage-report-activityuserdetail.js +23 -0
  123. package/dist/m365/viva/commands/engage/engage-report-deviceusagedistributionusercounts.js +23 -0
  124. package/dist/m365/viva/commands/engage/engage-report-deviceusageusercounts.js +23 -0
  125. package/dist/m365/viva/commands/engage/engage-report-deviceusageuserdetail.js +23 -0
  126. package/dist/m365/viva/commands/engage/engage-report-groupsactivitycounts.js +23 -0
  127. package/dist/m365/viva/commands/engage/engage-report-groupsactivitydetail.js +23 -0
  128. package/dist/m365/viva/commands/engage/engage-report-groupsactivitygroupcounts.js +23 -0
  129. package/dist/m365/{yammer/commands/yammer-search.js → viva/commands/engage/engage-search.js} +23 -18
  130. package/dist/m365/{yammer/commands/user/user-get.js → viva/commands/engage/engage-user-get.js} +18 -13
  131. package/dist/m365/{yammer/commands/user/user-list.js → viva/commands/engage/engage-user-list.js} +18 -13
  132. package/dist/m365/{yammer/commands.js → viva/commands/engage/yammerCommands.js} +1 -1
  133. package/dist/m365/viva/commands.js +22 -1
  134. package/dist/utils/{aadAdministrativeUnit.js → entraAdministrativeUnit.js} +2 -2
  135. package/dist/utils/{aadDevice.js → entraDevice.js} +2 -2
  136. package/dist/utils/{aadGroup.js → entraGroup.js} +2 -2
  137. package/dist/utils/{aadUser.js → entraUser.js} +38 -2
  138. package/dist/utils/spo.js +24 -2
  139. package/dist/utils/urlUtil.js +31 -0
  140. package/dist/utils/validation.js +8 -0
  141. package/docs/docs/cmd/cli/cli-consent.mdx +9 -9
  142. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-add.mdx +5 -3
  143. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-remove.mdx +107 -0
  144. package/docs/docs/cmd/entra/app/app-add.mdx +2 -1
  145. package/docs/docs/cmd/entra/app/app-get.mdx +1 -0
  146. package/docs/docs/cmd/entra/app/app-list.mdx +1 -0
  147. package/docs/docs/cmd/entra/app/app-permission-add.mdx +3 -2
  148. package/docs/docs/cmd/entra/app/app-permission-list.mdx +105 -0
  149. package/docs/docs/cmd/entra/app/app-remove.mdx +1 -0
  150. package/docs/docs/cmd/entra/app/app-role-add.mdx +1 -0
  151. package/docs/docs/cmd/entra/app/app-role-list.mdx +1 -0
  152. package/docs/docs/cmd/entra/app/app-role-remove.mdx +1 -0
  153. package/docs/docs/cmd/entra/app/app-set.mdx +1 -0
  154. package/docs/docs/cmd/entra/{sp/sp-add.mdx → enterpriseapp/enterpriseapp-add.mdx} +16 -15
  155. package/docs/docs/cmd/entra/{sp/sp-get.mdx → enterpriseapp/enterpriseapp-get.mdx} +15 -14
  156. package/docs/docs/cmd/entra/{sp/sp-list.mdx → enterpriseapp/enterpriseapp-list.mdx} +22 -21
  157. package/docs/docs/cmd/entra/group/group-add.mdx +231 -0
  158. package/docs/docs/cmd/entra/group/group-user-add.mdx +62 -0
  159. package/docs/docs/cmd/entra/m365group/m365group-report-activitygroupcounts.mdx +1 -1
  160. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +3 -3
  161. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -1
  162. package/docs/docs/cmd/entra/user/user-registrationdetails-list.mdx +246 -0
  163. package/docs/docs/cmd/external/item/item-add.mdx +1 -1
  164. package/docs/docs/cmd/file/convert/convert-pdf.mdx +4 -0
  165. package/docs/docs/cmd/file/file-add.mdx +4 -0
  166. package/docs/docs/cmd/file/file-copy.mdx +68 -0
  167. package/docs/docs/cmd/file/file-list.mdx +100 -0
  168. package/docs/docs/cmd/setup.mdx +4 -0
  169. package/docs/docs/cmd/spo/list/list-webhook-set.mdx +1 -1
  170. package/docs/docs/cmd/spo/listitem/listitem-list.mdx +1 -1
  171. package/docs/docs/cmd/spo/spo-search.mdx +6 -2
  172. package/docs/docs/cmd/spo/theme/theme-set.mdx +14 -2
  173. package/docs/docs/cmd/{yammer/group/group-list.mdx → viva/engage/engage-group-list.mdx} +13 -13
  174. package/docs/docs/cmd/{yammer/group/group-user-add.mdx → viva/engage/engage-group-user-add.mdx} +7 -7
  175. package/docs/docs/cmd/{yammer/group/group-user-remove.mdx → viva/engage/engage-group-user-remove.mdx} +10 -10
  176. package/docs/docs/cmd/{yammer/message/message-add.mdx → viva/engage/engage-message-add.mdx} +12 -13
  177. package/docs/docs/cmd/{yammer/message/message-get.mdx → viva/engage/engage-message-get.mdx} +10 -10
  178. package/docs/docs/cmd/{yammer/message/message-like-set.mdx → viva/engage/engage-message-like-set.mdx} +10 -10
  179. package/docs/docs/cmd/{yammer/message/message-list.mdx → viva/engage/engage-message-list.mdx} +21 -21
  180. package/docs/docs/cmd/{yammer/message/message-remove.mdx → viva/engage/engage-message-remove.mdx} +10 -10
  181. package/docs/docs/cmd/{yammer/network/network-list.mdx → viva/engage/engage-network-list.mdx} +6 -6
  182. package/docs/docs/cmd/{yammer/report/report-activitycounts.mdx → viva/engage/engage-report-activitycounts.mdx} +9 -9
  183. package/docs/docs/cmd/{yammer/report/report-activityusercounts.mdx → viva/engage/engage-report-activityusercounts.mdx} +9 -9
  184. package/docs/docs/cmd/{yammer/report/report-activityuserdetail.mdx → viva/engage/engage-report-activityuserdetail.mdx} +11 -12
  185. package/docs/docs/cmd/{yammer/report/report-deviceusagedistributionusercounts.mdx → viva/engage/engage-report-deviceusagedistributionusercounts.mdx} +5 -5
  186. package/docs/docs/cmd/{yammer/report/report-deviceusageusercounts.mdx → viva/engage/engage-report-deviceusageusercounts.mdx} +5 -5
  187. package/docs/docs/cmd/{yammer/report/report-deviceusageuserdetail.mdx → viva/engage/engage-report-deviceusageuserdetail.mdx} +11 -11
  188. package/docs/docs/cmd/{yammer/report/report-groupsactivitycounts.mdx → viva/engage/engage-report-groupsactivitycounts.mdx} +9 -9
  189. package/docs/docs/cmd/{yammer/report/report-groupsactivitydetail.mdx → viva/engage/engage-report-groupsactivitydetail.mdx} +11 -11
  190. package/docs/docs/cmd/{yammer/report/report-groupsactivitygroupcounts.mdx → viva/engage/engage-report-groupsactivitygroupcounts.mdx} +5 -5
  191. package/docs/docs/cmd/{yammer/yammer-search.mdx → viva/engage/engage-search.mdx} +10 -10
  192. package/docs/docs/cmd/{yammer/user/user-get.mdx → viva/engage/engage-user-get.mdx} +8 -8
  193. package/docs/docs/cmd/{yammer/user/user-list.mdx → viva/engage/engage-user-list.mdx} +11 -11
  194. package/npm-shrinkwrap.json +228 -166
  195. package/package.json +20 -19
  196. package/dist/m365/base/AzmgmtCommand.js +0 -18
  197. package/dist/m365/base/AzmgmtItemsListCommand.js +0 -41
  198. package/dist/m365/yammer/commands/report/report-activitycounts.js +0 -15
  199. package/dist/m365/yammer/commands/report/report-activityusercounts.js +0 -15
  200. package/dist/m365/yammer/commands/report/report-activityuserdetail.js +0 -15
  201. package/dist/m365/yammer/commands/report/report-deviceusagedistributionusercounts.js +0 -15
  202. package/dist/m365/yammer/commands/report/report-deviceusageusercounts.js +0 -15
  203. package/dist/m365/yammer/commands/report/report-deviceusageuserdetail.js +0 -15
  204. package/dist/m365/yammer/commands/report/report-groupsactivitycounts.js +0 -15
  205. package/dist/m365/yammer/commands/report/report-groupsactivitydetail.js +0 -15
  206. package/dist/m365/yammer/commands/report/report-groupsactivitygroupcounts.js +0 -15
@@ -6,7 +6,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
6
6
  var _EntraM365GroupUserRemoveCommand_instances, _EntraM365GroupUserRemoveCommand_initTelemetry, _EntraM365GroupUserRemoveCommand_initOptions, _EntraM365GroupUserRemoveCommand_initValidators, _EntraM365GroupUserRemoveCommand_initOptionSets;
7
7
  import { cli } from '../../../../cli/cli.js';
8
8
  import request from '../../../../request.js';
9
- import { aadGroup } from '../../../../utils/aadGroup.js';
9
+ 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';
@@ -35,7 +35,7 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
35
35
  const groupId = (typeof args.options.groupId !== 'undefined') ? args.options.groupId : args.options.teamId;
36
36
  const removeUser = async () => {
37
37
  try {
38
- const isUnifiedGroup = await aadGroup.isUnifiedGroup(groupId);
38
+ const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
39
39
  if (!isUnifiedGroup) {
40
40
  throw Error(`Specified group with id '${groupId}' is not a Microsoft 365 group.`);
41
41
  }
@@ -10,7 +10,7 @@ import { validation } from '../../../../utils/validation.js';
10
10
  import GraphCommand from '../../../base/GraphCommand.js';
11
11
  import teamsCommands from '../../../teams/commands.js';
12
12
  import commands from '../../commands.js';
13
- import { aadGroup } from '../../../../utils/aadGroup.js';
13
+ import { entraGroup } from '../../../../utils/entraGroup.js';
14
14
  import aadCommands from '../../aadCommands.js';
15
15
  class EntraM365GroupUserSetCommand extends GraphCommand {
16
16
  get name() {
@@ -33,7 +33,7 @@ class EntraM365GroupUserSetCommand extends GraphCommand {
33
33
  async commandAction(logger, args) {
34
34
  try {
35
35
  const groupId = (typeof args.options.groupId !== 'undefined') ? args.options.groupId : args.options.teamId;
36
- const isUnifiedGroup = await aadGroup.isUnifiedGroup(groupId);
36
+ const isUnifiedGroup = await entraGroup.isUnifiedGroup(groupId);
37
37
  if (!isUnifiedGroup) {
38
38
  throw Error(`Specified group with id '${groupId}' is not a Microsoft 365 group.`);
39
39
  }
@@ -5,12 +5,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
5
5
  };
6
6
  var _EntraUserGetCommand_instances, _EntraUserGetCommand_initTelemetry, _EntraUserGetCommand_initOptions, _EntraUserGetCommand_initValidators, _EntraUserGetCommand_initOptionSets;
7
7
  import request from '../../../../request.js';
8
- import { formatting } from '../../../../utils/formatting.js';
9
8
  import { validation } from '../../../../utils/validation.js';
10
9
  import GraphCommand from '../../../base/GraphCommand.js';
11
10
  import commands from '../../commands.js';
12
- import { cli } from '../../../../cli/cli.js';
13
11
  import aadCommands from '../../aadCommands.js';
12
+ import { entraUser } from '../../../../utils/entraUser.js';
13
+ import { formatting } from '../../../../utils/formatting.js';
14
14
  class EntraUserGetCommand extends GraphCommand {
15
15
  get name() {
16
16
  return commands.USER_GET;
@@ -30,50 +30,50 @@ class EntraUserGetCommand extends GraphCommand {
30
30
  __classPrivateFieldGet(this, _EntraUserGetCommand_instances, "m", _EntraUserGetCommand_initOptionSets).call(this);
31
31
  }
32
32
  async commandAction(logger, args) {
33
- const properties = args.options.properties ?
34
- `&$select=${args.options.properties.split(',').map(p => formatting.encodeQueryParameter(p.trim())).join(',')}` :
35
- '';
36
- let requestUrl = `${this.resource}/v1.0/users`;
37
- if (args.options.id) {
38
- requestUrl += `?$filter=id eq '${formatting.encodeQueryParameter(args.options.id)}'${properties}`;
39
- }
40
- else if (args.options.userName) {
41
- requestUrl += `?$filter=userPrincipalName eq '${formatting.encodeQueryParameter(args.options.userName)}'${properties}`;
42
- }
43
- else if (args.options.email) {
44
- requestUrl += `?$filter=mail eq '${formatting.encodeQueryParameter(args.options.email)}'${properties}`;
45
- }
46
- if (args.options.withManager) {
47
- requestUrl += '&$expand=manager($select=displayName,userPrincipalName,id,mail)';
48
- }
49
- const requestOptions = {
50
- url: requestUrl,
51
- headers: {
52
- accept: 'application/json;odata.metadata=none'
53
- },
54
- responseType: 'json'
55
- };
56
33
  try {
57
- const res = await request.get(requestOptions);
58
- const identifier = args.options.id ? `id ${args.options.id}`
59
- : args.options.userName ? `user name ${args.options.userName}`
60
- : `email ${args.options.email}`;
61
- if (res.value.length === 0) {
62
- throw `The specified user with ${identifier} does not exist`;
34
+ let userIdOrPrincipalName = args.options.id;
35
+ if (args.options.userName) {
36
+ // single user can be retrieved also by user principal name
37
+ userIdOrPrincipalName = formatting.encodeQueryParameter(args.options.userName);
63
38
  }
64
- if (res.value.length > 1) {
65
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
66
- const result = await cli.handleMultipleResultsFound(`Multiple users with ${identifier} found.`, resultAsKeyValuePair);
67
- await logger.log(result);
68
- }
69
- else {
70
- await logger.log(res.value[0]);
39
+ else if (args.options.email) {
40
+ userIdOrPrincipalName = await entraUser.getUserIdByEmail(args.options.email);
71
41
  }
42
+ const requestUrl = this.getRequestUrl(userIdOrPrincipalName, args.options);
43
+ const requestOptions = {
44
+ url: requestUrl,
45
+ headers: {
46
+ accept: 'application/json;odata.metadata=none'
47
+ },
48
+ responseType: 'json'
49
+ };
50
+ const user = await request.get(requestOptions);
51
+ await logger.log(user);
72
52
  }
73
53
  catch (err) {
74
54
  this.handleRejectedODataJsonPromise(err);
75
55
  }
76
56
  }
57
+ getRequestUrl(userIdOrPrincipalName, options) {
58
+ const queryParameters = [];
59
+ if (options.properties) {
60
+ const allProperties = options.properties.split(',');
61
+ const selectProperties = allProperties.filter(prop => !prop.includes('/'));
62
+ if (selectProperties.length > 0) {
63
+ queryParameters.push(`$select=${selectProperties}`);
64
+ }
65
+ }
66
+ if (options.withManager) {
67
+ queryParameters.push('$expand=manager($select=displayName,userPrincipalName,id,mail)');
68
+ }
69
+ const queryString = queryParameters.length > 0
70
+ ? `?${queryParameters.join('&')}`
71
+ : '';
72
+ // user principal name can start with $ but it violates the OData URL convention, so it must be enclosed in parenthesis and single quotes
73
+ return userIdOrPrincipalName.startsWith('%24')
74
+ ? `${this.resource}/v1.0/users('${userIdOrPrincipalName}')${queryString}`
75
+ : `${this.resource}/v1.0/users/${userIdOrPrincipalName}${queryString}`;
76
+ }
77
77
  }
78
78
  _EntraUserGetCommand_instances = new WeakSet(), _EntraUserGetCommand_initTelemetry = function _EntraUserGetCommand_initTelemetry() {
79
79
  this.telemetry.push((args) => {
@@ -0,0 +1,224 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _EntraUserRegistrationDetailsListCommand_instances, _EntraUserRegistrationDetailsListCommand_initTelemetry, _EntraUserRegistrationDetailsListCommand_initOptions, _EntraUserRegistrationDetailsListCommand_initValidators;
7
+ import GraphCommand from '../../../base/GraphCommand.js';
8
+ import commands from '../../commands.js';
9
+ import aadCommands from '../../aadCommands.js';
10
+ import { odata } from '../../../../utils/odata.js';
11
+ import { entraUser } from '../../../../utils/entraUser.js';
12
+ import { validation } from '../../../../utils/validation.js';
13
+ import { formatting } from '../../../../utils/formatting.js';
14
+ const authenticationMethods = ['push', 'oath', 'voiceMobile', 'voiceAlternateMobile', 'voiceOffice', 'sms', 'none'];
15
+ const methodsRegistered = ['mobilePhone', 'email', 'fido2', 'microsoftAuthenticatorPush', 'softwareOneTimePasscode'];
16
+ class EntraUserRegistrationDetailsListCommand extends GraphCommand {
17
+ get name() {
18
+ return commands.USER_REGISTRATIONDETAILS_LIST;
19
+ }
20
+ get description() {
21
+ return 'Retrieves a list of the authentication methods registered for users';
22
+ }
23
+ alias() {
24
+ return [aadCommands.USER_REGISTRATIONDETAILS_LIST];
25
+ }
26
+ defaultProperties() {
27
+ return ['userPrincipalName', 'methodsRegistered', 'lastUpdatedDateTime'];
28
+ }
29
+ constructor() {
30
+ super();
31
+ _EntraUserRegistrationDetailsListCommand_instances.add(this);
32
+ __classPrivateFieldGet(this, _EntraUserRegistrationDetailsListCommand_instances, "m", _EntraUserRegistrationDetailsListCommand_initTelemetry).call(this);
33
+ __classPrivateFieldGet(this, _EntraUserRegistrationDetailsListCommand_instances, "m", _EntraUserRegistrationDetailsListCommand_initOptions).call(this);
34
+ __classPrivateFieldGet(this, _EntraUserRegistrationDetailsListCommand_instances, "m", _EntraUserRegistrationDetailsListCommand_initValidators).call(this);
35
+ }
36
+ async commandAction(logger, args) {
37
+ try {
38
+ let userUpns = [];
39
+ if (args.options.userIds) {
40
+ const ids = args.options.userIds.split(',').map(m => m.trim());
41
+ userUpns = await Promise.all(ids.map(id => entraUser.getUpnByUserId(id)));
42
+ }
43
+ const requestUrl = this.getRequestUrl(args.options, userUpns);
44
+ const result = await odata.getAllItems(requestUrl);
45
+ await logger.log(result);
46
+ }
47
+ catch (err) {
48
+ this.handleRejectedODataJsonPromise(err);
49
+ }
50
+ }
51
+ getRequestUrl(options, userUpns) {
52
+ const queryParameters = [];
53
+ if (options.properties) {
54
+ queryParameters.push(`$select=${options.properties}`);
55
+ }
56
+ const filters = [];
57
+ if (options.isAdmin !== undefined) {
58
+ filters.push(`isAdmin eq ${options.isAdmin}`);
59
+ }
60
+ if (options.isMfaCapable !== undefined) {
61
+ filters.push(`isMfaCapable eq ${options.isMfaCapable}`);
62
+ }
63
+ if (options.isMfaRegistered !== undefined) {
64
+ filters.push(`isMfaRegistered eq ${options.isMfaRegistered}`);
65
+ }
66
+ if (options.isPasswordlessCapable !== undefined) {
67
+ filters.push(`isPasswordlessCapable eq ${options.isPasswordlessCapable}`);
68
+ }
69
+ if (options.isSelfServicePasswordResetCapable !== undefined) {
70
+ filters.push(`isSelfServicePasswordResetCapable eq ${options.isSelfServicePasswordResetCapable}`);
71
+ }
72
+ if (options.isSelfServicePasswordResetEnabled !== undefined) {
73
+ filters.push(`isSelfServicePasswordResetEnabled eq ${options.isSelfServicePasswordResetEnabled}`);
74
+ }
75
+ if (options.isSelfServicePasswordResetRegistered !== undefined) {
76
+ filters.push(`isSelfServicePasswordResetRegistered eq ${options.isSelfServicePasswordResetRegistered}`);
77
+ }
78
+ if (options.isSystemPreferredAuthenticationMethodEnabled !== undefined) {
79
+ filters.push(`isSystemPreferredAuthenticationMethodEnabled eq ${options.isSystemPreferredAuthenticationMethodEnabled}`);
80
+ }
81
+ const methodsRegistered = options.methodsRegistered?.split(',').map(method => `methodsRegistered/any(m:m eq '${method.trim()}')`);
82
+ const methodsRegisteredFilter = methodsRegistered?.join(' or ');
83
+ if (methodsRegisteredFilter) {
84
+ filters.push(`(${methodsRegisteredFilter})`);
85
+ }
86
+ const systemPreferredAuthenticationMethods = options.systemPreferredAuthenticationMethods?.split(',').map(method => `systemPreferredAuthenticationMethods/any(m:m eq '${method.trim()}')`);
87
+ const systemPreferredAuthenticationMethodsFilter = systemPreferredAuthenticationMethods?.join(' or ');
88
+ if (systemPreferredAuthenticationMethodsFilter) {
89
+ filters.push(`(${systemPreferredAuthenticationMethodsFilter})`);
90
+ }
91
+ const userUPNs = [];
92
+ if (userUpns.length > 0) {
93
+ userUpns.forEach(upn => {
94
+ userUPNs.push(`userPrincipalName eq '${formatting.encodeQueryParameter(upn)}'`);
95
+ });
96
+ }
97
+ if (options.userPrincipalNames) {
98
+ const upns = options.userPrincipalNames.split(',').map(m => m.trim());
99
+ upns.forEach(upn => {
100
+ userUPNs.push(`userPrincipalName eq '${formatting.encodeQueryParameter(upn)}'`);
101
+ });
102
+ }
103
+ if (userUPNs.length > 0) {
104
+ filters.push(`(${userUPNs.join(' or ')})`);
105
+ }
106
+ const userPreferredMethodForSecondaryAuthentication = options.userPreferredMethodForSecondaryAuthentication?.split(',').map(method => `userPreferredMethodForSecondaryAuthentication eq '${method.trim()}'`);
107
+ const userPreferredMethodForSecondaryAuthenticationFilter = userPreferredMethodForSecondaryAuthentication?.join(' or ');
108
+ if (userPreferredMethodForSecondaryAuthenticationFilter) {
109
+ filters.push(`(${userPreferredMethodForSecondaryAuthenticationFilter})`);
110
+ }
111
+ if (options.userType) {
112
+ filters.push(`userType eq '${options.userType}'`);
113
+ }
114
+ if (filters.length > 0) {
115
+ queryParameters.push(`$filter=${filters.join(' and ')}`);
116
+ }
117
+ const queryString = queryParameters.length > 0
118
+ ? `?${queryParameters.join('&')}`
119
+ : '';
120
+ return `${this.resource}/v1.0/reports/authenticationMethods/userRegistrationDetails${queryString}`;
121
+ }
122
+ }
123
+ _EntraUserRegistrationDetailsListCommand_instances = new WeakSet(), _EntraUserRegistrationDetailsListCommand_initTelemetry = function _EntraUserRegistrationDetailsListCommand_initTelemetry() {
124
+ this.telemetry.push((args) => {
125
+ Object.assign(this.telemetryProperties, {
126
+ isAdmin: !!args.options.isAdmin,
127
+ userType: typeof args.options.userType !== 'undefined',
128
+ userPreferredMethodForSecondaryAuthentication: typeof args.options.userPreferredMethodForSecondaryAuthentication !== 'undefined',
129
+ systemPreferredAuthenticationMethods: typeof args.options.systemPreferredAuthenticationMethods !== 'undefined',
130
+ isSelfServicePasswordResetRegistered: !!args.options.isSelfServicePasswordResetRegistered,
131
+ isSelfServicePasswordResetEnabled: !!args.options.isSelfServicePasswordResetEnabled,
132
+ isSelfServicePasswordResetCapable: !!args.options.isSelfServicePasswordResetCapable,
133
+ isMfaRegistered: !!args.options.isMfaRegistered,
134
+ isMfaCapable: !!args.options.isMfaCapable,
135
+ isPasswordlessCapable: !!args.options.isPasswordlessCapable,
136
+ isSystemPreferredAuthenticationMethodEnabled: !!args.options.isSystemPreferredAuthenticationMethodEnabled,
137
+ methodsRegistered: typeof args.options.methodsRegistered !== 'undefined',
138
+ userIds: typeof args.options.userIds !== 'undefined',
139
+ userPrincipalNames: typeof args.options.userPrincipalNames !== 'undefined',
140
+ properties: typeof args.options.properties !== 'undefined'
141
+ });
142
+ });
143
+ }, _EntraUserRegistrationDetailsListCommand_initOptions = function _EntraUserRegistrationDetailsListCommand_initOptions() {
144
+ this.options.unshift({
145
+ option: '--isAdmin [isAdmin]'
146
+ }, {
147
+ option: '--userType [userType]',
148
+ autocomplete: ['member', 'guest']
149
+ }, {
150
+ option: '--userPreferredMethodForSecondaryAuthentication [userPreferredMethodForSecondaryAuthentication ]',
151
+ autocomplete: authenticationMethods
152
+ }, {
153
+ option: '--systemPreferredAuthenticationMethods [systemPreferredAuthenticationMethods ]',
154
+ autocomplete: authenticationMethods
155
+ }, {
156
+ option: '--isSelfServicePasswordResetRegistered [isSelfServicePasswordResetRegistered]'
157
+ }, {
158
+ option: '--isSelfServicePasswordResetEnabled [isSelfServicePasswordResetEnabled]'
159
+ }, {
160
+ option: '--isSelfServicePasswordResetCapable [isSelfServicePasswordResetCapable]'
161
+ }, {
162
+ option: '--isMfaRegistered [isMfaRegistered]'
163
+ }, {
164
+ option: '--isMfaCapable [isMfaCapable]'
165
+ }, {
166
+ option: '--isPasswordlessCapable [isPasswordlessCapable]'
167
+ }, {
168
+ option: '--isSystemPreferredAuthenticationMethodEnabled [isSystemPreferredAuthenticationMethodEnabled]'
169
+ }, {
170
+ option: '--methodsRegistered [methodsRegistered]',
171
+ autocomplete: methodsRegistered
172
+ }, {
173
+ option: '--userIds [userIds]'
174
+ }, {
175
+ option: '--userPrincipalNames [userPrincipalNames]'
176
+ }, {
177
+ option: '-p, --properties [properties]'
178
+ });
179
+ }, _EntraUserRegistrationDetailsListCommand_initValidators = function _EntraUserRegistrationDetailsListCommand_initValidators() {
180
+ this.validators.push(async (args) => {
181
+ if (args.options.userType) {
182
+ if (['member', 'guest'].every(type => type !== args.options.userType)) {
183
+ return `'${args.options.userType}' is not a valid userType value. Allowed values member, guest`;
184
+ }
185
+ }
186
+ if (args.options.userPreferredMethodForSecondaryAuthentication) {
187
+ const methods = args.options.userPreferredMethodForSecondaryAuthentication.split(',').map(m => m.trim());
188
+ const invalidMethods = methods.filter(m => !authenticationMethods.includes(m));
189
+ if (invalidMethods.length > 0) {
190
+ return `'${args.options.userPreferredMethodForSecondaryAuthentication}' is not a valid userPreferredMethodForSecondaryAuthentication value. Invalid values: ${invalidMethods.join(',')}. Allowed values ${authenticationMethods.join(', ')}`;
191
+ }
192
+ }
193
+ if (args.options.systemPreferredAuthenticationMethods) {
194
+ const methods = args.options.systemPreferredAuthenticationMethods.split(',').map(m => m.trim());
195
+ const invalidMethods = methods.filter(m => !authenticationMethods.includes(m));
196
+ if (invalidMethods.length > 0) {
197
+ return `'${args.options.systemPreferredAuthenticationMethods}' is not a valid systemPreferredAuthenticationMethods value. Invalid values: ${invalidMethods.join(',')}. Allowed values ${authenticationMethods.join(', ')}`;
198
+ }
199
+ }
200
+ if (args.options.methodsRegistered) {
201
+ const methods = args.options.methodsRegistered.split(',').map(m => m.trim());
202
+ const invalidMethods = methods.filter(m => !methodsRegistered.includes(m));
203
+ if (invalidMethods.length > 0) {
204
+ return `'${args.options.methodsRegistered}' is not a valid methodsRegistered value. Invalid values: ${invalidMethods.join(',')}. Allowed values ${methodsRegistered.join(', ')}`;
205
+ }
206
+ }
207
+ if (args.options.userIds) {
208
+ const ids = args.options.userIds.split(',').map(i => i.trim());
209
+ if (!validation.isValidGuidArray(ids)) {
210
+ const invalidGuid = ids.find(id => !validation.isValidGuid(id));
211
+ return `'${invalidGuid}' is not a valid GUID for option 'userIds'.`;
212
+ }
213
+ }
214
+ if (args.options.userPrincipalNames) {
215
+ const isValidUserPrincipalNameArray = validation.isValidUserPrincipalNameArray(args.options.userPrincipalNames.split(',').map(u => u.trim()));
216
+ if (isValidUserPrincipalNameArray !== true) {
217
+ return `User principal name '${isValidUserPrincipalNameArray}' is invalid for option 'userPrincipalNames'.`;
218
+ }
219
+ }
220
+ return true;
221
+ });
222
+ };
223
+ export default new EntraUserRegistrationDetailsListCommand();
224
+ //# sourceMappingURL=user-registrationdetails-list.js.map
@@ -7,6 +7,7 @@ export default {
7
7
  ADMINISTRATIVEUNIT_MEMBER_ADD: `${prefix} administrativeunit member add`,
8
8
  ADMINISTRATIVEUNIT_MEMBER_GET: `${prefix} administrativeunit member get`,
9
9
  ADMINISTRATIVEUNIT_MEMBER_LIST: `${prefix} administrativeunit member list`,
10
+ ADMINISTRATIVEUNIT_MEMBER_REMOVE: `${prefix} administrativeunit member remove`,
10
11
  ADMINISTRATIVEUNIT_ROLEASSIGNMENT_ADD: `${prefix} administrativeunit roleassignment add`,
11
12
  APP_ADD: `${prefix} app add`,
12
13
  APP_GET: `${prefix} app get`,
@@ -14,15 +15,30 @@ export default {
14
15
  APP_REMOVE: `${prefix} app remove`,
15
16
  APP_SET: `${prefix} app set`,
16
17
  APP_PERMISSION_ADD: `${prefix} app permission add`,
18
+ APP_PERMISSION_LIST: `${prefix} app permission list`,
17
19
  APP_ROLE_ADD: `${prefix} app role add`,
18
20
  APP_ROLE_LIST: `${prefix} app role list`,
19
21
  APP_ROLE_REMOVE: `${prefix} app role remove`,
22
+ APPREGISTRATION_ADD: `${prefix} appregistration add`,
23
+ APPREGISTRATION_GET: `${prefix} appregistration get`,
24
+ APPREGISTRATION_LIST: `${prefix} appregistration list`,
25
+ APPREGISTRATION_REMOVE: `${prefix} appregistration remove`,
26
+ APPREGISTRATION_SET: `${prefix} appregistration set`,
27
+ APPREGISTRATION_PERMISSION_ADD: `${prefix} appregistration permission add`,
28
+ APPREGISTRATION_ROLE_ADD: `${prefix} appregistration role add`,
29
+ APPREGISTRATION_ROLE_LIST: `${prefix} appregistration role list`,
30
+ APPREGISTRATION_ROLE_REMOVE: `${prefix} appregistration role remove`,
20
31
  APPROLEASSIGNMENT_ADD: `${prefix} approleassignment add`,
21
32
  APPROLEASSIGNMENT_LIST: `${prefix} approleassignment list`,
22
33
  APPROLEASSIGNMENT_REMOVE: `${prefix} approleassignment remove`,
34
+ ENTERPRISEAPP_ADD: `${prefix} enterpriseapp add`,
35
+ ENTERPRISEAPP_GET: `${prefix} enterpriseapp get`,
36
+ ENTERPRISEAPP_LIST: `${prefix} enterpriseapp list`,
37
+ GROUP_ADD: `${prefix} group add`,
23
38
  GROUP_GET: `${prefix} group get`,
24
39
  GROUP_LIST: `${prefix} group list`,
25
40
  GROUP_REMOVE: `${prefix} group remove`,
41
+ GROUP_USER_ADD: `${prefix} group user add`,
26
42
  GROUP_USER_LIST: `${prefix} group user list`,
27
43
  GROUPSETTING_ADD: `${prefix} groupsetting add`,
28
44
  GROUPSETTING_GET: `${prefix} groupsetting get`,
@@ -78,6 +94,7 @@ export default {
78
94
  USER_RECYCLEBINITEM_CLEAR: `${prefix} user recyclebinitem clear`,
79
95
  USER_RECYCLEBINITEM_LIST: `${prefix} user recyclebinitem list`,
80
96
  USER_RECYCLEBINITEM_REMOVE: `${prefix} user recyclebinitem remove`,
97
+ USER_REGISTRATIONDETAILS_LIST: `${prefix} user registrationdetails list`,
81
98
  USER_REMOVE: `${prefix} user remove`,
82
99
  USER_RECYCLEBINITEM_RESTORE: `${prefix} user recyclebinitem restore`,
83
100
  USER_SET: `${prefix} user set`,
@@ -228,7 +228,8 @@ class ExternalConnectionDoctorCommand extends GraphCommand {
228
228
  const requestOptions = {
229
229
  url: `${this.resource}/v1.0/external/connections/${args.options.id}/schema`,
230
230
  headers: {
231
- accept: 'application/json;odata.metadata=none'
231
+ accept: 'application/json;odata.metadata=none',
232
+ prefer: 'include-unknown-enum-members'
232
233
  },
233
234
  responseType: 'json'
234
235
  };
@@ -0,0 +1,151 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _FileCopyCommand_instances, _FileCopyCommand_initTelemetry, _FileCopyCommand_initOptions, _FileCopyCommand_initValidators;
7
+ import request from '../../../request.js';
8
+ import { urlUtil } from '../../../utils/urlUtil.js';
9
+ import { spo } from '../../../utils/spo.js';
10
+ import { validation } from '../../../utils/validation.js';
11
+ import GraphCommand from '../../base/GraphCommand.js';
12
+ import commands from '../commands.js';
13
+ class FileCopyCommand extends GraphCommand {
14
+ get name() {
15
+ return commands.COPY;
16
+ }
17
+ get description() {
18
+ return 'Copies a file to another location using the Microsoft Graph';
19
+ }
20
+ constructor() {
21
+ super();
22
+ _FileCopyCommand_instances.add(this);
23
+ this.nameConflictBehaviorOptions = ['fail', 'replace', 'rename'];
24
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initTelemetry).call(this);
25
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initOptions).call(this);
26
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initValidators).call(this);
27
+ }
28
+ async commandAction(logger, args) {
29
+ try {
30
+ const { webUrl, sourceUrl, targetUrl, newName, verbose } = args.options;
31
+ const sourcePath = this.getAbsoluteUrl(webUrl, sourceUrl);
32
+ const destinationPath = this.getAbsoluteUrl(webUrl, targetUrl);
33
+ if (this.verbose) {
34
+ logger.logToStderr(`Copying file '${sourcePath}' to '${destinationPath}'...`);
35
+ }
36
+ const copyUrl = await this.getCopyUrl(args.options, sourcePath, logger);
37
+ const { targetDriveId, targetItemId } = await this.getTargetDriveAndItemId(webUrl, targetUrl, logger, verbose);
38
+ const requestOptions = {
39
+ url: copyUrl,
40
+ headers: {
41
+ accept: 'application/json;odata.metadata=none'
42
+ },
43
+ responseType: 'json',
44
+ data: {
45
+ parentReference: {
46
+ driveId: targetDriveId,
47
+ id: targetItemId
48
+ }
49
+ }
50
+ };
51
+ if (newName) {
52
+ const sourceFileName = sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
53
+ const sourceFileExtension = sourceFileName.includes('.') ? sourceFileName.substring(sourceFileName.lastIndexOf('.')) : '';
54
+ const newNameExtension = newName.includes('.') ? newName.substring(newName.lastIndexOf('.')) : '';
55
+ requestOptions.data.name = newNameExtension ? `${newName.replace(newNameExtension, "")}${sourceFileExtension}` : `${newName}${sourceFileExtension}`;
56
+ }
57
+ await request.post(requestOptions);
58
+ }
59
+ catch (err) {
60
+ this.handleRejectedODataJsonPromise(err);
61
+ }
62
+ }
63
+ async getCopyUrl(options, sourcePath, logger) {
64
+ const { webUrl, sourceUrl, verbose, nameConflictBehavior } = options;
65
+ const folderUrl = new URL(sourcePath);
66
+ const siteId = await spo.getSiteId(webUrl, logger, verbose);
67
+ const drive = await this.getDocumentLibrary(siteId, folderUrl, sourceUrl, logger);
68
+ const itemId = await this.getStartingFolderId(drive, folderUrl, logger);
69
+ const queryParameters = nameConflictBehavior && nameConflictBehavior !== 'fail'
70
+ ? `@microsoft.graph.conflictBehavior=${nameConflictBehavior}`
71
+ : '';
72
+ const copyUrl = `${this.resource}/v1.0/sites/${siteId}/drives/${drive.id}/items/${itemId}/copy${queryParameters ? `?${queryParameters}` : ''}`;
73
+ return copyUrl;
74
+ }
75
+ async getTargetDriveAndItemId(webUrl, targetUrl, logger, verbose) {
76
+ const targetSiteUrl = urlUtil.getTargetSiteAbsoluteUrl(webUrl, targetUrl);
77
+ const targetSiteId = await spo.getSiteId(targetSiteUrl, logger, verbose);
78
+ const targetFolderUrl = new URL(this.getAbsoluteUrl(targetSiteUrl, targetUrl));
79
+ const targetDrive = await this.getDocumentLibrary(targetSiteId, targetFolderUrl, targetUrl, logger);
80
+ const targetDriveId = targetDrive.id;
81
+ const targetItemId = await this.getStartingFolderId(targetDrive, targetFolderUrl, logger);
82
+ return { targetDriveId, targetItemId };
83
+ }
84
+ async getDocumentLibrary(siteId, folderUrl, folderUrlFromUser, logger) {
85
+ if (this.verbose) {
86
+ logger.logToStderr(`Getting document library...`);
87
+ }
88
+ const requestOptions = {
89
+ url: `${this.resource}/v1.0/sites/${siteId}/drives?$select=webUrl,id`,
90
+ headers: {
91
+ accept: 'application/json;odata.metadata=none'
92
+ },
93
+ responseType: 'json'
94
+ };
95
+ const drives = await request.get(requestOptions);
96
+ const lowerCaseFolderUrl = folderUrl.href.toLowerCase();
97
+ const drive = drives.value
98
+ .sort((a, b) => b.webUrl.localeCompare(a.webUrl))
99
+ .find((d) => {
100
+ const driveUrl = d.webUrl.toLowerCase();
101
+ // ensure that the drive url is a prefix of the folder url
102
+ return lowerCaseFolderUrl.startsWith(driveUrl) &&
103
+ (driveUrl.length === lowerCaseFolderUrl.length ||
104
+ lowerCaseFolderUrl[driveUrl.length] === '/');
105
+ });
106
+ if (!drive) {
107
+ throw `Document library '${folderUrlFromUser}' not found`;
108
+ }
109
+ return drive;
110
+ }
111
+ async getStartingFolderId(documentLibrary, folderUrl, logger) {
112
+ if (this.verbose) {
113
+ logger.logToStderr(`Getting starting folder id...`);
114
+ }
115
+ const documentLibraryRelativeFolderUrl = folderUrl.href.replace(new RegExp(`${documentLibrary.webUrl}`, 'i'), '').replace(/\/+$/, '');
116
+ const requestOptions = {
117
+ url: `${this.resource}/v1.0/drives/${documentLibrary.id}/root${documentLibraryRelativeFolderUrl ? `:${documentLibraryRelativeFolderUrl}` : ''}?$select=id`,
118
+ headers: {
119
+ accept: 'application/json;odata.metadata=none'
120
+ },
121
+ responseType: 'json'
122
+ };
123
+ const folder = await request.get(requestOptions);
124
+ return folder?.id;
125
+ }
126
+ getAbsoluteUrl(webUrl, url) {
127
+ return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
128
+ }
129
+ }
130
+ _FileCopyCommand_instances = new WeakSet(), _FileCopyCommand_initTelemetry = function _FileCopyCommand_initTelemetry() {
131
+ this.telemetry.push((args) => {
132
+ Object.assign(this.telemetryProperties, {
133
+ webUrl: typeof args.options.webUrl !== 'undefined',
134
+ sourceUrl: typeof args.options.sourceUrl !== 'undefined',
135
+ targetUrl: typeof args.options.targetUrl !== 'undefined',
136
+ newName: typeof args.options.newName !== 'undefined',
137
+ nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined'
138
+ });
139
+ });
140
+ }, _FileCopyCommand_initOptions = function _FileCopyCommand_initOptions() {
141
+ this.options.unshift({ option: '-u, --webUrl <webUrl>' }, { option: '-s, --sourceUrl <sourceUrl>' }, { option: '-t, --targetUrl <targetUrl>' }, { option: '--newName [newName]' }, { option: '--nameConflictBehavior [nameConflictBehavior]', autocomplete: this.nameConflictBehaviorOptions });
142
+ }, _FileCopyCommand_initValidators = function _FileCopyCommand_initValidators() {
143
+ this.validators.push(async (args) => {
144
+ if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
145
+ return `${args.options.nameConflictBehavior} is not a valid nameConflictBehavior value. Allowed values: ${this.nameConflictBehaviorOptions.join(', ')}.`;
146
+ }
147
+ return validation.isValidSharePointUrl(args.options.webUrl);
148
+ });
149
+ };
150
+ export default new FileCopyCommand();
151
+ //# sourceMappingURL=file-copy.js.map
@@ -2,6 +2,7 @@ const prefix = 'file';
2
2
  export default {
3
3
  ADD: `${prefix} add`,
4
4
  CONVERT_PDF: `${prefix} convert pdf`,
5
+ COPY: `${prefix} copy`,
5
6
  LIST: `${prefix} list`
6
7
  };
7
8
  //# sourceMappingURL=commands.js.map
@@ -5,8 +5,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
5
5
  };
6
6
  var _FlowOwnerEnsureCommand_instances, _a, _FlowOwnerEnsureCommand_initTelemetry, _FlowOwnerEnsureCommand_initOptions, _FlowOwnerEnsureCommand_initOptionSets, _FlowOwnerEnsureCommand_initValidators;
7
7
  import request from '../../../../request.js';
8
- import { aadGroup } from '../../../../utils/aadGroup.js';
9
- import { aadUser } from '../../../../utils/aadUser.js';
8
+ import { entraGroup } from '../../../../utils/entraGroup.js';
9
+ import { entraUser } from '../../../../utils/entraUser.js';
10
10
  import { formatting } from '../../../../utils/formatting.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import PowerAutomateCommand from '../../../base/PowerAutomateCommand.js';
@@ -36,13 +36,13 @@ class FlowOwnerEnsureCommand extends PowerAutomateCommand {
36
36
  id = args.options.userId;
37
37
  }
38
38
  else if (args.options.userName) {
39
- id = await aadUser.getUserIdByUpn(args.options.userName);
39
+ id = await entraUser.getUserIdByUpn(args.options.userName);
40
40
  }
41
41
  else if (args.options.groupId) {
42
42
  id = args.options.groupId;
43
43
  }
44
44
  else {
45
- id = await aadGroup.getGroupIdByDisplayName(args.options.groupName);
45
+ id = await entraGroup.getGroupIdByDisplayName(args.options.groupName);
46
46
  }
47
47
  let type;
48
48
  if (args.options.userId || args.options.userName) {
@@ -6,8 +6,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
6
6
  var _FlowOwnerRemoveCommand_instances, _FlowOwnerRemoveCommand_initTelemetry, _FlowOwnerRemoveCommand_initOptions, _FlowOwnerRemoveCommand_initValidators, _FlowOwnerRemoveCommand_initOptionSets;
7
7
  import { cli } from '../../../../cli/cli.js';
8
8
  import request from '../../../../request.js';
9
- import { aadGroup } from '../../../../utils/aadGroup.js';
10
- import { aadUser } from '../../../../utils/aadUser.js';
9
+ import { entraGroup } from '../../../../utils/entraGroup.js';
10
+ import { entraUser } from '../../../../utils/entraUser.js';
11
11
  import { formatting } from '../../../../utils/formatting.js';
12
12
  import { validation } from '../../../../utils/validation.js';
13
13
  import PowerAutomateCommand from '../../../base/PowerAutomateCommand.js';
@@ -38,13 +38,13 @@ class FlowOwnerRemoveCommand extends PowerAutomateCommand {
38
38
  idToRemove = args.options.userId;
39
39
  }
40
40
  else if (args.options.userName) {
41
- idToRemove = await aadUser.getUserIdByUpn(args.options.userName);
41
+ idToRemove = await entraUser.getUserIdByUpn(args.options.userName);
42
42
  }
43
43
  else if (args.options.groupId) {
44
44
  idToRemove = args.options.groupId;
45
45
  }
46
46
  else {
47
- idToRemove = await aadGroup.getGroupIdByDisplayName(args.options.groupName);
47
+ idToRemove = await entraGroup.getGroupIdByDisplayName(args.options.groupName);
48
48
  }
49
49
  const requestOptions = {
50
50
  url: `${this.resource}/providers/Microsoft.ProcessSimple/${args.options.asAdmin ? 'scopes/admin/' : ''}environments/${formatting.encodeQueryParameter(args.options.environmentName)}/flows/${formatting.encodeQueryParameter(args.options.flowName)}/modifyPermissions?api-version=2016-11-01`,