@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/Auth.js CHANGED
@@ -4,7 +4,6 @@ import { CommandError } from './Command.js';
4
4
  import { FileTokenStorage } from './auth/FileTokenStorage.js';
5
5
  import { msalCachePlugin } from './auth/msalCachePlugin.js';
6
6
  import { cli } from './cli/cli.js';
7
- import config from './config.js';
8
7
  import request from './request.js';
9
8
  import { settingsNames } from './settingsNames.js';
10
9
  import * as accessTokenUtil from './utils/accessToken.js';
@@ -22,10 +21,10 @@ export class Connection {
22
21
  this.active = false;
23
22
  this.authType = AuthType.DeviceCode;
24
23
  this.certificateType = CertificateType.Unknown;
24
+ // ID of the tenant where the Microsoft Entra app is registered; common if multi-tenant
25
+ this.tenant = 'common';
25
26
  this.cloudType = CloudType.Public;
26
27
  this.accessTokens = {};
27
- this.appId = config.cliEntraAppId;
28
- this.tenant = config.tenant;
29
28
  this.cloudType = CloudType.Public;
30
29
  }
31
30
  deactivate() {
@@ -44,18 +43,18 @@ export class Connection {
44
43
  this.thumbprint = undefined;
45
44
  this.spoUrl = undefined;
46
45
  this.spoTenantId = undefined;
47
- this.appId = config.cliEntraAppId;
48
- this.tenant = config.tenant;
46
+ this.appId = cli.getClientId();
47
+ this.tenant = cli.getTenant();
49
48
  }
50
49
  }
51
50
  export var AuthType;
52
51
  (function (AuthType) {
53
- AuthType[AuthType["DeviceCode"] = 0] = "DeviceCode";
54
- AuthType[AuthType["Password"] = 1] = "Password";
55
- AuthType[AuthType["Certificate"] = 2] = "Certificate";
56
- AuthType[AuthType["Identity"] = 3] = "Identity";
57
- AuthType[AuthType["Browser"] = 4] = "Browser";
58
- AuthType[AuthType["Secret"] = 5] = "Secret";
52
+ AuthType["DeviceCode"] = "deviceCode";
53
+ AuthType["Password"] = "password";
54
+ AuthType["Certificate"] = "certificate";
55
+ AuthType["Identity"] = "identity";
56
+ AuthType["Browser"] = "browser";
57
+ AuthType["Secret"] = "secret";
59
58
  })(AuthType || (AuthType = {}));
60
59
  export var CertificateType;
61
60
  (function (CertificateType) {
@@ -118,7 +117,7 @@ export class Auth {
118
117
  async restoreAuth() {
119
118
  // check if auth has been restored previously
120
119
  if (this._connection.active) {
121
- return Promise.resolve();
120
+ return;
122
121
  }
123
122
  try {
124
123
  const connection = await this.getConnectionInfoFromStorage();
@@ -354,7 +353,9 @@ export class Auth {
354
353
  await logger.logToStderr(response);
355
354
  await logger.logToStderr('');
356
355
  }
357
- await logger.logToStderr(`🌶️ ${response.message}`);
356
+ if (response.message) {
357
+ await logger.logToStderr(`🌶️ ${response.message}`);
358
+ }
358
359
  if (cli.getSettingWithDefaultValue(settingsNames.autoOpenLinksInBrowser, false)) {
359
360
  await browserUtil.open(response.verificationUri);
360
361
  }
@@ -472,7 +473,7 @@ export class Auth {
472
473
  }
473
474
  if (userName && process.env.ACC_CLOUD) {
474
475
  // reject for now since the Azure Cloud Shell does not support user-managed identity
475
- return Promise.reject('Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity');
476
+ throw 'Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity';
476
477
  }
477
478
  requestOptions.url = `${process.env.IDENTITY_ENDPOINT}?resource=${encodeURIComponent(resource)}`;
478
479
  }
@@ -482,7 +483,7 @@ export class Auth {
482
483
  }
483
484
  if (userName && process.env.ACC_CLOUD) {
484
485
  // reject for now since the Azure Cloud Shell does not support user-managed identity
485
- return Promise.reject('Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity');
486
+ throw 'Azure Cloud Shell does not support user-managed identity. You can execute the command without the --userName option to login with user identity';
486
487
  }
487
488
  requestOptions.url = `${process.env.MSI_ENDPOINT}?resource=${encodeURIComponent(resource)}`;
488
489
  }
@@ -702,7 +703,7 @@ export class Auth {
702
703
  const details = {
703
704
  connectionName: connection.name,
704
705
  connectedAs: connection.identityName,
705
- authType: AuthType[connection.authType],
706
+ authType: connection.authType,
706
707
  appId: connection.appId,
707
708
  appTenant: connection.tenant,
708
709
  cloudType: CloudType[connection.cloudType]
@@ -26,7 +26,7 @@ export class AuthServer {
26
26
  await this.logger.logToStderr(url);
27
27
  await this.logger.logToStderr('');
28
28
  }
29
- this.openUrl(url);
29
+ await this.openUrl(url);
30
30
  };
31
31
  this.httpRequest = async (request, response) => {
32
32
  if (this.debug) {
@@ -80,19 +80,19 @@ export class AuthServer {
80
80
  get server() {
81
81
  return this.httpServer;
82
82
  }
83
- openUrl(url) {
84
- browserUtil.open(url)
85
- .then(async (_) => {
83
+ async openUrl(url) {
84
+ try {
85
+ await browserUtil.open(url);
86
86
  await this.logger.logToStderr("To sign in, use the web browser that just has been opened. Please sign-in there.");
87
- })
88
- .catch(_ => {
87
+ }
88
+ catch {
89
89
  const errorResponse = {
90
90
  error: "Can't open the default browser",
91
91
  errorDescription: "Was not able to open a browser instance. Try again later or use a different authentication method."
92
92
  };
93
93
  this.reject(errorResponse);
94
94
  this.httpServer.close();
95
- });
95
+ }
96
96
  }
97
97
  }
98
98
  export default new AuthServer();
package/dist/Command.js CHANGED
@@ -522,7 +522,10 @@ class Command {
522
522
  quote: cli.getConfig().get(settingsNames.csvQuote),
523
523
  quoted: cli.getSettingWithDefaultValue(settingsNames.csvQuoted, false),
524
524
  // eslint-disable-next-line camelcase
525
- quoted_empty: cli.getSettingWithDefaultValue(settingsNames.csvQuotedEmpty, false)
525
+ quoted_empty: cli.getSettingWithDefaultValue(settingsNames.csvQuotedEmpty, false),
526
+ cast: {
527
+ boolean: (value) => value ? '1' : '0'
528
+ }
526
529
  });
527
530
  }
528
531
  getMdOutput(logStatement, command, options) {
package/dist/api.js CHANGED
@@ -3,7 +3,7 @@ export async function executeCommand(commandName, options, listener) {
3
3
  cli.loadAllCommandsInfo();
4
4
  await cli.loadCommandFromArgs(commandName.split(' '));
5
5
  if (!cli.commandToExecute) {
6
- return Promise.reject(`Command not found: ${commandName}`);
6
+ throw `Command not found: ${commandName}`;
7
7
  }
8
8
  return cli.executeCommandWithOutput(cli.commandToExecute.command, { options: options ?? {} }, listener);
9
9
  }
@@ -6,12 +6,14 @@ process.env.APPLICATION_INSIGHTS_NO_STATSBEAT = 'true';
6
6
  import * as appInsights from 'applicationinsights';
7
7
  import crypto from 'crypto';
8
8
  import fs from 'fs';
9
+ import os from 'os';
9
10
  import path from 'path';
10
11
  import url from 'url';
11
12
  import { app } from './utils/app.js';
12
13
  const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
13
- const config = appInsights.setup('6b908c80-d09f-4cf6-8274-e54349a0149a');
14
- config.setInternalLogging(false, false);
14
+ appInsights
15
+ .setup('6b908c80-d09f-4cf6-8274-e54349a0149a')
16
+ .setInternalLogging(false, false);
15
17
  // append -dev to the version number when ran locally
16
18
  // to distinguish production and dev version of the CLI
17
19
  // in the telemetry
@@ -26,8 +28,8 @@ appInsightsClient.commonProperties = {
26
28
  };
27
29
  appInsightsClient.config.proxyHttpUrl = process.env.HTTP_PROXY ?? '';
28
30
  appInsightsClient.config.proxyHttpsUrl = process.env.HTTPS_PROXY ?? '';
29
- appInsightsClient.context.tags['ai.cloud.roleInstance'] = crypto.createHash('sha256').update(appInsightsClient.context.tags['ai.cloud.roleInstance']).digest('hex');
30
- delete appInsightsClient.context.tags['ai.cloud.role'];
31
+ appInsightsClient.context.tags[appInsightsClient.context.keys.cloudRoleInstance] = crypto.createHash('sha256').update(os.hostname()).digest('hex');
32
+ delete appInsightsClient.context.tags[appInsightsClient.context.keys.cloudRole];
31
33
  delete appInsightsClient.context.tags['ai.cloud.roleName'];
32
34
  export default appInsightsClient;
33
35
  //# sourceMappingURL=appInsights.js.map
package/dist/cli/cli.js CHANGED
@@ -59,6 +59,12 @@ function getSettingWithDefaultValue(settingName, defaultValue) {
59
59
  return configuredValue;
60
60
  }
61
61
  }
62
+ function getClientId() {
63
+ return cli.getSettingWithDefaultValue(settingsNames.clientId, process.env.CLIMICROSOFT365_ENTRAAPPID);
64
+ }
65
+ function getTenant() {
66
+ return cli.getSettingWithDefaultValue(settingsNames.tenantId, process.env.CLIMICROSOFT365_TENANT || 'common');
67
+ }
62
68
  async function execute(rawArgs) {
63
69
  const start = process.hrtime.bigint();
64
70
  // for completion commands we also need information about commands' options
@@ -837,6 +843,11 @@ async function promptForConfirmation(config) {
837
843
  await cli.error('');
838
844
  return answer;
839
845
  }
846
+ async function promptForInput(config) {
847
+ const answer = await prompt.forInput(config);
848
+ await cli.error('');
849
+ return answer;
850
+ }
840
851
  async function handleMultipleResultsFound(message, values) {
841
852
  const prompt = cli.getSettingWithDefaultValue(settingsNames.prompt, true);
842
853
  if (!prompt) {
@@ -871,7 +882,9 @@ export const cli = {
871
882
  closeWithError,
872
883
  commands,
873
884
  commandToExecute,
885
+ getClientId,
874
886
  getConfig,
887
+ getTenant,
875
888
  currentCommandName,
876
889
  error,
877
890
  execute,
@@ -890,6 +903,7 @@ export const cli = {
890
903
  optionsFromArgs,
891
904
  printAvailableCommands,
892
905
  promptForConfirmation,
906
+ promptForInput,
893
907
  promptForSelection,
894
908
  promptForValue,
895
909
  shouldTrimOutput,
package/dist/config.js CHANGED
@@ -1,10 +1,66 @@
1
- import { app } from "./utils/app.js";
2
- const cliEntraAppId = '31359c7f-bd7e-475c-86db-fdb8c937548e';
1
+ import { app } from './utils/app.js';
3
2
  export default {
3
+ allScopes: [
4
+ 'https://graph.windows.net/Directory.AccessAsUser.All',
5
+ 'https://management.azure.com/user_impersonation',
6
+ 'https://admin.services.crm.dynamics.com/user_impersonation',
7
+ 'https://graph.microsoft.com/AppCatalog.ReadWrite.All',
8
+ 'https://graph.microsoft.com/AuditLog.Read.All',
9
+ 'https://graph.microsoft.com/Bookings.Read.All',
10
+ 'https://graph.microsoft.com/Calendars.Read',
11
+ 'https://graph.microsoft.com/ChannelMember.ReadWrite.All',
12
+ 'https://graph.microsoft.com/ChannelMessage.Read.All',
13
+ 'https://graph.microsoft.com/ChannelMessage.ReadWrite',
14
+ 'https://graph.microsoft.com/ChannelMessage.Send',
15
+ 'https://graph.microsoft.com/ChannelSettings.ReadWrite.All',
16
+ 'https://graph.microsoft.com/Chat.ReadWrite',
17
+ 'https://graph.microsoft.com/Community.ReadWrite.All',
18
+ 'https://graph.microsoft.com/Directory.AccessAsUser.All',
19
+ 'https://graph.microsoft.com/Directory.ReadWrite.All',
20
+ 'https://graph.microsoft.com/ExternalConnection.ReadWrite.All',
21
+ 'https://graph.microsoft.com/ExternalItem.ReadWrite.All',
22
+ 'https://graph.microsoft.com/Group.ReadWrite.All',
23
+ 'https://graph.microsoft.com/IdentityProvider.ReadWrite.All',
24
+ 'https://graph.microsoft.com/InformationProtectionPolicy.Read',
25
+ 'https://graph.microsoft.com/Mail.Read.Shared',
26
+ 'https://graph.microsoft.com/Mail.ReadWrite',
27
+ 'https://graph.microsoft.com/Mail.Send',
28
+ 'https://graph.microsoft.com/Notes.ReadWrite.All',
29
+ 'https://graph.microsoft.com/OnlineMeetingArtifact.Read.All',
30
+ 'https://graph.microsoft.com/OnlineMeetings.ReadWrite',
31
+ 'https://graph.microsoft.com/OnlineMeetingTranscript.Read.All',
32
+ 'https://graph.microsoft.com/PeopleSettings.ReadWrite.All',
33
+ 'https://graph.microsoft.com/Place.Read.All',
34
+ 'https://graph.microsoft.com/Policy.Read.All',
35
+ 'https://graph.microsoft.com/RecordsManagement.ReadWrite.All',
36
+ 'https://graph.microsoft.com/Reports.Read.All',
37
+ 'https://graph.microsoft.com/RoleAssignmentSchedule.ReadWrite.Directory',
38
+ 'https://graph.microsoft.com/RoleEligibilitySchedule.Read.Directory',
39
+ 'https://graph.microsoft.com/SecurityEvents.Read.All',
40
+ 'https://graph.microsoft.com/ServiceHealth.Read.All',
41
+ 'https://graph.microsoft.com/ServiceMessage.Read.All',
42
+ 'https://graph.microsoft.com/ServiceMessageViewpoint.Write',
43
+ 'https://graph.microsoft.com/Sites.Read.All',
44
+ 'https://graph.microsoft.com/Tasks.ReadWrite',
45
+ 'https://graph.microsoft.com/Team.Create',
46
+ 'https://graph.microsoft.com/TeamMember.ReadWrite.All',
47
+ 'https://graph.microsoft.com/TeamsAppInstallation.ReadWriteForUser',
48
+ 'https://graph.microsoft.com/TeamSettings.ReadWrite.All',
49
+ 'https://graph.microsoft.com/TeamsTab.ReadWrite.All',
50
+ 'https://graph.microsoft.com/User.Invite.All',
51
+ 'https://manage.office.com/ActivityFeed.Read',
52
+ 'https://manage.office.com/ServiceHealth.Read',
53
+ 'https://analysis.windows.net/powerbi/api/Dataset.Read.All',
54
+ 'https://api.powerapps.com//User',
55
+ 'https://microsoft.sharepoint-df.com/AllSites.FullControl',
56
+ 'https://microsoft.sharepoint-df.com/TermStore.ReadWrite.All',
57
+ 'https://microsoft.sharepoint-df.com/User.ReadWrite.All'
58
+ ],
4
59
  applicationName: `CLI for Microsoft 365 v${app.packageJson().version}`,
5
60
  delimiter: 'm365\$',
6
- cliEntraAppId: process.env.CLIMICROSOFT365_ENTRAAPPID || cliEntraAppId,
7
- tenant: process.env.CLIMICROSOFT365_TENANT || 'common',
8
- configstoreName: 'cli-m365-config'
61
+ configstoreName: 'cli-m365-config',
62
+ minimalScopes: [
63
+ 'https://graph.microsoft.com/User.Read'
64
+ ]
9
65
  };
10
66
  //# sourceMappingURL=config.js.map
@@ -2,7 +2,7 @@ import auth, { CloudType } from '../../Auth.js';
2
2
  import Command, { CommandError } from '../../Command.js';
3
3
  import { accessToken } from '../../utils/accessToken.js';
4
4
  export default class PowerAutomateCommand extends Command {
5
- get resource() {
5
+ static get resource() {
6
6
  return 'https://api.flow.microsoft.com';
7
7
  }
8
8
  async initAction(args, logger) {
@@ -94,7 +94,7 @@ export default class SpoCommand extends Command {
94
94
  catch (error) {
95
95
  throw new CommandError(error);
96
96
  }
97
- if (auth.connection.active && AuthType[auth.connection.authType] === AuthType[AuthType.Secret]) {
97
+ if (auth.connection.active && auth.connection.authType === AuthType.Secret) {
98
98
  throw new CommandError(`SharePoint does not support authentication using client ID and secret. Please use a different login type to use SharePoint commands.`);
99
99
  }
100
100
  await super.action(logger, args);
@@ -4,7 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _CliConsentCommand_instances, _CliConsentCommand_initTelemetry, _CliConsentCommand_initOptions, _CliConsentCommand_initValidators;
7
- import config from '../../../config.js';
7
+ import { cli } from '../../../cli/cli.js';
8
8
  import AnonymousCommand from '../../base/AnonymousCommand.js';
9
9
  import commands from '../commands.js';
10
10
  class CliConsentCommand extends AnonymousCommand {
@@ -26,7 +26,7 @@ class CliConsentCommand extends AnonymousCommand {
26
26
  if (args.options.service === 'VivaEngage') {
27
27
  scope = 'https://api.yammer.com/user_impersonation';
28
28
  }
29
- await logger.log(`To consent permissions for executing ${args.options.service} commands, navigate in your web browser to https://login.microsoftonline.com/${config.tenant}/oauth2/v2.0/authorize?client_id=${config.cliEntraAppId}&response_type=code&scope=${encodeURIComponent(scope)}`);
29
+ await logger.log(`To consent permissions for executing ${args.options.service} commands, navigate in your web browser to https://login.microsoftonline.com/${cli.getTenant()}/oauth2/v2.0/authorize?client_id=${cli.getClientId()}&response_type=code&scope=${encodeURIComponent(scope)}`);
30
30
  }
31
31
  async action(logger, args) {
32
32
  await this.initAction(args, logger);
@@ -1,5 +1,5 @@
1
1
  import os from 'os';
2
- import auth, { AuthType } from '../../../Auth.js';
2
+ import auth from '../../../Auth.js';
3
3
  import { cli } from '../../../cli/cli.js';
4
4
  import Command from '../../../Command.js';
5
5
  import { app } from '../../../utils/app.js';
@@ -31,9 +31,9 @@ class CliDoctorCommand extends Command {
31
31
  },
32
32
  cliVersion: app.packageJson().version,
33
33
  nodeVersion: process.version,
34
- cliAadAppId: auth.connection.appId,
35
- cliAadAppTenant: validation.isValidGuid(auth.connection.tenant) ? 'single' : auth.connection.tenant,
36
- authMode: AuthType[auth.connection.authType],
34
+ cliEntraAppId: auth.connection.appId,
35
+ cliEntraAppTenant: validation.isValidGuid(auth.connection.tenant) ? 'single' : auth.connection.tenant,
36
+ authMode: auth.connection.authType,
37
37
  cliEnvironment: process.env.CLIMICROSOFT365_ENV ? process.env.CLIMICROSOFT365_ENV : '',
38
38
  cliConfig: cli.getConfig().all,
39
39
  roles: roles,
@@ -4,8 +4,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _CliConfigSetCommand_instances, _a, _CliConfigSetCommand_initTelemetry, _CliConfigSetCommand_initOptions, _CliConfigSetCommand_initValidators;
7
+ import { AuthType } from "../../../../Auth.js";
7
8
  import { cli } from "../../../../cli/cli.js";
8
9
  import { settingsNames } from "../../../../settingsNames.js";
10
+ import { validation } from "../../../../utils/validation.js";
9
11
  import AnonymousCommand from "../../../base/AnonymousCommand.js";
10
12
  import commands from "../../commands.js";
11
13
  class CliConfigSetCommand extends AnonymousCommand {
@@ -34,7 +36,6 @@ class CliConfigSetCommand extends AnonymousCommand {
34
36
  case settingsNames.printErrorsAsPlainText:
35
37
  case settingsNames.prompt:
36
38
  case settingsNames.showHelpOnFailure:
37
- case settingsNames.showSpinner:
38
39
  value = args.options.value === 'true';
39
40
  break;
40
41
  default:
@@ -82,15 +83,22 @@ _a = CliConfigSetCommand, _CliConfigSetCommand_instances = new WeakSet(), _CliCo
82
83
  cli.helpModes.indexOf(args.options.value) === -1) {
83
84
  return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${cli.helpModes.join(', ')}`;
84
85
  }
85
- const allowedAuthTypes = ['certificate', 'deviceCode', 'password', 'identity', 'browser', 'secret'];
86
86
  if (args.options.key === settingsNames.authType &&
87
- allowedAuthTypes.indexOf(args.options.value) === -1) {
88
- return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${allowedAuthTypes.join(', ')}`;
87
+ !Object.values(AuthType).map(String).includes(args.options.value)) {
88
+ return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${Object.values(AuthType).join(', ')}`;
89
89
  }
90
90
  if (args.options.key === settingsNames.helpTarget &&
91
91
  !cli.helpTargets.includes(args.options.value)) {
92
92
  return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${cli.helpTargets.join(', ')}`;
93
93
  }
94
+ if (args.options.key === settingsNames.clientId &&
95
+ !validation.isValidGuid(args.options.value)) {
96
+ return `${args.options.value} is not a valid value for the option ${args.options.key}. The value has to be a valid GUID.`;
97
+ }
98
+ if (args.options.key === settingsNames.tenantId &&
99
+ !(args.options.value === 'common' || validation.isValidGuid(args.options.value))) {
100
+ return `${args.options.value} is not a valid value for the option ${args.options.key}. The value has to be a valid GUID or 'common'.`;
101
+ }
94
102
  return true;
95
103
  });
96
104
  };
@@ -11,7 +11,6 @@ export default {
11
11
  CONFIG_SET: `${prefix} config set`,
12
12
  CONSENT: `${prefix} consent`,
13
13
  DOCTOR: `${prefix} doctor`,
14
- ISSUE: `${prefix} issue`,
15
- RECONSENT: `${prefix} reconsent`
14
+ ISSUE: `${prefix} issue`
16
15
  };
17
16
  //# sourceMappingURL=commands.js.map
@@ -3,14 +3,13 @@ import { z } from 'zod';
3
3
  import auth, { AuthType, CloudType } from '../../Auth.js';
4
4
  import Command, { CommandError, globalOptionsZod } from '../../Command.js';
5
5
  import { cli } from '../../cli/cli.js';
6
- import config from '../../config.js';
7
6
  import { settingsNames } from '../../settingsNames.js';
8
7
  import { zod } from '../../utils/zod.js';
9
8
  import commands from './commands.js';
10
9
  const options = globalOptionsZod
11
10
  .extend({
12
- authType: zod.alias('t', z.enum(['certificate', 'deviceCode', 'password', 'identity', 'browser', 'secret']).optional()),
13
- cloud: z.nativeEnum(CloudType).optional().default(CloudType.Public),
11
+ authType: zod.alias('t', zod.coercedEnum(AuthType).optional()),
12
+ cloud: zod.coercedEnum(CloudType).optional().default(CloudType.Public),
14
13
  userName: zod.alias('u', z.string().optional()),
15
14
  password: zod.alias('p', z.string().optional()),
16
15
  certificateFile: zod.alias('c', z.string().optional()
@@ -22,7 +21,8 @@ const options = globalOptionsZod
22
21
  appId: z.string().optional(),
23
22
  tenant: z.string().optional(),
24
23
  secret: zod.alias('s', z.string().optional()),
25
- connectionName: z.string().optional()
24
+ connectionName: z.string().optional(),
25
+ ensure: z.boolean().optional()
26
26
  })
27
27
  .strict();
28
28
  class LoginCommand extends Command {
@@ -37,6 +37,9 @@ class LoginCommand extends Command {
37
37
  }
38
38
  getRefinedSchema(schema) {
39
39
  return schema
40
+ .refine(options => typeof options.appId !== 'undefined' || cli.getConfig().get(settingsNames.clientId), {
41
+ message: `appId is required. TIP: use the "m365 setup" command to configure the default appId`
42
+ })
40
43
  .refine(options => options.authType !== 'password' || options.userName, {
41
44
  message: 'Username is required when using password authentication',
42
45
  path: ['userName']
@@ -49,74 +52,32 @@ class LoginCommand extends Command {
49
52
  message: 'Specify either certificateFile or certificateBase64Encoded, but not both.',
50
53
  path: ['certificateBase64Encoded']
51
54
  })
52
- .refine(options => options.authType !== 'certificate' || options.certificateFile || options.certificateBase64Encoded, {
55
+ .refine(options => options.authType !== 'certificate' ||
56
+ options.certificateFile ||
57
+ options.certificateBase64Encoded ||
58
+ cli.getConfig().get(settingsNames.clientCertificateFile) ||
59
+ cli.getConfig().get(settingsNames.clientCertificateBase64Encoded), {
53
60
  message: 'Specify either certificateFile or certificateBase64Encoded',
54
61
  path: ['certificateFile']
55
62
  })
56
- .refine(options => options.authType !== 'secret' || options.secret, {
63
+ .refine(options => options.authType !== 'secret' ||
64
+ options.secret ||
65
+ cli.getConfig().get(settingsNames.clientSecret), {
57
66
  message: 'Secret is required when using secret authentication',
58
67
  path: ['secret']
59
68
  });
60
69
  }
61
70
  async commandAction(logger, args) {
62
- // disconnect before re-connecting
63
71
  if (this.debug) {
64
72
  await logger.logToStderr(`Logging out from Microsoft 365...`);
65
73
  }
66
- const deactivate = () => auth.connection.deactivate();
67
- const login = async () => {
68
- if (this.verbose) {
69
- await logger.logToStderr(`Signing in to Microsoft 365...`);
70
- }
71
- const authType = args.options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode');
72
- auth.connection.appId = args.options.appId || config.cliEntraAppId;
73
- auth.connection.tenant = args.options.tenant || config.tenant;
74
- auth.connection.name = args.options.connectionName;
75
- switch (authType) {
76
- case 'password':
77
- auth.connection.authType = AuthType.Password;
78
- auth.connection.userName = args.options.userName;
79
- auth.connection.password = args.options.password;
80
- break;
81
- case 'certificate':
82
- auth.connection.authType = AuthType.Certificate;
83
- auth.connection.certificate = args.options.certificateBase64Encoded ? args.options.certificateBase64Encoded : fs.readFileSync(args.options.certificateFile, 'base64');
84
- auth.connection.thumbprint = args.options.thumbprint;
85
- auth.connection.password = args.options.password;
86
- break;
87
- case 'identity':
88
- auth.connection.authType = AuthType.Identity;
89
- auth.connection.userName = args.options.userName;
90
- break;
91
- case 'browser':
92
- auth.connection.authType = AuthType.Browser;
93
- break;
94
- case 'secret':
95
- auth.connection.authType = AuthType.Secret;
96
- auth.connection.secret = args.options.secret;
97
- break;
98
- }
99
- auth.connection.cloudType = args.options.cloud;
100
- try {
101
- await auth.ensureAccessToken(auth.defaultResource, logger, this.debug);
102
- auth.connection.active = true;
103
- }
104
- catch (error) {
105
- if (this.debug) {
106
- await logger.logToStderr('Error:');
107
- await logger.logToStderr(error);
108
- await logger.logToStderr('');
109
- }
110
- throw new CommandError(error.message);
111
- }
112
- const details = auth.getConnectionDetails(auth.connection);
113
- if (this.debug) {
114
- details.accessToken = JSON.stringify(auth.connection.accessTokens, null, 2);
115
- }
116
- await logger.log(details);
117
- };
118
- deactivate();
119
- await login();
74
+ if (this.shouldLogin(args.options)) {
75
+ auth.connection.deactivate();
76
+ await this.login(logger, args);
77
+ }
78
+ else {
79
+ await this.ensureAccessToken(logger);
80
+ }
120
81
  }
121
82
  async action(logger, args) {
122
83
  try {
@@ -128,6 +89,117 @@ class LoginCommand extends Command {
128
89
  await this.initAction(args, logger);
129
90
  await this.commandAction(logger, args);
130
91
  }
92
+ shouldLogin(options) {
93
+ if (!auth.connection.active) {
94
+ return true;
95
+ }
96
+ if (!options.ensure) {
97
+ return true;
98
+ }
99
+ const authType = options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode');
100
+ if (authType !== auth.connection.authType) {
101
+ return true;
102
+ }
103
+ if (options.cloud !== auth.connection.cloudType) {
104
+ return true;
105
+ }
106
+ if (options.appId && options.appId !== auth.connection.appId) {
107
+ return true;
108
+ }
109
+ if (options.tenant && options.tenant !== auth.connection.tenant) {
110
+ return true;
111
+ }
112
+ if (authType === AuthType.Password && (options.password && options.userName !== auth.connection.userName)) {
113
+ return true;
114
+ }
115
+ if (authType === AuthType.Certificate && (options.certificateFile && (auth.connection.certificate !== fs.readFileSync(options.certificateFile, 'base64')))) {
116
+ return true;
117
+ }
118
+ if (authType === AuthType.Identity && (options.userName && options.userName !== auth.connection.userName)) {
119
+ return true;
120
+ }
121
+ if (authType === AuthType.Secret && (options.secret && options.secret !== auth.connection.secret)) {
122
+ return true;
123
+ }
124
+ const now = new Date();
125
+ const accessToken = auth.connection.accessTokens[auth.defaultResource];
126
+ const expiresOn = accessToken && accessToken.expiresOn ?
127
+ // if expiresOn is serialized from the service file, it's set as a string
128
+ // if it's coming from MSAL, it's a Date
129
+ typeof accessToken.expiresOn === 'string' ? new Date(accessToken.expiresOn) : accessToken.expiresOn
130
+ : new Date(0);
131
+ if (expiresOn < now) {
132
+ return true;
133
+ }
134
+ return false;
135
+ }
136
+ async ensureAccessToken(logger) {
137
+ try {
138
+ await auth.ensureAccessToken(auth.defaultResource, logger, this.debug);
139
+ auth.connection.active = true;
140
+ }
141
+ catch (error) {
142
+ if (this.debug) {
143
+ await logger.logToStderr('Error:');
144
+ await logger.logToStderr(error);
145
+ await logger.logToStderr('');
146
+ }
147
+ throw new CommandError(error.message);
148
+ }
149
+ }
150
+ getCertificate(options) {
151
+ // command args take precedence over settings
152
+ if (options.certificateFile) {
153
+ return fs.readFileSync(options.certificateFile).toString('base64');
154
+ }
155
+ if (options.certificateBase64Encoded) {
156
+ return options.certificateBase64Encoded;
157
+ }
158
+ return cli.getConfig().get(settingsNames.clientCertificateFile) ||
159
+ cli.getConfig().get(settingsNames.clientCertificateBase64Encoded);
160
+ }
161
+ ;
162
+ async login(logger, args) {
163
+ if (this.verbose) {
164
+ await logger.logToStderr(`Signing in to Microsoft 365...`);
165
+ }
166
+ const authType = args.options.authType || cli.getSettingWithDefaultValue(settingsNames.authType, 'deviceCode');
167
+ auth.connection.appId = args.options.appId || cli.getClientId();
168
+ auth.connection.tenant = args.options.tenant || cli.getTenant();
169
+ auth.connection.name = args.options.connectionName;
170
+ switch (authType) {
171
+ case 'password':
172
+ auth.connection.authType = AuthType.Password;
173
+ auth.connection.userName = args.options.userName;
174
+ auth.connection.password = args.options.password;
175
+ break;
176
+ case 'certificate':
177
+ auth.connection.authType = AuthType.Certificate;
178
+ auth.connection.certificate = this.getCertificate(args.options);
179
+ auth.connection.thumbprint = args.options.thumbprint;
180
+ auth.connection.password = args.options.password ?? cli.getConfig().get(settingsNames.clientCertificatePassword);
181
+ break;
182
+ case 'identity':
183
+ auth.connection.authType = AuthType.Identity;
184
+ auth.connection.userName = args.options.userName;
185
+ break;
186
+ case 'browser':
187
+ auth.connection.authType = AuthType.Browser;
188
+ break;
189
+ case 'secret':
190
+ auth.connection.authType = AuthType.Secret;
191
+ auth.connection.secret = args.options.secret || cli.getConfig().get(settingsNames.clientSecret);
192
+ break;
193
+ }
194
+ auth.connection.cloudType = args.options.cloud;
195
+ await this.ensureAccessToken(logger);
196
+ const details = auth.getConnectionDetails(auth.connection);
197
+ if (this.debug) {
198
+ details.accessToken = JSON.stringify(auth.connection.accessTokens, null, 2);
199
+ }
200
+ await logger.log(details);
201
+ }
202
+ ;
131
203
  }
132
204
  export default new LoginCommand();
133
205
  //# sourceMappingURL=login.js.map