@pnp/cli-microsoft365 10.0.0-beta.48e9f7d → 10.0.0-beta.558f289

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 (379) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/allCommands.json +1 -1
  3. package/allCommandsFull.json +1 -1
  4. package/dist/Auth.js +17 -16
  5. package/dist/AuthServer.js +7 -7
  6. package/dist/Command.js +4 -1
  7. package/dist/api.js +1 -1
  8. package/dist/appInsights.js +6 -4
  9. package/dist/cli/cli.js +14 -0
  10. package/dist/config.js +61 -5
  11. package/dist/m365/base/PowerAutomateCommand.js +1 -1
  12. package/dist/m365/base/SpoCommand.js +1 -1
  13. package/dist/m365/cli/commands/cli-consent.js +2 -2
  14. package/dist/m365/cli/commands/cli-doctor.js +4 -4
  15. package/dist/m365/cli/commands/config/config-set.js +12 -4
  16. package/dist/m365/cli/commands.js +1 -2
  17. package/dist/m365/commands/login.js +133 -61
  18. package/dist/m365/commands/setup.js +256 -33
  19. package/dist/m365/commands/setupPresets.js +2 -4
  20. package/dist/m365/connection/commands/connection-list.js +4 -4
  21. package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +0 -5
  22. package/dist/m365/entra/commands/administrativeunit/administrativeunit-get.js +0 -5
  23. package/dist/m365/entra/commands/administrativeunit/administrativeunit-list.js +0 -5
  24. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-add.js +0 -5
  25. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-get.js +0 -5
  26. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-list.js +0 -5
  27. package/dist/m365/entra/commands/administrativeunit/administrativeunit-remove.js +0 -5
  28. package/dist/m365/entra/commands/app/app-add.js +51 -292
  29. package/dist/m365/entra/commands/app/app-get.js +0 -5
  30. package/dist/m365/entra/commands/app/app-list.js +0 -5
  31. package/dist/m365/entra/commands/app/app-permission-add.js +0 -5
  32. package/dist/m365/entra/commands/app/app-remove.js +0 -5
  33. package/dist/m365/entra/commands/app/app-role-add.js +0 -5
  34. package/dist/m365/entra/commands/app/app-role-list.js +0 -5
  35. package/dist/m365/entra/commands/app/app-role-remove.js +0 -5
  36. package/dist/m365/entra/commands/app/app-set.js +0 -5
  37. package/dist/m365/entra/commands/approleassignment/approleassignment-add.js +0 -5
  38. package/dist/m365/entra/commands/approleassignment/approleassignment-list.js +0 -5
  39. package/dist/m365/entra/commands/approleassignment/approleassignment-remove.js +0 -5
  40. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-add.js +0 -5
  41. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-get.js +0 -5
  42. package/dist/m365/entra/commands/enterpriseapp/enterpriseapp-list.js +0 -5
  43. package/dist/m365/entra/commands/group/group-add.js +0 -4
  44. package/dist/m365/entra/commands/group/group-get.js +0 -5
  45. package/dist/m365/entra/commands/group/group-list.js +0 -5
  46. package/dist/m365/entra/commands/group/{group-user-add.js → group-member-add.js} +18 -18
  47. package/dist/m365/entra/commands/group/{group-user-list.js → group-member-list.js} +16 -21
  48. package/dist/m365/entra/commands/group/{group-user-set.js → group-member-set.js} +19 -19
  49. package/dist/m365/entra/commands/group/group-remove.js +0 -5
  50. package/dist/m365/entra/commands/groupsetting/groupsetting-add.js +0 -5
  51. package/dist/m365/entra/commands/groupsetting/groupsetting-get.js +0 -5
  52. package/dist/m365/entra/commands/groupsetting/groupsetting-list.js +0 -5
  53. package/dist/m365/entra/commands/groupsetting/groupsetting-remove.js +0 -5
  54. package/dist/m365/entra/commands/groupsetting/groupsetting-set.js +0 -5
  55. package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-get.js +0 -5
  56. package/dist/m365/entra/commands/groupsettingtemplate/groupsettingtemplate-list.js +0 -5
  57. package/dist/m365/entra/commands/license/license-list.js +0 -5
  58. package/dist/m365/entra/commands/m365group/m365group-add.js +0 -5
  59. package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +0 -5
  60. package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +0 -5
  61. package/dist/m365/entra/commands/m365group/m365group-get.js +0 -5
  62. package/dist/m365/entra/commands/m365group/m365group-list.js +0 -5
  63. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-clear.js +0 -5
  64. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-list.js +0 -5
  65. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-remove.js +0 -5
  66. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-restore.js +0 -5
  67. package/dist/m365/entra/commands/m365group/m365group-remove.js +0 -5
  68. package/dist/m365/entra/commands/m365group/m365group-renew.js +0 -5
  69. package/dist/m365/entra/commands/m365group/m365group-report-activitycounts.js +0 -4
  70. package/dist/m365/entra/commands/m365group/m365group-report-activitydetail.js +0 -4
  71. package/dist/m365/entra/commands/m365group/m365group-report-activityfilecounts.js +0 -4
  72. package/dist/m365/entra/commands/m365group/m365group-report-activitygroupcounts.js +0 -4
  73. package/dist/m365/entra/commands/m365group/m365group-report-activitystorage.js +0 -4
  74. package/dist/m365/entra/commands/m365group/m365group-set.js +159 -86
  75. package/dist/m365/entra/commands/m365group/m365group-teamify.js +0 -5
  76. package/dist/m365/entra/commands/m365group/m365group-user-add.js +5 -18
  77. package/dist/m365/entra/commands/m365group/m365group-user-list.js +0 -5
  78. package/dist/m365/entra/commands/m365group/m365group-user-remove.js +84 -62
  79. package/dist/m365/entra/commands/m365group/m365group-user-set.js +3 -15
  80. package/dist/m365/entra/commands/oauth2grant/oauth2grant-add.js +0 -5
  81. package/dist/m365/entra/commands/oauth2grant/oauth2grant-list.js +3 -17
  82. package/dist/m365/entra/commands/oauth2grant/oauth2grant-remove.js +0 -5
  83. package/dist/m365/entra/commands/oauth2grant/oauth2grant-set.js +0 -5
  84. package/dist/m365/entra/commands/policy/policy-list.js +0 -5
  85. package/dist/m365/entra/commands/siteclassification/siteclassification-disable.js +0 -5
  86. package/dist/m365/entra/commands/siteclassification/siteclassification-enable.js +0 -5
  87. package/dist/m365/entra/commands/siteclassification/siteclassification-get.js +0 -5
  88. package/dist/m365/entra/commands/siteclassification/siteclassification-set.js +0 -5
  89. package/dist/m365/entra/commands/user/user-add.js +0 -5
  90. package/dist/m365/entra/commands/user/user-get.js +0 -5
  91. package/dist/m365/entra/commands/user/user-guest-add.js +0 -5
  92. package/dist/m365/entra/commands/user/user-hibp.js +0 -5
  93. package/dist/m365/entra/commands/user/user-license-add.js +0 -5
  94. package/dist/m365/entra/commands/user/user-license-list.js +0 -5
  95. package/dist/m365/entra/commands/user/user-license-remove.js +0 -5
  96. package/dist/m365/entra/commands/user/user-list.js +0 -5
  97. package/dist/m365/entra/commands/user/user-password-validate.js +0 -5
  98. package/dist/m365/entra/commands/user/user-recyclebinitem-clear.js +0 -5
  99. package/dist/m365/entra/commands/user/user-recyclebinitem-list.js +0 -5
  100. package/dist/m365/entra/commands/user/user-recyclebinitem-remove.js +0 -5
  101. package/dist/m365/entra/commands/user/user-recyclebinitem-restore.js +0 -5
  102. package/dist/m365/entra/commands/user/user-registrationdetails-list.js +0 -4
  103. package/dist/m365/entra/commands/user/user-remove.js +0 -5
  104. package/dist/m365/entra/commands/user/user-set.js +0 -5
  105. package/dist/m365/entra/commands/user/user-signin-list.js +0 -5
  106. package/dist/m365/entra/commands.js +3 -3
  107. package/dist/m365/external/commands/item/item-add.js +2 -5
  108. package/dist/m365/file/commands/file-move.js +135 -0
  109. package/dist/m365/file/commands.js +2 -1
  110. package/dist/m365/flow/commands/environment/environment-get.js +1 -1
  111. package/dist/m365/flow/commands/environment/environment-list.js +2 -2
  112. package/dist/m365/flow/commands/flow-disable.js +1 -1
  113. package/dist/m365/flow/commands/flow-enable.js +1 -1
  114. package/dist/m365/flow/commands/flow-export.js +17 -16
  115. package/dist/m365/flow/commands/flow-get.js +1 -1
  116. package/dist/m365/flow/commands/flow-list.js +1 -1
  117. package/dist/m365/flow/commands/flow-remove.js +1 -1
  118. package/dist/m365/flow/commands/owner/owner-ensure.js +1 -1
  119. package/dist/m365/flow/commands/owner/owner-list.js +1 -1
  120. package/dist/m365/flow/commands/owner/owner-remove.js +1 -1
  121. package/dist/m365/flow/commands/recyclebinitem/recyclebinitem-list.js +47 -0
  122. package/dist/m365/flow/commands/recyclebinitem/recyclebinitem-restore.js +48 -0
  123. package/dist/m365/flow/commands/run/run-cancel.js +1 -1
  124. package/dist/m365/flow/commands/run/run-get.js +1 -1
  125. package/dist/m365/flow/commands/run/run-list.js +1 -1
  126. package/dist/m365/flow/commands/run/run-resubmit.js +2 -2
  127. package/dist/m365/flow/commands.js +2 -0
  128. package/dist/m365/pa/commands/app/app-list.js +1 -6
  129. package/dist/m365/pa/commands/connector/connector-list.js +1 -6
  130. package/dist/m365/pa/commands/environment/environment-list.js +1 -1
  131. package/dist/m365/pp/commands/environment/environment-list.js +1 -1
  132. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.20.0.js +27 -0
  133. package/dist/m365/spfx/commands/project/project-doctor/rules/FN002021_DEVDEP_rushstack_eslint_config.js +10 -0
  134. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  135. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.20.0.js +59 -0
  136. package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
  137. package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
  138. package/dist/m365/spo/commands/app/app-instance-list.js +3 -18
  139. package/dist/m365/spo/commands/app/app-list.js +1 -8
  140. package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +8 -8
  141. package/dist/m365/spo/commands/contenttype/contenttype-field-set.js +2 -2
  142. package/dist/m365/spo/commands/feature/feature-list.js +1 -8
  143. package/dist/m365/spo/commands/file/file-copy.js +11 -7
  144. package/dist/m365/spo/commands/file/file-move.js +55 -33
  145. package/dist/m365/spo/commands/file/file-remove.js +7 -1
  146. package/dist/m365/spo/commands/file/file-roleassignment-add.js +17 -54
  147. package/dist/m365/spo/commands/file/file-roleassignment-remove.js +13 -40
  148. package/dist/m365/spo/commands/file/file-roleinheritance-break.js +5 -13
  149. package/dist/m365/spo/commands/file/file-roleinheritance-reset.js +5 -13
  150. package/dist/m365/spo/commands/folder/folder-copy.js +43 -35
  151. package/dist/m365/spo/commands/folder/folder-move.js +43 -35
  152. package/dist/m365/spo/commands/folder/folder-sharinglink-add.js +143 -0
  153. package/dist/m365/spo/commands/folder/folder-sharinglink-clear.js +111 -0
  154. package/dist/m365/spo/commands/folder/folder-sharinglink-remove.js +95 -0
  155. package/dist/m365/spo/commands/folder/folder-sharinglink-set.js +90 -0
  156. package/dist/m365/spo/commands/group/group-member-add.js +3 -23
  157. package/dist/m365/spo/commands/group/group-member-remove.js +1 -18
  158. package/dist/m365/spo/commands/list/list-get.js +17 -4
  159. package/dist/m365/spo/commands/list/list-remove.js +14 -4
  160. package/dist/m365/spo/commands/list/list-webhook-list.js +1 -6
  161. package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +1 -8
  162. package/dist/m365/spo/commands/page/page-list.js +1 -1
  163. package/dist/m365/spo/commands/page/page-publish.js +54 -0
  164. package/dist/m365/spo/commands/page/page-remove.js +37 -16
  165. package/dist/m365/spo/commands/page/page-section-add.js +185 -34
  166. package/dist/m365/spo/commands/page/page-template-list.js +1 -3
  167. package/dist/m365/spo/commands/site/SiteAdmin.js +2 -0
  168. package/dist/m365/spo/commands/site/site-admin-add.js +252 -0
  169. package/dist/m365/spo/commands/site/site-admin-list.js +10 -36
  170. package/dist/m365/spo/commands/site/site-admin-remove.js +194 -0
  171. package/dist/m365/spo/commands/site/site-sharingpermission-set.js +68 -0
  172. package/dist/m365/spo/commands/sitescript/sitescript-get.js +3 -2
  173. package/dist/m365/spo/commands/sitescript/sitescript-list.js +1 -3
  174. package/dist/m365/spo/commands/tenant/SPOTenantSitePropertiesEnumerable.js +2 -0
  175. package/dist/m365/spo/commands/tenant/TenantSiteProperties.js +2 -0
  176. package/dist/m365/spo/commands/{site/site-list.js → tenant/tenant-site-list.js} +15 -12
  177. package/dist/m365/spo/commands/tenant/tenant-site-membership-list.js +118 -0
  178. package/dist/m365/spo/commands/{site/site-rename.js → tenant/tenant-site-rename.js} +29 -32
  179. package/dist/m365/spo/commands/theme/theme-list.js +1 -1
  180. package/dist/m365/spo/commands/user/user-ensure.js +1 -11
  181. package/dist/m365/spo/commands/user/user-get.js +67 -9
  182. package/dist/m365/spo/commands/userprofile/userprofile-get.js +1 -1
  183. package/dist/m365/spo/commands/web/web-clientsidewebpart-list.js +1 -6
  184. package/dist/m365/spo/commands.js +11 -1
  185. package/dist/m365/spp/commands/contentcenter/contentcenter-list.js +56 -0
  186. package/dist/m365/spp/commands/model/model-list.js +57 -0
  187. package/dist/m365/spp/commands.js +6 -0
  188. package/dist/m365/teams/MeetingTranscript.js +2 -0
  189. package/dist/m365/teams/commands/cache/cache-remove.js +74 -34
  190. package/dist/m365/teams/commands/channel/channel-get.js +15 -50
  191. package/dist/m365/teams/commands/meeting/meeting-transcript-get.js +152 -0
  192. package/dist/m365/teams/commands/tab/tab-list.js +5 -3
  193. package/dist/m365/teams/commands/team/team-get.js +16 -21
  194. package/dist/m365/teams/commands.js +1 -0
  195. package/dist/m365/viva/commands/engage/Community.js +2 -0
  196. package/dist/m365/viva/commands/engage/engage-community-list.js +28 -0
  197. package/dist/m365/viva/commands/engage/engage-community-user-list.js +98 -0
  198. package/dist/m365/viva/commands.js +2 -0
  199. package/dist/request.js +46 -61
  200. package/dist/settingsNames.js +6 -1
  201. package/dist/telemetryRunner.js +2 -2
  202. package/dist/utils/entraApp.js +283 -0
  203. package/dist/utils/spo.js +166 -29
  204. package/dist/utils/spp.js +22 -0
  205. package/dist/utils/teams.js +47 -5
  206. package/dist/utils/timersUtil.js +13 -0
  207. package/dist/utils/urlUtil.js +8 -0
  208. package/dist/utils/vivaEngage.js +61 -0
  209. package/dist/utils/zod.js +12 -3
  210. package/docs/docs/_clisettings.mdx +6 -1
  211. package/docs/docs/cmd/cli/cli-doctor.mdx +24 -23
  212. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-add.mdx +0 -6
  213. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-get.mdx +0 -6
  214. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-list.mdx +0 -6
  215. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-add.mdx +0 -6
  216. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-get.mdx +0 -6
  217. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-list.mdx +0 -6
  218. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-remove.mdx +0 -6
  219. package/docs/docs/cmd/entra/app/app-add.mdx +0 -1
  220. package/docs/docs/cmd/entra/app/app-get.mdx +0 -1
  221. package/docs/docs/cmd/entra/app/app-list.mdx +0 -1
  222. package/docs/docs/cmd/entra/app/app-permission-add.mdx +0 -1
  223. package/docs/docs/cmd/entra/app/app-permission-list.mdx +0 -6
  224. package/docs/docs/cmd/entra/app/app-remove.mdx +0 -1
  225. package/docs/docs/cmd/entra/app/app-role-add.mdx +0 -1
  226. package/docs/docs/cmd/entra/app/app-role-list.mdx +0 -1
  227. package/docs/docs/cmd/entra/app/app-role-remove.mdx +0 -1
  228. package/docs/docs/cmd/entra/app/app-set.mdx +0 -1
  229. package/docs/docs/cmd/entra/approleassignment/approleassignment-add.mdx +0 -6
  230. package/docs/docs/cmd/entra/approleassignment/approleassignment-list.mdx +0 -6
  231. package/docs/docs/cmd/entra/approleassignment/approleassignment-remove.mdx +0 -6
  232. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-add.mdx +0 -1
  233. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-get.mdx +0 -1
  234. package/docs/docs/cmd/entra/enterpriseapp/enterpriseapp-list.mdx +0 -1
  235. package/docs/docs/cmd/entra/group/group-add.mdx +0 -6
  236. package/docs/docs/cmd/entra/group/group-get.mdx +0 -6
  237. package/docs/docs/cmd/entra/group/group-list.mdx +0 -6
  238. package/docs/docs/cmd/entra/group/group-member-add.mdx +62 -0
  239. package/docs/docs/cmd/entra/group/{group-user-list.mdx → group-member-list.mdx} +14 -20
  240. package/docs/docs/cmd/entra/group/group-member-set.mdx +62 -0
  241. package/docs/docs/cmd/entra/group/group-remove.mdx +0 -6
  242. package/docs/docs/cmd/entra/groupsetting/groupsetting-add.mdx +0 -6
  243. package/docs/docs/cmd/entra/groupsetting/groupsetting-get.mdx +0 -6
  244. package/docs/docs/cmd/entra/groupsetting/groupsetting-list.mdx +0 -6
  245. package/docs/docs/cmd/entra/groupsetting/groupsetting-remove.mdx +0 -6
  246. package/docs/docs/cmd/entra/groupsetting/groupsetting-set.mdx +0 -6
  247. package/docs/docs/cmd/entra/groupsettingtemplate/groupsettingtemplate-get.mdx +0 -6
  248. package/docs/docs/cmd/entra/groupsettingtemplate/groupsettingtemplate-list.mdx +0 -6
  249. package/docs/docs/cmd/entra/license/license-list.mdx +0 -6
  250. package/docs/docs/cmd/entra/m365group/m365group-add.mdx +0 -6
  251. package/docs/docs/cmd/entra/m365group/m365group-conversation-list.mdx +0 -6
  252. package/docs/docs/cmd/entra/m365group/m365group-conversation-post-list.mdx +0 -6
  253. package/docs/docs/cmd/entra/m365group/m365group-get.mdx +0 -6
  254. package/docs/docs/cmd/entra/m365group/m365group-list.mdx +0 -6
  255. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-clear.mdx +0 -6
  256. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-list.mdx +0 -6
  257. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-remove.mdx +0 -6
  258. package/docs/docs/cmd/entra/m365group/m365group-recyclebinitem-restore.mdx +0 -6
  259. package/docs/docs/cmd/entra/m365group/m365group-remove.mdx +0 -6
  260. package/docs/docs/cmd/entra/m365group/m365group-renew.mdx +0 -6
  261. package/docs/docs/cmd/entra/m365group/m365group-report-activitycounts.mdx +0 -6
  262. package/docs/docs/cmd/entra/m365group/m365group-report-activitydetail.mdx +0 -6
  263. package/docs/docs/cmd/entra/m365group/m365group-report-activityfilecounts.mdx +0 -6
  264. package/docs/docs/cmd/entra/m365group/m365group-report-activitygroupcounts.mdx +2 -8
  265. package/docs/docs/cmd/entra/m365group/m365group-report-activitystorage.mdx +3 -9
  266. package/docs/docs/cmd/entra/m365group/m365group-set.mdx +38 -23
  267. package/docs/docs/cmd/entra/m365group/m365group-teamify.mdx +5 -11
  268. package/docs/docs/cmd/entra/m365group/m365group-user-add.mdx +5 -14
  269. package/docs/docs/cmd/entra/m365group/m365group-user-list.mdx +0 -12
  270. package/docs/docs/cmd/entra/m365group/m365group-user-remove.mdx +26 -21
  271. package/docs/docs/cmd/entra/m365group/m365group-user-set.mdx +4 -17
  272. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +3 -9
  273. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -7
  274. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-remove.mdx +4 -10
  275. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-set.mdx +3 -9
  276. package/docs/docs/cmd/entra/policy/policy-list.mdx +3 -9
  277. package/docs/docs/cmd/entra/siteclassification/siteclassification-disable.mdx +3 -9
  278. package/docs/docs/cmd/entra/siteclassification/siteclassification-enable.mdx +7 -13
  279. package/docs/docs/cmd/entra/siteclassification/siteclassification-get.mdx +1 -7
  280. package/docs/docs/cmd/entra/siteclassification/siteclassification-set.mdx +8 -14
  281. package/docs/docs/cmd/entra/user/user-add.mdx +4 -10
  282. package/docs/docs/cmd/entra/user/user-get.mdx +7 -13
  283. package/docs/docs/cmd/entra/user/user-guest-add.mdx +3 -9
  284. package/docs/docs/cmd/entra/user/user-hibp.mdx +2 -8
  285. package/docs/docs/cmd/entra/user/user-license-add.mdx +0 -6
  286. package/docs/docs/cmd/entra/user/user-license-list.mdx +0 -6
  287. package/docs/docs/cmd/entra/user/user-license-remove.mdx +2 -8
  288. package/docs/docs/cmd/entra/user/user-list.mdx +1 -7
  289. package/docs/docs/cmd/entra/user/user-password-validate.mdx +1 -7
  290. package/docs/docs/cmd/entra/user/user-recyclebinitem-clear.mdx +2 -8
  291. package/docs/docs/cmd/entra/user/user-recyclebinitem-list.mdx +0 -6
  292. package/docs/docs/cmd/entra/user/user-recyclebinitem-remove.mdx +2 -8
  293. package/docs/docs/cmd/entra/user/user-recyclebinitem-restore.mdx +0 -6
  294. package/docs/docs/cmd/entra/user/user-registrationdetails-list.mdx +7 -13
  295. package/docs/docs/cmd/entra/user/user-remove.mdx +2 -8
  296. package/docs/docs/cmd/entra/user/user-set.mdx +0 -6
  297. package/docs/docs/cmd/entra/user/user-signin-list.mdx +9 -15
  298. package/docs/docs/cmd/external/item/item-add.mdx +3 -3
  299. package/docs/docs/cmd/file/file-move.mdx +79 -0
  300. package/docs/docs/cmd/flow/recyclebinitem/recyclebinitem-list.mdx +132 -0
  301. package/docs/docs/cmd/flow/recyclebinitem/recyclebinitem-restore.mdx +55 -0
  302. package/docs/docs/cmd/login.mdx +9 -0
  303. package/docs/docs/cmd/setup.mdx +17 -6
  304. package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -1
  305. package/docs/docs/cmd/spo/cdn/cdn-get.mdx +1 -1
  306. package/docs/docs/cmd/spo/cdn/cdn-origin-add.mdx +1 -1
  307. package/docs/docs/cmd/spo/cdn/cdn-origin-list.mdx +1 -1
  308. package/docs/docs/cmd/spo/cdn/cdn-origin-remove.mdx +1 -1
  309. package/docs/docs/cmd/spo/cdn/cdn-policy-list.mdx +1 -1
  310. package/docs/docs/cmd/spo/cdn/cdn-policy-set.mdx +1 -1
  311. package/docs/docs/cmd/spo/contenttype/contenttype-field-remove.mdx +7 -7
  312. package/docs/docs/cmd/spo/contenttype/contenttype-field-set.mdx +2 -2
  313. package/docs/docs/cmd/spo/externaluser/externaluser-list.mdx +1 -1
  314. package/docs/docs/cmd/spo/file/file-move.mdx +116 -11
  315. package/docs/docs/cmd/spo/file/file-remove.mdx +13 -4
  316. package/docs/docs/cmd/spo/folder/folder-copy.mdx +84 -13
  317. package/docs/docs/cmd/spo/folder/folder-move.mdx +84 -13
  318. package/docs/docs/cmd/spo/folder/folder-sharinglink-add.mdx +125 -0
  319. package/docs/docs/cmd/spo/folder/folder-sharinglink-clear.mdx +50 -0
  320. package/docs/docs/cmd/spo/folder/folder-sharinglink-remove.mdx +50 -0
  321. package/docs/docs/cmd/spo/folder/folder-sharinglink-set.mdx +116 -0
  322. package/docs/docs/cmd/spo/group/group-member-add.mdx +8 -14
  323. package/docs/docs/cmd/spo/group/group-member-remove.mdx +5 -11
  324. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-get.mdx +1 -1
  325. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-set.mdx +1 -1
  326. package/docs/docs/cmd/spo/homesite/homesite-remove.mdx +1 -1
  327. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-get.mdx +1 -1
  328. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-remove.mdx +1 -1
  329. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.mdx +1 -1
  330. package/docs/docs/cmd/spo/list/list-remove.mdx +10 -1
  331. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.mdx +1 -1
  332. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.mdx +1 -1
  333. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-remove.mdx +1 -1
  334. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-list.mdx +1 -1
  335. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-remove.mdx +1 -1
  336. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-set.mdx +1 -1
  337. package/docs/docs/cmd/spo/page/page-publish.mdx +41 -0
  338. package/docs/docs/cmd/spo/page/page-remove.mdx +30 -12
  339. package/docs/docs/cmd/spo/page/page-section-add.mdx +57 -2
  340. package/docs/docs/cmd/spo/site/site-admin-add.mdx +67 -0
  341. package/docs/docs/cmd/spo/site/site-admin-list.mdx +64 -12
  342. package/docs/docs/cmd/spo/site/site-admin-remove.mdx +67 -0
  343. package/docs/docs/cmd/spo/site/site-appcatalog-add.mdx +1 -1
  344. package/docs/docs/cmd/spo/site/site-appcatalog-remove.mdx +1 -1
  345. package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +1 -1
  346. package/docs/docs/cmd/spo/site/site-set.mdx +1 -1
  347. package/docs/docs/cmd/spo/site/site-sharingpermission-set.mdx +58 -0
  348. package/docs/docs/cmd/spo/sitescript/sitescript-get.mdx +14 -1
  349. package/docs/docs/cmd/spo/storageentity/storageentity-remove.mdx +1 -1
  350. package/docs/docs/cmd/spo/storageentity/storageentity-set.mdx +1 -1
  351. package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.mdx +1 -1
  352. package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.mdx +1 -1
  353. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.mdx +1 -1
  354. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.mdx +1 -1
  355. package/docs/docs/cmd/spo/tenant/tenant-settings-list.mdx +1 -1
  356. package/docs/docs/cmd/spo/{site/site-list.mdx → tenant/tenant-site-list.mdx} +19 -11
  357. package/docs/docs/cmd/spo/tenant/tenant-site-membership-list.mdx +122 -0
  358. package/docs/docs/cmd/spo/{site/site-rename.mdx → tenant/tenant-site-rename.mdx} +7 -7
  359. package/docs/docs/cmd/spo/theme/theme-apply.mdx +1 -1
  360. package/docs/docs/cmd/spo/theme/theme-get.mdx +1 -1
  361. package/docs/docs/cmd/spo/theme/theme-list.mdx +1 -1
  362. package/docs/docs/cmd/spo/theme/theme-remove.mdx +1 -1
  363. package/docs/docs/cmd/spo/theme/theme-set.mdx +1 -1
  364. package/docs/docs/cmd/spo/user/user-ensure.mdx +2 -5
  365. package/docs/docs/cmd/spo/user/user-get.mdx +35 -9
  366. package/docs/docs/cmd/spp/contentcenter/contentcenter-list.mdx +287 -0
  367. package/docs/docs/cmd/spp/model/model-list.mdx +140 -0
  368. package/docs/docs/cmd/teams/cache/cache-remove.mdx +10 -1
  369. package/docs/docs/cmd/teams/meeting/meeting-transcript-get.mdx +132 -0
  370. package/docs/docs/cmd/teams/tab/tab-list.mdx +1 -2
  371. package/docs/docs/cmd/viva/engage/engage-community-list.mdx +81 -0
  372. package/docs/docs/cmd/viva/engage/engage-community-user-list.mdx +123 -0
  373. package/npm-shrinkwrap.json +2215 -717
  374. package/package.json +20 -21
  375. package/dist/m365/cli/commands/cli-reconsent.js +0 -30
  376. package/dist/m365/entra/aadCommands.js +0 -89
  377. package/docs/docs/cmd/cli/cli-reconsent.mdx +0 -62
  378. package/docs/docs/cmd/entra/group/group-user-add.mdx +0 -62
  379. package/docs/docs/cmd/entra/group/group-user-set.mdx +0 -62
package/dist/utils/spo.js CHANGED
@@ -11,17 +11,20 @@ import { odata } from './odata.js';
11
11
  import { RoleType } from '../m365/spo/commands/roledefinition/RoleType.js';
12
12
  import { entraGroup } from './entraGroup.js';
13
13
  import { SharingCapabilities } from '../m365/spo/commands/site/SharingCapabilities.js';
14
- import { setTimeout } from 'timers/promises';
15
- export var CreateCopyJobsNameConflictBehavior;
16
- (function (CreateCopyJobsNameConflictBehavior) {
17
- CreateCopyJobsNameConflictBehavior[CreateCopyJobsNameConflictBehavior["Fail"] = 0] = "Fail";
18
- CreateCopyJobsNameConflictBehavior[CreateCopyJobsNameConflictBehavior["Replace"] = 1] = "Replace";
19
- CreateCopyJobsNameConflictBehavior[CreateCopyJobsNameConflictBehavior["Rename"] = 2] = "Rename";
20
- })(CreateCopyJobsNameConflictBehavior || (CreateCopyJobsNameConflictBehavior = {}));
14
+ import { timersUtil } from './timersUtil.js';
15
+ export var CreateFileCopyJobsNameConflictBehavior;
16
+ (function (CreateFileCopyJobsNameConflictBehavior) {
17
+ CreateFileCopyJobsNameConflictBehavior[CreateFileCopyJobsNameConflictBehavior["Fail"] = 0] = "Fail";
18
+ CreateFileCopyJobsNameConflictBehavior[CreateFileCopyJobsNameConflictBehavior["Replace"] = 1] = "Replace";
19
+ CreateFileCopyJobsNameConflictBehavior[CreateFileCopyJobsNameConflictBehavior["Rename"] = 2] = "Rename";
20
+ })(CreateFileCopyJobsNameConflictBehavior || (CreateFileCopyJobsNameConflictBehavior = {}));
21
+ export var CreateFolderCopyJobsNameConflictBehavior;
22
+ (function (CreateFolderCopyJobsNameConflictBehavior) {
23
+ CreateFolderCopyJobsNameConflictBehavior[CreateFolderCopyJobsNameConflictBehavior["Fail"] = 0] = "Fail";
24
+ CreateFolderCopyJobsNameConflictBehavior[CreateFolderCopyJobsNameConflictBehavior["Rename"] = 2] = "Rename";
25
+ })(CreateFolderCopyJobsNameConflictBehavior || (CreateFolderCopyJobsNameConflictBehavior = {}));
21
26
  // Wrapping this into a settings object so we can alter the values in tests
22
- export const settings = {
23
- pollingInterval: 3000
24
- };
27
+ const pollingInterval = 3000;
25
28
  export const spo = {
26
29
  async getRequestDigest(siteUrl) {
27
30
  const requestOptions = {
@@ -79,7 +82,7 @@ export const spo = {
79
82
  }
80
83
  return;
81
84
  }
82
- await setTimeout(operation.PollingInterval);
85
+ await timersUtil.setTimeout(pollingInterval);
83
86
  await spo.waitUntilFinished({
84
87
  operationId: JSON.stringify(operation._ObjectIdentity_),
85
88
  siteUrl,
@@ -500,10 +503,10 @@ export const spo = {
500
503
  * @param webUrl Web url
501
504
  * @param email The email of the user
502
505
  * @param logger the Logger object
503
- * @param verbose set if verbose logging should be logged
506
+ * @param verbose set for verbose logging
504
507
  */
505
508
  async getUserByEmail(webUrl, email, logger, verbose) {
506
- if (verbose) {
509
+ if (verbose && logger) {
507
510
  await logger.logToStderr(`Retrieving the spo user by email ${email}`);
508
511
  }
509
512
  const requestUrl = `${webUrl}/_api/web/siteusers/GetByEmail('${formatting.encodeQueryParameter(email)}')`;
@@ -574,10 +577,10 @@ export const spo = {
574
577
  * @param webUrl Web url
575
578
  * @param name The name of the group
576
579
  * @param logger the Logger object
577
- * @param verbose set if verbose logging should be logged
580
+ * @param verbose set for verbose logging
578
581
  */
579
582
  async getGroupByName(webUrl, name, logger, verbose) {
580
- if (verbose) {
583
+ if (verbose && logger) {
581
584
  await logger.logToStderr(`Retrieving the group by name ${name}`);
582
585
  }
583
586
  const requestUrl = `${webUrl}/_api/web/sitegroups/GetByName('${formatting.encodeQueryParameter(name)}')`;
@@ -596,10 +599,10 @@ export const spo = {
596
599
  * @param webUrl Web url
597
600
  * @param name the name of the role definition
598
601
  * @param logger the Logger object
599
- * @param debug set if debug logging should be logged
602
+ * @param verbose set for verbose logging
600
603
  */
601
- async getRoleDefinitionByName(webUrl, name, logger, debug) {
602
- if (debug) {
604
+ async getRoleDefinitionByName(webUrl, name, logger, verbose) {
605
+ if (verbose && logger) {
603
606
  await logger.logToStderr(`Retrieving the role definitions for ${name}`);
604
607
  }
605
608
  const roledefinitions = await odata.getAllItems(`${webUrl}/_api/web/roledefinitions`);
@@ -691,7 +694,7 @@ export const spo = {
691
694
  if (!wait || isComplete) {
692
695
  return;
693
696
  }
694
- await setTimeout(operation.PollingInterval);
697
+ await timersUtil.setTimeout(pollingInterval);
695
698
  await spo.waitUntilFinished({
696
699
  operationId: JSON.stringify(operation._ObjectIdentity_),
697
700
  siteUrl: spoAdminUrl,
@@ -905,7 +908,7 @@ export const spo = {
905
908
  if (!wait || isComplete) {
906
909
  return;
907
910
  }
908
- await setTimeout(operation.PollingInterval);
911
+ await timersUtil.setTimeout(pollingInterval);
909
912
  await spo.waitUntilFinished({
910
913
  operationId: JSON.stringify(operation._ObjectIdentity_),
911
914
  siteUrl: spoAdminUrl,
@@ -1051,7 +1054,7 @@ export const spo = {
1051
1054
  const operation = json[json.length - 1];
1052
1055
  const isComplete = operation.IsComplete;
1053
1056
  if (!isComplete) {
1054
- await setTimeout(operation.PollingInterval);
1057
+ await timersUtil.setTimeout(pollingInterval);
1055
1058
  await spo.waitUntilFinished({
1056
1059
  operationId: JSON.stringify(operation._ObjectIdentity_),
1057
1060
  siteUrl: spoAdminUrl,
@@ -1528,14 +1531,37 @@ export const spo = {
1528
1531
  return (itemsResponse);
1529
1532
  },
1530
1533
  /**
1531
- * Create a SharePoint copy job to copy a file/folder to another location.
1532
- * @param webUrl Absolute web URL where the source file/folder is located.
1533
- * @param sourceUrl Absolute URL of the source file/folder.
1534
+ * Retrieves the file by id.
1535
+ * Returns a FileProperties object
1536
+ * @param webUrl Web url
1537
+ * @param id the id of the file
1538
+ * @param logger the Logger object
1539
+ * @param verbose set for verbose logging
1540
+ */
1541
+ async getFileById(webUrl, id, logger, verbose) {
1542
+ if (verbose && logger) {
1543
+ await logger.logToStderr(`Retrieving the file with id ${id}`);
1544
+ }
1545
+ const requestUrl = `${webUrl}/_api/web/GetFileById('${formatting.encodeQueryParameter(id)}')`;
1546
+ const requestOptions = {
1547
+ url: requestUrl,
1548
+ headers: {
1549
+ 'accept': 'application/json;odata=nometadata'
1550
+ },
1551
+ responseType: 'json'
1552
+ };
1553
+ const file = await request.get(requestOptions);
1554
+ return file;
1555
+ },
1556
+ /**
1557
+ * Create a SharePoint copy job to copy a file to another location.
1558
+ * @param webUrl Absolute web URL where the source file is located.
1559
+ * @param sourceUrl Absolute URL of the source file.
1534
1560
  * @param destinationUrl Absolute URL of the destination folder.
1535
1561
  * @param options Options for the copy job.
1536
1562
  * @returns Copy job information. Use {@link spo.getCopyJobResult} to get the result of the copy job.
1537
1563
  */
1538
- async createCopyJob(webUrl, sourceUrl, destinationUrl, options) {
1564
+ async createFileCopyJob(webUrl, sourceUrl, destinationUrl, options) {
1539
1565
  const requestOptions = {
1540
1566
  url: `${webUrl}/_api/Site/CreateCopyJobs`,
1541
1567
  headers: {
@@ -1546,12 +1572,44 @@ export const spo = {
1546
1572
  destinationUri: destinationUrl,
1547
1573
  exportObjectUris: [sourceUrl],
1548
1574
  options: {
1549
- NameConflictBehavior: options?.nameConflictBehavior ?? CreateCopyJobsNameConflictBehavior.Fail,
1575
+ NameConflictBehavior: options?.nameConflictBehavior ?? CreateFileCopyJobsNameConflictBehavior.Fail,
1550
1576
  AllowSchemaMismatch: true,
1551
1577
  BypassSharedLock: !!options?.bypassSharedLock,
1552
1578
  IgnoreVersionHistory: !!options?.ignoreVersionHistory,
1579
+ IncludeItemPermissions: !!options?.includeItemPermissions,
1553
1580
  CustomizedItemName: options?.newName ? [options.newName] : undefined,
1554
- SameWebCopyMoveOptimization: true
1581
+ SameWebCopyMoveOptimization: true,
1582
+ IsMoveMode: options?.operation === 'move'
1583
+ }
1584
+ }
1585
+ };
1586
+ const response = await request.post(requestOptions);
1587
+ return response.value[0];
1588
+ },
1589
+ /**
1590
+ * Create a SharePoint copy job to copy a folder to another location.
1591
+ * @param webUrl Absolute web URL where the source folder is located.
1592
+ * @param sourceUrl Absolute URL of the source folder.
1593
+ * @param destinationUrl Absolute URL of the destination folder.
1594
+ * @param options Options for the copy job.
1595
+ * @returns Copy job information. Use {@link spo.getCopyJobResult} to get the result of the copy job.
1596
+ */
1597
+ async createFolderCopyJob(webUrl, sourceUrl, destinationUrl, options) {
1598
+ const requestOptions = {
1599
+ url: `${webUrl}/_api/Site/CreateCopyJobs`,
1600
+ headers: {
1601
+ accept: 'application/json;odata=nometadata'
1602
+ },
1603
+ responseType: 'json',
1604
+ data: {
1605
+ destinationUri: destinationUrl,
1606
+ exportObjectUris: [sourceUrl],
1607
+ options: {
1608
+ NameConflictBehavior: options?.nameConflictBehavior ?? CreateFolderCopyJobsNameConflictBehavior.Fail,
1609
+ AllowSchemaMismatch: true,
1610
+ CustomizedItemName: options?.newName ? [options.newName] : undefined,
1611
+ SameWebCopyMoveOptimization: true,
1612
+ IsMoveMode: options?.operation === 'move'
1555
1613
  }
1556
1614
  }
1557
1615
  };
@@ -1576,12 +1634,20 @@ export const spo = {
1576
1634
  copyJobInfo: copyJobInfo
1577
1635
  }
1578
1636
  };
1637
+ const logs = [];
1579
1638
  let progress = await request.post(requestOptions);
1639
+ const newLogs = progress.Logs?.map(l => JSON.parse(l));
1640
+ if (newLogs?.length > 0) {
1641
+ logs.push(...newLogs);
1642
+ }
1580
1643
  while (progress.JobState !== 0) {
1581
- await setTimeout(settings.pollingInterval);
1644
+ await timersUtil.setTimeout(pollingInterval);
1582
1645
  progress = await request.post(requestOptions);
1646
+ const newLogs = progress.Logs?.map(l => JSON.parse(l));
1647
+ if (newLogs?.length > 0) {
1648
+ logs.push(...newLogs);
1649
+ }
1583
1650
  }
1584
- const logs = progress.Logs.map(l => JSON.parse(l));
1585
1651
  // Check if the job has failed
1586
1652
  const errorLog = logs.find(l => l.Event === 'JobError');
1587
1653
  if (errorLog) {
@@ -1590,6 +1656,77 @@ export const spo = {
1590
1656
  // Get the destination object information
1591
1657
  const objectInfo = logs.find(l => l.Event === 'JobFinishedObjectInfo');
1592
1658
  return objectInfo;
1659
+ },
1660
+ /**
1661
+ * Gets the primary owner login from a site as admin.
1662
+ * @param adminUrl The SharePoint admin URL
1663
+ * @param siteId The site ID
1664
+ * @param logger The logger object
1665
+ * @param verbose If in verbose mode
1666
+ * @returns Owner login name
1667
+ */
1668
+ async getPrimaryAdminLoginNameAsAdmin(adminUrl, siteId, logger, verbose) {
1669
+ if (verbose) {
1670
+ await logger.logToStderr('Getting the primary admin login name...');
1671
+ }
1672
+ const requestOptions = {
1673
+ url: `${adminUrl}/_api/SPO.Tenant/sites('${siteId}')?$select=OwnerLoginName`,
1674
+ headers: {
1675
+ accept: 'application/json;odata=nometadata'
1676
+ },
1677
+ responseType: 'json'
1678
+ };
1679
+ const response = await request.get(requestOptions);
1680
+ return response.OwnerLoginName;
1681
+ },
1682
+ /**
1683
+ * Gets the primary owner login from a site.
1684
+ * @param siteUrl The site URL
1685
+ * @param logger The logger object
1686
+ * @param verbose If in verbose mode
1687
+ * @returns Owner login name
1688
+ */
1689
+ async getPrimaryOwnerLoginFromSite(siteUrl, logger, verbose) {
1690
+ if (verbose) {
1691
+ await logger.logToStderr('Getting the primary admin login name...');
1692
+ }
1693
+ const requestOptions = {
1694
+ url: `${siteUrl}/_api/site/owner`,
1695
+ headers: {
1696
+ 'accept': 'application/json;odata=nometadata'
1697
+ },
1698
+ responseType: 'json'
1699
+ };
1700
+ const responseContent = await request.get(requestOptions);
1701
+ return responseContent?.LoginName;
1702
+ },
1703
+ /**
1704
+ * Retrieves the site admin properties for a given site URL.
1705
+ * @param adminUrl The SharePoint admin url.
1706
+ * @param siteUrl URL of the site for which to retrieve properties.
1707
+ * @param includeDetail Set to true to include detailed properties.
1708
+ * @param logger The logger object.
1709
+ * @param verbose Set for verbose logging.
1710
+ * @returns Tenant Site properties.
1711
+ */
1712
+ async getSiteAdminPropertiesByUrl(siteUrl, includeDetail, logger, verbose) {
1713
+ if (verbose) {
1714
+ await logger.logToStderr(`Getting site admin properties for URL: ${siteUrl}...`);
1715
+ }
1716
+ const adminUrl = await spo.getSpoAdminUrl(logger, !!verbose);
1717
+ const requestOptions = {
1718
+ url: `${adminUrl}/_api/SPO.Tenant/GetSitePropertiesByUrl`,
1719
+ headers: {
1720
+ accept: 'application/json;odata=nometadata',
1721
+ 'content-type': 'application/json;charset=utf-8'
1722
+ },
1723
+ data: {
1724
+ url: siteUrl,
1725
+ includeDetail: includeDetail
1726
+ },
1727
+ responseType: 'json'
1728
+ };
1729
+ return request.post(requestOptions);
1593
1730
  }
1594
1731
  };
1595
1732
  //# sourceMappingURL=spo.js.map
@@ -0,0 +1,22 @@
1
+ import request from '../request.js';
2
+ export const spp = {
3
+ /**
4
+ * Asserts whether the specified site is a content center.
5
+ * @param siteUrl The URL of the site to check.
6
+ * @throws Error when the site is not a content center.
7
+ */
8
+ async assertSiteIsContentCenter(siteUrl) {
9
+ const requestOptions = {
10
+ url: `${siteUrl}/_api/web?$select=WebTemplateConfiguration`,
11
+ headers: {
12
+ accept: 'application/json;odata=nometadata'
13
+ },
14
+ responseType: 'json'
15
+ };
16
+ const response = await request.get(requestOptions);
17
+ if (response.WebTemplateConfiguration !== 'CONTENTCTR#0') {
18
+ throw Error(`${siteUrl} is not a content site.`);
19
+ }
20
+ }
21
+ };
22
+ //# sourceMappingURL=spp.js.map
@@ -3,6 +3,25 @@ import { odata } from './odata.js';
3
3
  import { cli } from '../cli/cli.js';
4
4
  const graphResource = 'https://graph.microsoft.com';
5
5
  export const teams = {
6
+ /**
7
+ * Retrieve a team by its name.
8
+ * @param displayName Name of the team to retrieve.
9
+ * @throws Error if the team cannot be found.
10
+ * @throws Error when multiple teams with the same name and prompting is disabled.
11
+ * @returns The Teams team.
12
+ */
13
+ async getTeamByDisplayName(displayName) {
14
+ const teams = await odata.getAllItems(`${graphResource}/v1.0/teams?$filter=displayName eq '${formatting.encodeQueryParameter(displayName)}'`);
15
+ if (!teams.length) {
16
+ throw Error(`The specified team '${displayName}' does not exist.`);
17
+ }
18
+ if (teams.length === 1) {
19
+ return teams[0];
20
+ }
21
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', teams);
22
+ const result = await cli.handleMultipleResultsFound(`Multiple teams with name '${displayName}' found.`, resultAsKeyValuePair);
23
+ return result;
24
+ },
6
25
  /**
7
26
  * Retrieve the id of a team by its name.
8
27
  * @param displayName Name of the team to retrieve.
@@ -15,12 +34,35 @@ export const teams = {
15
34
  if (!teams.length) {
16
35
  throw Error(`The specified team '${displayName}' does not exist.`);
17
36
  }
18
- if (teams.length > 1) {
19
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', teams);
20
- const result = await cli.handleMultipleResultsFound(`Multiple teams with name '${displayName}' found.`, resultAsKeyValuePair);
21
- return result.id;
37
+ if (teams.length === 1) {
38
+ return teams[0].id;
39
+ }
40
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', teams);
41
+ const result = await cli.handleMultipleResultsFound(`Multiple teams with name '${displayName}' found.`, resultAsKeyValuePair);
42
+ return result.id;
43
+ },
44
+ /**
45
+ * Retrieves a channel by its name in a Microsoft Teams team.
46
+ * @param teamId The ID of the team.
47
+ * @param name The name of the channel.
48
+ * @throws Throws an error if the specified channel does not exist in the team.
49
+ * @returns The Teams channel.
50
+ */
51
+ async getChannelByDisplayName(teamId, name) {
52
+ const channelRequestOptions = {
53
+ url: `${graphResource}/v1.0/teams/${teamId}/channels?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'`,
54
+ headers: {
55
+ accept: 'application/json;odata.metadata=none'
56
+ },
57
+ responseType: 'json'
58
+ };
59
+ const response = await odata.getAllItems(channelRequestOptions);
60
+ // Only one channel can have the same name in a team
61
+ const channelItem = response[0];
62
+ if (!channelItem) {
63
+ throw Error(`The channel '${name}' does not exist in the Microsoft Teams team with ID '${teamId}'.`);
22
64
  }
23
- return teams[0].id;
65
+ return channelItem;
24
66
  },
25
67
  /**
26
68
  * Retrieves the channel ID by its name in a Microsoft Teams team.
@@ -0,0 +1,13 @@
1
+ import { setTimeout } from "timers/promises";
2
+ export const timersUtil = {
3
+ /**
4
+ * Timeout for a specific duration.
5
+ * @param duration Duration in milliseconds.
6
+ */
7
+ /* c8 ignore next 4 */
8
+ // Function is created so we can easily mock it in our tests
9
+ async setTimeout(duration) {
10
+ return setTimeout(duration);
11
+ }
12
+ };
13
+ //# sourceMappingURL=timersUtil.js.map
@@ -198,6 +198,14 @@ export const urlUtil = {
198
198
  return rootUrl.origin;
199
199
  }
200
200
  },
201
+ /**
202
+ * Removes leading slashes from the URL.
203
+ * @param url The URL to process.
204
+ * @returns The URL without leading slashes.
205
+ */
206
+ removeLeadingSlashes(url) {
207
+ return url.replace(/^\/+/, '');
208
+ },
201
209
  /**
202
210
  * Removes trailing slashes from the URL.
203
211
  * @param url The URL to process.
@@ -0,0 +1,61 @@
1
+ import { cli } from '../cli/cli.js';
2
+ import request from '../request.js';
3
+ import { formatting } from './formatting.js';
4
+ import { odata } from './odata.js';
5
+ export const vivaEngage = {
6
+ /**
7
+ * Get Viva Engage group ID by community ID.
8
+ * @param communityId The ID of the Viva Engage community.
9
+ * @returns The ID of the Viva Engage group.
10
+ * @returns The Viva Engage community.
11
+ */
12
+ async getCommunityById(communityId, selectProperties) {
13
+ const requestOptions = {
14
+ url: `https://graph.microsoft.com/v1.0/employeeExperience/communities/${communityId}?$select=${selectProperties.join(',')}`,
15
+ headers: {
16
+ accept: 'application/json;odata.metadata=none'
17
+ },
18
+ responseType: 'json'
19
+ };
20
+ const community = await request.get(requestOptions);
21
+ if (!community) {
22
+ throw `The specified Viva Engage community with ID '${communityId}' does not exist.`;
23
+ }
24
+ return community;
25
+ },
26
+ /**
27
+ * Get Viva Engage community by display name.
28
+ * @param displayName Community display name.
29
+ * @param selectProperties Properties to select.
30
+ * @returns The Viva Engage community.
31
+ */
32
+ async getCommunityByDisplayName(displayName, selectProperties) {
33
+ const communities = await odata.getAllItems(`https://graph.microsoft.com/v1.0/employeeExperience/communities?$filter=displayName eq '${formatting.encodeQueryParameter(displayName)}'&$select=${selectProperties.join(',')}`);
34
+ if (communities.length === 0) {
35
+ throw `The specified Viva Engage community '${displayName}' does not exist.`;
36
+ }
37
+ if (communities.length > 1) {
38
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', communities);
39
+ const selectedCommunity = await cli.handleMultipleResultsFound(`Multiple Viva Engage communities with name '${displayName}' found.`, resultAsKeyValuePair);
40
+ return selectedCommunity;
41
+ }
42
+ return communities[0];
43
+ },
44
+ /**
45
+ * Get Viva Engage community by Microsoft Entra group ID.
46
+ * Note: The Graph API doesn't support filtering by groupId, so we need to retrieve all communities and filter them in memory.
47
+ * @param entraGroupId The ID of the Microsoft Entra group.
48
+ * @param selectProperties Properties to select.
49
+ * @returns The Viva Engage community.
50
+ */
51
+ async getCommunityByEntraGroupId(entraGroupId, selectProperties) {
52
+ const properties = selectProperties.includes('groupId') ? selectProperties : [...selectProperties, 'groupId'];
53
+ const communities = await odata.getAllItems(`https://graph.microsoft.com/v1.0/employeeExperience/communities?$select=${properties.join(',')}`);
54
+ const filteredCommunity = communities.find(c => c.groupId === entraGroupId);
55
+ if (!filteredCommunity) {
56
+ throw `The Microsoft Entra group with id '${entraGroupId}' is not associated with any Viva Engage community.`;
57
+ }
58
+ return filteredCommunity;
59
+ }
60
+ };
61
+ //# sourceMappingURL=vivaEngage.js.map
package/dist/utils/zod.js CHANGED
@@ -60,14 +60,14 @@ function parseDefault(def, _options, currentOption) {
60
60
  function parseEnum(def, _options, currentOption) {
61
61
  if (currentOption) {
62
62
  currentOption.type = 'string';
63
- currentOption.autocomplete = def.values;
63
+ currentOption.autocomplete = [...def.values];
64
64
  }
65
65
  return;
66
66
  }
67
67
  function parseNativeEnum(def, _options, currentOption) {
68
68
  if (currentOption) {
69
69
  currentOption.type = 'string';
70
- currentOption.autocomplete = Object.getOwnPropertyNames(def.values);
70
+ currentOption.autocomplete = Object.values(def.values).map(v => String(v));
71
71
  }
72
72
  return;
73
73
  }
@@ -119,6 +119,15 @@ export const zod = {
119
119
  const options = [];
120
120
  parseDef(schema._def, options);
121
121
  return options;
122
- }
122
+ },
123
+ coercedEnum: (e) => z.preprocess(val => {
124
+ const target = String(val)?.toLowerCase();
125
+ for (const k of Object.values(e)) {
126
+ if (String(k)?.toLowerCase() === target) {
127
+ return k;
128
+ }
129
+ }
130
+ return null;
131
+ }, z.nativeEnum(e))
123
132
  };
124
133
  //# sourceMappingURL=zod.js.map
@@ -2,6 +2,11 @@ Setting name|Definition|Default value
2
2
  ------------|----------|-------------
3
3
  `authType`|Default login method to use when running `m365 login` without the `--authType` option.|`deviceCode`
4
4
  `autoOpenLinksInBrowser`|Automatically open the browser for all commands which return a url and expect the user to copy paste this to the browser. For example when logging in, using `m365 login` in device code mode.|`false`
5
+ `clientId`|ID of the default Entra ID app use by the CLI to authenticate|``
6
+ `clientSecret`|Secret of the default Entra ID app use by the CLI to authenticate|``
7
+ `clientCertificateFile`|Path to the file containing the client certificate to use for authentication|``
8
+ `clientCertificateBase64Encoded`|Base64-encoded client certificate contents|``
9
+ `clientCertificatePassword`|Password to the client certificate file|``
5
10
  `copyDeviceCodeToClipboard`|Automatically copy the device code to the clipboard when running `m365 login` command in device code mode|`false`
6
11
  `csvEscape`|Single character used for escaping; only apply to characters matching the quote and the escape options|`"`
7
12
  `csvHeader`|Display the column names on the first line|`true`
@@ -17,4 +22,4 @@ Setting name|Definition|Default value
17
22
  `prompt`|Prompts for missing values in required options and enables interactive selection when multiple values are available for a command that requires a specific value to be retrieved.|`true`
18
23
  `promptListPageSize`|By default, lists of choices longer than 7 will be paginated. Use this option to control how many choices will appear on the screen at once.|7
19
24
  `showHelpOnFailure`|Automatically display help when executing a command failed|`true`
20
- `showSpinner`|Display spinner when executing commands|`true`
25
+ `tenantId`|ID of the default tenant to use when authenticating with|``
@@ -22,7 +22,7 @@ This command gets all the necessary diagnostic information needed to triage and
22
22
 
23
23
  ## Examples
24
24
 
25
- Retrieve diagnostic information
25
+ Retrieve diagnostic information.
26
26
 
27
27
  ```sh
28
28
  m365 cli doctor
@@ -42,18 +42,20 @@ m365 cli doctor
42
42
  },
43
43
  "cliVersion": "6.1.0",
44
44
  "nodeVersion": "v16.13.0",
45
- "cliAadAppId": "31359c7f-bd7e-475c-86db-fdb8c937548e",
46
- "cliAadAppTenant": "common",
47
- "authMode": "DeviceCode",
45
+ "cliEntraAppId": "31359c7f-bd7e-475c-86db-fdb8c937548e",
46
+ "cliEntraAppTenant": "common",
47
+ "authMode": "deviceCode",
48
48
  "cliEnvironment": "",
49
49
  "cliConfig": {
50
50
  "output": "json",
51
51
  "showHelpOnFailure": false
52
52
  },
53
53
  "roles": [],
54
- "scopes": [
55
- "AllSites.FullControl"
56
- ]
54
+ "scopes": {
55
+ "https://graph.microsoft.com": [
56
+ "AllSites.FullControl"
57
+ ]
58
+ }
57
59
  }
58
60
  ```
59
61
 
@@ -61,24 +63,24 @@ m365 cli doctor
61
63
  <TabItem value="Text">
62
64
 
63
65
  ```text
64
- authMode : DeviceCode
65
- cliAadAppId : 31359c7f-bd7e-475c-86db-fdb8c937548e
66
- cliAadAppTenant: common
67
- cliConfig : {"output":"json","showHelpOnFailure":false}
68
- cliEnvironment :
69
- cliVersion : 6.1.0
70
- nodeVersion : v16.13.0
71
- os : {"platform":"win32","version":"Windows 10 Pro","release":"10.0.19045"}
72
- roles : []
73
- scopes : ["AllSites.FullControl"]
66
+ authMode : deviceCode
67
+ cliConfig : {"output":"json","showHelpOnFailure":false}
68
+ cliEntraAppId : 31359c7f-bd7e-475c-86db-fdb8c937548e
69
+ cliEntraAppTenant: common
70
+ cliEnvironment :
71
+ cliVersion : 6.1.0
72
+ nodeVersion : v16.13.0
73
+ os : {"platform":"win32","version":"Windows 10 Pro","release":"10.0.19045"}
74
+ roles : []
75
+ scopes : {"https://graph.microsoft.com":["AllSites.FullControl"]}
74
76
  ```
75
77
 
76
78
  </TabItem>
77
79
  <TabItem value="CSV">
78
80
 
79
81
  ```csv
80
- os,cliVersion,nodeVersion,cliAadAppId,cliAadAppTenant,authMode,cliEnvironment,cliConfig,roles,scopes
81
- "{""platform"":""win32"",""version"":""Windows 10 Pro"",""release"":""10.0.19045""}",6.1.0,v16.13.0,31359c7f-bd7e-475c-86db-fdb8c937548e,common,DeviceCode,,"{""output"":""json"",""showHelpOnFailure"":false}",[],"[""AllSites.FullControl""]"
82
+ os,cliVersion,nodeVersion,cliEntraAppId,cliEntraAppTenant,authMode,cliEnvironment,cliConfig,roles,scopes
83
+ "{""platform"":""win32"",""version"":""Windows 10 Pro"",""release"":""10.0.19045""}",6.1.0,v16.13.0,31359c7f-bd7e-475c-86db-fdb8c937548e,common,deviceCode,,"{""output"":""json"",""showHelpOnFailure"":false}",[],"{""https://graph.microsoft.com"":[""AllSites.FullControl""]}"
82
84
  ```
83
85
 
84
86
  </TabItem>
@@ -93,12 +95,11 @@ m365 cli doctor
93
95
  ---------|-------
94
96
  cliVersion | 6.1.0
95
97
  nodeVersion | v16.13.0
96
- cliAadAppId | 31359c7f-bd7e-475c-86db-fdb8c937548e
97
- cliAadAppTenant | common
98
- authMode | DeviceCode
98
+ cliEntraAppId | 31359c7f-bd7e-475c-86db-fdb8c937548e
99
+ cliEntraAppTenant | common
100
+ authMode | deviceCode
99
101
  cliEnvironment |
100
102
  ```
101
103
 
102
104
  </TabItem>
103
105
  </Tabs>
104
-
@@ -12,12 +12,6 @@ Creates a new administrative unit
12
12
  m365 entra administrativeunit add [options]
13
13
  ```
14
14
 
15
- ## Alias
16
-
17
- ```sh
18
- m365 aad administrativeunit add [options]
19
- ```
20
-
21
15
  ## Options
22
16
 
23
17
  ```md definition-list
@@ -12,12 +12,6 @@ Gets information about a specific administrative unit
12
12
  m365 entra administrativeunit get [options]
13
13
  ```
14
14
 
15
- ## Alias
16
-
17
- ```sh
18
- m365 aad administrativeunit get [options]
19
- ```
20
-
21
15
  ## Options
22
16
 
23
17
  ```md definition-list
@@ -12,12 +12,6 @@ Retrieves a list of administrative units
12
12
  m365 entra administrativeunit list [options]
13
13
  ```
14
14
 
15
- ## Alias
16
-
17
- ```sh
18
- m365 aad administrativeunit list [options]
19
- ```
20
-
21
15
  ## Options
22
16
 
23
17
  <Global />