@pnp/cli-microsoft365 12.0.0-beta.10c5833 → 12.0.0-beta.235caf5

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 (311) hide show
  1. package/.devproxy/generate-openapi-spec.json +1 -1
  2. package/allCommands.json +1 -1
  3. package/allCommandsFull.json +1 -1
  4. package/dist/Auth.js +19 -2
  5. package/dist/cli/cli.js +3 -0
  6. package/dist/config.js +1 -0
  7. package/dist/googleAnalytics.js +96 -0
  8. package/dist/m365/cli/commands/cli-consent.js +9 -2
  9. package/dist/m365/entra/commands/agent/agent-blueprint-list.js +52 -0
  10. package/dist/m365/entra/commands/m365group/m365group-add.js +52 -97
  11. package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +20 -33
  12. package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +20 -39
  13. package/dist/m365/entra/commands/m365group/m365group-get.js +20 -41
  14. package/dist/m365/entra/commands/m365group/m365group-list.js +11 -31
  15. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-clear.js +8 -22
  16. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-list.js +9 -25
  17. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-remove.js +21 -43
  18. package/dist/m365/entra/commands/m365group/m365group-recyclebinitem-restore.js +21 -41
  19. package/dist/m365/entra/commands/m365group/m365group-remove.js +25 -46
  20. package/dist/m365/entra/commands/m365group/m365group-renew.js +19 -32
  21. package/dist/m365/entra/commands/m365group/m365group-set.js +86 -141
  22. package/dist/m365/entra/commands/m365group/m365group-teamify.js +20 -43
  23. package/dist/m365/entra/commands/m365group/m365group-user-add.js +44 -77
  24. package/dist/m365/entra/commands/m365group/m365group-user-list.js +28 -55
  25. package/dist/m365/entra/commands/m365group/m365group-user-remove.js +37 -74
  26. package/dist/m365/entra/commands/m365group/m365group-user-set.js +45 -77
  27. package/dist/m365/entra/commands.js +1 -0
  28. package/dist/m365/graph/commands/schemaextension/schemaextension-list.js +14 -16
  29. package/dist/m365/outlook/commands/calendargroup/calendargroup-add.js +97 -0
  30. package/dist/m365/outlook/commands/event/event-add.js +324 -0
  31. package/dist/m365/outlook/commands.js +2 -0
  32. package/dist/m365/spe/commands/container/container-permission-add.js +114 -0
  33. package/dist/m365/spe/commands/container/container-permission-remove.js +94 -0
  34. package/dist/m365/spe/commands/container/container-permission-set.js +90 -0
  35. package/dist/m365/spe/commands.js +3 -0
  36. package/dist/m365/spfx/commands/SpfxCompatibilityMatrix.js +15 -0
  37. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.24.0.js +19 -0
  38. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  39. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN012021_TSC_excludeDirectories.js +43 -0
  40. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN027002_OVERRIDES_qs.js +33 -0
  41. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN027003_OVERRIDES_uuid.js +33 -0
  42. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.24.0.js +77 -0
  43. package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
  44. package/dist/m365/spo/commands/app/app-add.js +35 -56
  45. package/dist/m365/spo/commands/app/app-deploy.js +41 -59
  46. package/dist/m365/spo/commands/app/app-get.js +40 -56
  47. package/dist/m365/spo/commands/app/app-install.js +20 -41
  48. package/dist/m365/spo/commands/app/app-instance-list.js +12 -24
  49. package/dist/m365/spo/commands/app/app-list.js +26 -44
  50. package/dist/m365/spo/commands/app/app-remove.js +32 -52
  51. package/dist/m365/spo/commands/app/app-retract.js +32 -51
  52. package/dist/m365/spo/commands/app/app-teamspackage-download.js +35 -54
  53. package/dist/m365/spo/commands/app/app-uninstall.js +21 -44
  54. package/dist/m365/spo/commands/app/app-upgrade.js +20 -41
  55. package/dist/m365/spo/commands/commandset/commandset-add.js +17 -59
  56. package/dist/m365/spo/commands/commandset/commandset-get.js +24 -62
  57. package/dist/m365/spo/commands/commandset/commandset-list.js +11 -34
  58. package/dist/m365/spo/commands/commandset/commandset-remove.js +21 -54
  59. package/dist/m365/spo/commands/commandset/commandset-set.js +30 -83
  60. package/dist/m365/spo/commands/contenttype/contenttype-add.js +22 -51
  61. package/dist/m365/spo/commands/contenttype/contenttype-field-list.js +38 -62
  62. package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +25 -54
  63. package/dist/m365/spo/commands/contenttype/contenttype-field-set.js +20 -43
  64. package/dist/m365/spo/commands/contenttype/contenttype-get.js +29 -54
  65. package/dist/m365/spo/commands/contenttype/contenttype-list.js +13 -30
  66. package/dist/m365/spo/commands/contenttype/contenttype-remove.js +24 -39
  67. package/dist/m365/spo/commands/contenttype/contenttype-set.js +42 -63
  68. package/dist/m365/spo/commands/contenttype/contenttype-sync.js +37 -59
  69. package/dist/m365/spo/commands/contenttypehub/contenttypehub-get.js +5 -0
  70. package/dist/m365/spo/commands/customaction/customaction-add.js +124 -145
  71. package/dist/m365/spo/commands/customaction/customaction-clear.js +12 -43
  72. package/dist/m365/spo/commands/customaction/customaction-get.js +28 -59
  73. package/dist/m365/spo/commands/customaction/customaction-list.js +12 -42
  74. package/dist/m365/spo/commands/customaction/customaction-remove.js +26 -54
  75. package/dist/m365/spo/commands/customaction/customaction-set.js +75 -132
  76. package/dist/m365/spo/commands/externaluser/externaluser-list.js +5 -14
  77. package/dist/m365/spo/commands/feature/feature-disable.js +20 -50
  78. package/dist/m365/spo/commands/feature/feature-enable.js +22 -50
  79. package/dist/m365/spo/commands/feature/feature-list.js +11 -36
  80. package/dist/m365/spo/commands/field/field-add.js +33 -62
  81. package/dist/m365/spo/commands/field/field-get.js +30 -57
  82. package/dist/m365/spo/commands/field/field-list.js +21 -46
  83. package/dist/m365/spo/commands/field/field-remove.js +32 -63
  84. package/dist/m365/spo/commands/field/field-set.js +34 -66
  85. package/dist/m365/spo/commands/file/file-get.js +4 -3
  86. package/dist/m365/spo/commands/folder/folder-unarchive.js +90 -0
  87. package/dist/m365/spo/commands/hubsite/hubsite-connect.js +38 -63
  88. package/dist/m365/spo/commands/hubsite/hubsite-data-get.js +11 -27
  89. package/dist/m365/spo/commands/hubsite/hubsite-disconnect.js +25 -47
  90. package/dist/m365/spo/commands/hubsite/hubsite-get.js +25 -37
  91. package/dist/m365/spo/commands/hubsite/hubsite-list.js +12 -24
  92. package/dist/m365/spo/commands/hubsite/hubsite-register.js +10 -18
  93. package/dist/m365/spo/commands/hubsite/hubsite-rights-grant.js +14 -32
  94. package/dist/m365/spo/commands/hubsite/hubsite-rights-revoke.js +12 -29
  95. package/dist/m365/spo/commands/hubsite/hubsite-set.js +19 -46
  96. package/dist/m365/spo/commands/hubsite/hubsite-unregister.js +11 -27
  97. package/dist/m365/spo/commands/knowledgehub/knowledgehub-get.js +5 -0
  98. package/dist/m365/spo/commands/knowledgehub/knowledgehub-remove.js +8 -22
  99. package/dist/m365/spo/commands/knowledgehub/knowledgehub-set.js +10 -18
  100. package/dist/m365/spo/commands/listitem/listitem-add.js +27 -55
  101. package/dist/m365/spo/commands/listitem/listitem-attachment-add.js +30 -58
  102. package/dist/m365/spo/commands/listitem/listitem-attachment-get.js +27 -52
  103. package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +26 -50
  104. package/dist/m365/spo/commands/listitem/listitem-attachment-remove.js +28 -55
  105. package/dist/m365/spo/commands/listitem/listitem-attachment-set.js +30 -57
  106. package/dist/m365/spo/commands/listitem/listitem-batch-add.js +36 -58
  107. package/dist/m365/spo/commands/listitem/listitem-batch-remove.js +68 -92
  108. package/dist/m365/spo/commands/listitem/listitem-batch-set.js +37 -57
  109. package/dist/m365/spo/commands/listitem/listitem-get.js +45 -79
  110. package/dist/m365/spo/commands/listitem/listitem-isrecord.js +31 -55
  111. package/dist/m365/spo/commands/listitem/listitem-list.js +47 -81
  112. package/dist/m365/spo/commands/listitem/listitem-record-declare.js +37 -60
  113. package/dist/m365/spo/commands/listitem/listitem-record-lock.js +30 -52
  114. package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +31 -52
  115. package/dist/m365/spo/commands/listitem/listitem-record-unlock.js +30 -52
  116. package/dist/m365/spo/commands/listitem/listitem-remove.js +33 -61
  117. package/dist/m365/spo/commands/listitem/listitem-retentionlabel-ensure.js +46 -67
  118. package/dist/m365/spo/commands/listitem/listitem-retentionlabel-remove.js +33 -56
  119. package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +55 -98
  120. package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +48 -74
  121. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-break.js +33 -56
  122. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-reset.js +31 -53
  123. package/dist/m365/spo/commands/listitem/listitem-set.js +33 -58
  124. package/dist/m365/spo/commands/navigation/navigation-node-add.js +74 -120
  125. package/dist/m365/spo/commands/navigation/navigation-node-get.js +4 -13
  126. package/dist/m365/spo/commands/navigation/navigation-node-list.js +7 -5
  127. package/dist/m365/spo/commands/navigation/navigation-node-remove.js +13 -47
  128. package/dist/m365/spo/commands/navigation/navigation-node-set.js +53 -114
  129. package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-list.js +1 -1
  130. package/dist/m365/spo/commands/page/page-column-list.js +7 -8
  131. package/dist/m365/spo/commands/page/page-section-list.js +15 -17
  132. package/dist/m365/spo/commands/page/page-unpublish.js +53 -0
  133. package/dist/m365/spo/commands/sitescript/sitescript-add.js +22 -37
  134. package/dist/m365/spo/commands/sitescript/sitescript-get.js +9 -26
  135. package/dist/m365/spo/commands/sitescript/sitescript-list.js +5 -0
  136. package/dist/m365/spo/commands/sitescript/sitescript-remove.js +9 -33
  137. package/dist/m365/spo/commands/sitescript/sitescript-set.js +29 -56
  138. package/dist/m365/spo/commands/spo-search.js +43 -116
  139. package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-add.js +8 -1
  140. package/dist/m365/spo/commands/tenant/tenant-commandset-add.js +8 -1
  141. package/dist/m365/spo/commands/term/term-group-list.js +7 -8
  142. package/dist/m365/spo/commands/term/term-set-list.js +6 -9
  143. package/dist/m365/spo/commands.js +3 -1
  144. package/dist/m365/spp/commands/contentcenter/contentcenter-list.js +5 -0
  145. package/dist/m365/spp/commands/model/model-get.js +25 -45
  146. package/dist/m365/spp/commands/model/model-list.js +12 -23
  147. package/dist/m365/spp/commands/model/model-remove.js +25 -45
  148. package/dist/m365/teams/commands/app/app-install.js +35 -44
  149. package/dist/m365/teams/commands/app/app-list.js +8 -33
  150. package/dist/m365/teams/commands/app/app-publish.js +21 -27
  151. package/dist/m365/teams/commands/app/app-remove.js +22 -39
  152. package/dist/m365/teams/commands/app/app-uninstall.js +12 -34
  153. package/dist/m365/teams/commands/app/app-update.js +35 -45
  154. package/dist/m365/teams/commands/channel/channel-add.js +46 -57
  155. package/dist/m365/teams/commands/channel/channel-get.js +41 -48
  156. package/dist/m365/teams/commands/channel/channel-list.js +28 -42
  157. package/dist/m365/teams/commands/channel/channel-member-add.js +53 -54
  158. package/dist/m365/teams/commands/channel/channel-member-list.js +47 -55
  159. package/dist/m365/teams/commands/channel/channel-member-remove.js +62 -62
  160. package/dist/m365/teams/commands/channel/channel-member-set.js +61 -65
  161. package/dist/m365/teams/commands/channel/channel-remove.js +47 -49
  162. package/dist/m365/teams/commands/channel/channel-set.js +47 -54
  163. package/dist/m365/teams/commands/chat/chat-get.js +30 -45
  164. package/dist/m365/teams/commands/chat/chat-list.js +22 -42
  165. package/dist/m365/teams/commands/chat/chat-member-add.js +43 -64
  166. package/dist/m365/teams/commands/chat/chat-member-list.js +10 -23
  167. package/dist/m365/teams/commands/chat/chat-member-remove.js +28 -50
  168. package/dist/m365/teams/commands/chat/chat-message-send.js +32 -55
  169. package/dist/m365/teams/commands/funsettings/funsettings-list.js +12 -23
  170. package/dist/m365/teams/commands/funsettings/funsettings-set.js +18 -54
  171. package/dist/m365/teams/commands/guestsettings/guestsettings-list.js +12 -23
  172. package/dist/m365/teams/commands/guestsettings/guestsettings-set.js +15 -40
  173. package/dist/m365/teams/commands/meeting/meeting-add.js +57 -68
  174. package/dist/m365/teams/commands/meeting/meeting-attendancereport-get.js +33 -58
  175. package/dist/m365/teams/commands/meeting/meeting-attendancereport-list.js +14 -38
  176. package/dist/m365/teams/commands/meeting/meeting-get.js +14 -38
  177. package/dist/m365/teams/commands/meeting/meeting-list.js +34 -59
  178. package/dist/m365/teams/commands/meeting/meeting-transcript-get.js +34 -58
  179. package/dist/m365/teams/commands/meeting/meeting-transcript-list.js +29 -50
  180. package/dist/m365/teams/commands/membersettings/membersettings-list.js +12 -23
  181. package/dist/m365/teams/commands/membersettings/membersettings-set.js +18 -49
  182. package/dist/m365/teams/commands/message/message-get.js +19 -30
  183. package/dist/m365/teams/commands/message/message-list.js +26 -43
  184. package/dist/m365/teams/commands/message/message-remove.js +43 -58
  185. package/dist/m365/teams/commands/message/message-reply-list.js +19 -30
  186. package/dist/m365/teams/commands/message/message-restore.js +40 -50
  187. package/dist/m365/teams/commands/message/message-send.js +19 -30
  188. package/dist/m365/teams/commands/messagingsettings/messagingsettings-list.js +12 -23
  189. package/dist/m365/teams/commands/messagingsettings/messagingsettings-set.js +18 -60
  190. package/dist/m365/teams/commands/report/report-deviceusagedistributionusercounts.js +10 -0
  191. package/dist/m365/teams/commands/report/report-deviceusageusercounts.js +10 -0
  192. package/dist/m365/teams/commands/report/report-deviceusageuserdetail.js +22 -0
  193. package/dist/m365/teams/commands/report/report-directroutingcalls.js +19 -39
  194. package/dist/m365/teams/commands/report/report-pstncalls.js +19 -39
  195. package/dist/m365/teams/commands/report/report-useractivitycounts.js +10 -0
  196. package/dist/m365/teams/commands/report/report-useractivityusercounts.js +10 -0
  197. package/dist/m365/teams/commands/report/report-useractivityuserdetail.js +22 -0
  198. package/dist/m365/teams/commands/tab/tab-add.js +23 -49
  199. package/dist/m365/teams/commands/tab/tab-get.js +55 -56
  200. package/dist/m365/teams/commands/tab/tab-list.js +17 -28
  201. package/dist/m365/teams/commands/tab/tab-remove.js +23 -42
  202. package/dist/m365/teams/commands/team/team-add.js +76 -114
  203. package/dist/m365/teams/commands/team/team-app-list.js +23 -36
  204. package/dist/m365/teams/commands/team/team-archive.js +24 -39
  205. package/dist/m365/teams/commands/team/team-clone.js +28 -62
  206. package/dist/m365/teams/commands/team/team-get.js +23 -36
  207. package/dist/m365/teams/commands/team/team-list.js +43 -57
  208. package/dist/m365/teams/commands/team/team-remove.js +24 -37
  209. package/dist/m365/teams/commands/team/team-set.js +23 -52
  210. package/dist/m365/teams/commands/team/team-unarchive.js +23 -28
  211. package/dist/m365/teams/commands/user/user-app-add.js +40 -49
  212. package/dist/m365/teams/commands/user/user-app-list.js +26 -39
  213. package/dist/m365/teams/commands/user/user-app-remove.js +37 -49
  214. package/dist/m365/teams/commands/user/user-app-upgrade.js +36 -52
  215. package/dist/m365/teams/commands/user/user-list.js +17 -39
  216. package/dist/m365/tenant/commands/report/report-activeusercounts.js +2 -1
  217. package/dist/m365/tenant/commands/report/report-activeuserdetail.js +2 -1
  218. package/dist/m365/tenant/commands/report/report-office365activationcounts.js +9 -0
  219. package/dist/m365/tenant/commands/report/report-office365activationsusercounts.js +9 -0
  220. package/dist/m365/tenant/commands/report/report-office365activationsuserdetail.js +9 -0
  221. package/dist/m365/tenant/commands/report/report-servicesusercounts.js +2 -1
  222. package/dist/m365/tenant/commands/report/report-settings-get.js +5 -0
  223. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +9 -20
  224. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.js +8 -20
  225. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-get.js +8 -15
  226. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-list.js +8 -15
  227. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.js +12 -26
  228. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-list.js +8 -22
  229. package/dist/m365/util/commands/accesstoken/accesstoken-get.js +10 -28
  230. package/dist/telemetry.js +7 -11
  231. package/dist/utils/calendar.js +1 -1
  232. package/dist/utils/formatting.js +16 -0
  233. package/dist/utils/pid.js +7 -16
  234. package/dist/utils/spe.js +1 -1
  235. package/dist/utils/spo.js +40 -3
  236. package/dist/utils/urlUtil.js +2 -2
  237. package/dist/utils/validation.js +24 -0
  238. package/dist/utils/zod.js +17 -7
  239. package/docs/docs/cmd/entra/agent/agent-blueprint-list.mdx +175 -0
  240. package/docs/docs/cmd/login.mdx +15 -2
  241. package/docs/docs/cmd/outlook/calendargroup/calendargroup-add.mdx +126 -0
  242. package/docs/docs/cmd/outlook/event/event-add.mdx +390 -0
  243. package/docs/docs/cmd/spe/container/container-add.mdx +0 -8
  244. package/docs/docs/cmd/spe/container/container-list.mdx +0 -8
  245. package/docs/docs/cmd/spe/container/container-permission-add.mdx +140 -0
  246. package/docs/docs/cmd/spe/container/container-permission-remove.mdx +78 -0
  247. package/docs/docs/cmd/spe/container/container-permission-set.mdx +78 -0
  248. package/docs/docs/cmd/spe/container/container-recyclebinitem-list.mdx +0 -8
  249. package/docs/docs/cmd/spe/container/container-recyclebinitem-restore.mdx +0 -8
  250. package/docs/docs/cmd/spe/container/container-remove.mdx +0 -8
  251. package/docs/docs/cmd/spe/containertype/containertype-add.mdx +1 -1
  252. package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -1
  253. package/docs/docs/cmd/spo/externaluser/externaluser-list.mdx +17 -30
  254. package/docs/docs/cmd/spo/file/file-archive.mdx +1 -1
  255. package/docs/docs/cmd/spo/file/file-checkin.mdx +2 -2
  256. package/docs/docs/cmd/spo/file/file-checkout-undo.mdx +1 -1
  257. package/docs/docs/cmd/spo/file/file-checkout.mdx +2 -2
  258. package/docs/docs/cmd/spo/file/file-copy.mdx +2 -2
  259. package/docs/docs/cmd/spo/file/file-get.mdx +6 -6
  260. package/docs/docs/cmd/spo/file/file-retentionlabel-ensure.mdx +1 -1
  261. package/docs/docs/cmd/spo/file/file-retentionlabel-remove.mdx +1 -1
  262. package/docs/docs/cmd/spo/file/file-roleassignment-add.mdx +1 -1
  263. package/docs/docs/cmd/spo/file/file-roleassignment-remove.mdx +1 -1
  264. package/docs/docs/cmd/spo/file/file-roleinheritance-break.mdx +3 -3
  265. package/docs/docs/cmd/spo/file/file-roleinheritance-reset.mdx +2 -2
  266. package/docs/docs/cmd/spo/file/file-sharinginfo-get.mdx +2 -2
  267. package/docs/docs/cmd/spo/file/file-sharinglink-add.mdx +22 -1
  268. package/docs/docs/cmd/spo/file/file-sharinglink-clear.mdx +24 -1
  269. package/docs/docs/cmd/spo/file/file-sharinglink-get.mdx +22 -1
  270. package/docs/docs/cmd/spo/file/file-sharinglink-list.mdx +22 -1
  271. package/docs/docs/cmd/spo/file/file-sharinglink-remove.mdx +24 -1
  272. package/docs/docs/cmd/spo/file/file-sharinglink-set.mdx +22 -1
  273. package/docs/docs/cmd/spo/file/file-unarchive.mdx +1 -1
  274. package/docs/docs/cmd/spo/file/file-version-clear.mdx +1 -1
  275. package/docs/docs/cmd/spo/file/file-version-get.mdx +1 -1
  276. package/docs/docs/cmd/spo/file/file-version-keep.mdx +1 -1
  277. package/docs/docs/cmd/spo/file/file-version-list.mdx +1 -1
  278. package/docs/docs/cmd/spo/file/file-version-remove.mdx +1 -1
  279. package/docs/docs/cmd/spo/file/file-version-restore.mdx +1 -1
  280. package/docs/docs/cmd/spo/folder/folder-archive.mdx +1 -1
  281. package/docs/docs/cmd/spo/folder/folder-copy.mdx +1 -1
  282. package/docs/docs/cmd/spo/folder/folder-get.mdx +2 -2
  283. package/docs/docs/cmd/spo/folder/folder-retentionlabel-ensure.mdx +1 -1
  284. package/docs/docs/cmd/spo/folder/folder-retentionlabel-remove.mdx +1 -1
  285. package/docs/docs/cmd/spo/folder/folder-sharinglink-add.mdx +22 -1
  286. package/docs/docs/cmd/spo/folder/folder-sharinglink-clear.mdx +23 -0
  287. package/docs/docs/cmd/spo/folder/folder-sharinglink-get.mdx +21 -0
  288. package/docs/docs/cmd/spo/folder/folder-sharinglink-list.mdx +22 -1
  289. package/docs/docs/cmd/spo/folder/folder-sharinglink-remove.mdx +24 -1
  290. package/docs/docs/cmd/spo/folder/folder-sharinglink-set.mdx +21 -0
  291. package/docs/docs/cmd/spo/folder/folder-unarchive.mdx +76 -0
  292. package/docs/docs/cmd/spo/listitem/listitem-get.mdx +0 -6
  293. package/docs/docs/cmd/spo/navigation/navigation-node-add.mdx +45 -30
  294. package/docs/docs/cmd/spo/navigation/navigation-node-get.mdx +64 -42
  295. package/docs/docs/cmd/spo/navigation/navigation-node-list.mdx +37 -27
  296. package/docs/docs/cmd/spo/navigation/navigation-node-set.mdx +10 -8
  297. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.mdx +0 -21
  298. package/docs/docs/cmd/spo/page/page-unpublish.mdx +63 -0
  299. package/docs/docs/cmd/spp/model/model-get.mdx +1 -1
  300. package/docs/docs/cmd/spp/model/model-remove.mdx +1 -1
  301. package/docs/docs/cmd/teams/tab/tab-add.mdx +19 -0
  302. package/docs/docs/cmd/teams/tab/tab-get.mdx +19 -0
  303. package/docs/docs/cmd/teams/tab/tab-list.mdx +19 -0
  304. package/docs/docs/cmd/teams/tab/tab-remove.mdx +21 -0
  305. package/docs/docs/cmd/viva/engage/engage-message-add.mdx +17 -0
  306. package/docs/docs/cmd/viva/engage/engage-message-get.mdx +17 -0
  307. package/docs/docs/cmd/viva/engage/engage-message-list.mdx +17 -0
  308. package/docs/docs/cmd/viva/engage/engage-message-remove.mdx +19 -0
  309. package/npm-shrinkwrap.json +702 -3230
  310. package/package.json +21 -38
  311. package/dist/appInsights.js +0 -43
@@ -1,12 +1,16 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _TenantServiceAnnouncementMessageGetCommand_instances, _TenantServiceAnnouncementMessageGetCommand_initOptions, _TenantServiceAnnouncementMessageGetCommand_initValidators;
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
7
3
  import request from '../../../../request.js';
8
4
  import GraphCommand from '../../../base/GraphCommand.js';
9
5
  import commands from '../../commands.js';
6
+ export const options = z.strictObject({
7
+ ...globalOptionsZod.shape,
8
+ id: z.string()
9
+ .refine(val => (/MC\d{6}/).test(val), {
10
+ message: 'The value is not a valid message ID'
11
+ })
12
+ .alias('i')
13
+ });
10
14
  class TenantServiceAnnouncementMessageGetCommand extends GraphCommand {
11
15
  get name() {
12
16
  return commands.SERVICEANNOUNCEMENT_MESSAGE_GET;
@@ -14,11 +18,8 @@ class TenantServiceAnnouncementMessageGetCommand extends GraphCommand {
14
18
  get description() {
15
19
  return 'Retrieves a specified service update message for the tenant';
16
20
  }
17
- constructor() {
18
- super();
19
- _TenantServiceAnnouncementMessageGetCommand_instances.add(this);
20
- __classPrivateFieldGet(this, _TenantServiceAnnouncementMessageGetCommand_instances, "m", _TenantServiceAnnouncementMessageGetCommand_initOptions).call(this);
21
- __classPrivateFieldGet(this, _TenantServiceAnnouncementMessageGetCommand_instances, "m", _TenantServiceAnnouncementMessageGetCommand_initValidators).call(this);
21
+ get schema() {
22
+ return options;
22
23
  }
23
24
  async commandAction(logger, args) {
24
25
  if (this.verbose) {
@@ -39,21 +40,6 @@ class TenantServiceAnnouncementMessageGetCommand extends GraphCommand {
39
40
  this.handleRejectedODataJsonPromise(err);
40
41
  }
41
42
  }
42
- isValidId(id) {
43
- return (/MC\d{6}/).test(id);
44
- }
45
43
  }
46
- _TenantServiceAnnouncementMessageGetCommand_instances = new WeakSet(), _TenantServiceAnnouncementMessageGetCommand_initOptions = function _TenantServiceAnnouncementMessageGetCommand_initOptions() {
47
- this.options.unshift({
48
- option: '-i, --id <id>'
49
- });
50
- }, _TenantServiceAnnouncementMessageGetCommand_initValidators = function _TenantServiceAnnouncementMessageGetCommand_initValidators() {
51
- this.validators.push(async (args) => {
52
- if (!this.isValidId(args.options.id)) {
53
- return `${args.options.id} is not a valid message ID`;
54
- }
55
- return true;
56
- });
57
- };
58
44
  export default new TenantServiceAnnouncementMessageGetCommand();
59
45
  //# sourceMappingURL=serviceannouncement-message-get.js.map
@@ -1,13 +1,13 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _TenantServiceAnnouncementMessageListCommand_instances, _TenantServiceAnnouncementMessageListCommand_initTelemetry, _TenantServiceAnnouncementMessageListCommand_initOptions;
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
7
3
  import { formatting } from '../../../../utils/formatting.js';
8
4
  import { odata } from '../../../../utils/odata.js';
9
5
  import GraphCommand from '../../../base/GraphCommand.js';
10
6
  import commands from '../../commands.js';
7
+ export const options = z.strictObject({
8
+ ...globalOptionsZod.shape,
9
+ service: z.string().optional().alias('s')
10
+ });
11
11
  class TenantServiceAnnouncementMessageListCommand extends GraphCommand {
12
12
  get name() {
13
13
  return commands.SERVICEANNOUNCEMENT_MESSAGE_LIST;
@@ -18,11 +18,8 @@ class TenantServiceAnnouncementMessageListCommand extends GraphCommand {
18
18
  defaultProperties() {
19
19
  return ['id', 'title'];
20
20
  }
21
- constructor() {
22
- super();
23
- _TenantServiceAnnouncementMessageListCommand_instances.add(this);
24
- __classPrivateFieldGet(this, _TenantServiceAnnouncementMessageListCommand_instances, "m", _TenantServiceAnnouncementMessageListCommand_initTelemetry).call(this);
25
- __classPrivateFieldGet(this, _TenantServiceAnnouncementMessageListCommand_instances, "m", _TenantServiceAnnouncementMessageListCommand_initOptions).call(this);
21
+ get schema() {
22
+ return options;
26
23
  }
27
24
  async commandAction(logger, args) {
28
25
  let endpoint = `${this.resource}/v1.0/admin/serviceAnnouncement/messages`;
@@ -38,16 +35,5 @@ class TenantServiceAnnouncementMessageListCommand extends GraphCommand {
38
35
  }
39
36
  }
40
37
  }
41
- _TenantServiceAnnouncementMessageListCommand_instances = new WeakSet(), _TenantServiceAnnouncementMessageListCommand_initTelemetry = function _TenantServiceAnnouncementMessageListCommand_initTelemetry() {
42
- this.telemetry.push((args) => {
43
- Object.assign(this.telemetryProperties, {
44
- service: typeof args.options.service !== 'undefined'
45
- });
46
- });
47
- }, _TenantServiceAnnouncementMessageListCommand_initOptions = function _TenantServiceAnnouncementMessageListCommand_initOptions() {
48
- this.options.unshift({
49
- option: '-s, --service [service]'
50
- });
51
- };
52
38
  export default new TenantServiceAnnouncementMessageListCommand();
53
39
  //# sourceMappingURL=serviceannouncement-message-list.js.map
@@ -1,13 +1,14 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _UtilAccessTokenGetCommand_instances, _UtilAccessTokenGetCommand_initTelemetry, _UtilAccessTokenGetCommand_initOptions;
1
+ import { z } from 'zod';
7
2
  import auth, { Auth } from '../../../../Auth.js';
8
- import Command from '../../../../Command.js';
3
+ import Command, { globalOptionsZod } from '../../../../Command.js';
9
4
  import commands from '../../commands.js';
10
5
  import { accessToken } from '../../../../utils/accessToken.js';
6
+ export const options = z.strictObject({
7
+ ...globalOptionsZod.shape,
8
+ resource: z.string().alias('r'),
9
+ new: z.boolean().optional(),
10
+ decoded: z.boolean().optional()
11
+ });
11
12
  class UtilAccessTokenGetCommand extends Command {
12
13
  get name() {
13
14
  return commands.ACCESSTOKEN_GET;
@@ -15,11 +16,8 @@ class UtilAccessTokenGetCommand extends Command {
15
16
  get description() {
16
17
  return 'Gets access token for the specified resource';
17
18
  }
18
- constructor() {
19
- super();
20
- _UtilAccessTokenGetCommand_instances.add(this);
21
- __classPrivateFieldGet(this, _UtilAccessTokenGetCommand_instances, "m", _UtilAccessTokenGetCommand_initTelemetry).call(this);
22
- __classPrivateFieldGet(this, _UtilAccessTokenGetCommand_instances, "m", _UtilAccessTokenGetCommand_initOptions).call(this);
19
+ get schema() {
20
+ return options;
23
21
  }
24
22
  async commandAction(logger, args) {
25
23
  let resource = args.options.resource;
@@ -49,21 +47,5 @@ class UtilAccessTokenGetCommand extends Command {
49
47
  }
50
48
  }
51
49
  }
52
- _UtilAccessTokenGetCommand_instances = new WeakSet(), _UtilAccessTokenGetCommand_initTelemetry = function _UtilAccessTokenGetCommand_initTelemetry() {
53
- this.telemetry.push((args) => {
54
- Object.assign(this.telemetryProperties, {
55
- new: args.options.new,
56
- decoded: args.options.decoded
57
- });
58
- });
59
- }, _UtilAccessTokenGetCommand_initOptions = function _UtilAccessTokenGetCommand_initOptions() {
60
- this.options.unshift({
61
- option: '-r, --resource <resource>'
62
- }, {
63
- option: '--new'
64
- }, {
65
- option: '--decoded'
66
- });
67
- };
68
50
  export default new UtilAccessTokenGetCommand();
69
51
  //# sourceMappingURL=accesstoken-get.js.map
package/dist/telemetry.js CHANGED
@@ -1,25 +1,21 @@
1
- import appInsights from './appInsights.js';
2
1
  import { cli } from './cli/cli.js';
2
+ import { googleAnalytics } from './googleAnalytics.js';
3
3
  import { settingsNames } from './settingsNames.js';
4
4
  import { pid } from './utils/pid.js';
5
5
  import { session } from './utils/session.js';
6
6
  async function trackTelemetry(object) {
7
7
  try {
8
8
  const { commandName, properties, exception } = object;
9
- appInsights.commonProperties.shell = pid.getProcessName(process.ppid) || '';
10
- appInsights.context.tags[appInsights.context.keys.sessionId] = session.getId(process.ppid);
9
+ const context = {
10
+ shell: pid.getProcessName(process.ppid) || '',
11
+ sessionId: session.getId(process.ppid)
12
+ };
11
13
  if (exception) {
12
- appInsights.trackException({
13
- exception
14
- });
14
+ await googleAnalytics.trackException(exception, context);
15
15
  }
16
16
  else {
17
- appInsights.trackEvent({
18
- name: commandName,
19
- properties
20
- });
17
+ await googleAnalytics.trackEvent(commandName, properties, context);
21
18
  }
22
- await appInsights.flush();
23
19
  }
24
20
  catch {
25
21
  // Do nothing
@@ -18,7 +18,7 @@ export const calendar = {
18
18
  return await request.get(requestOptions);
19
19
  },
20
20
  async getUserCalendarByName(userId, name, calendarGroupId, properties) {
21
- let url = `https://graph.microsoft.com/v1.0/users('${userId}')/${calendarGroupId ? `calendarGroups/${calendarGroupId}/` : ''}calendars?$filter=name eq '${formatting.encodeQueryParameter(name)}'`;
21
+ let url = `https://graph.microsoft.com/v1.0/users('${formatting.encodeQueryParameter(userId)}')/${calendarGroupId ? `calendarGroups/${calendarGroupId}/` : ''}calendars?$filter=name eq '${formatting.encodeQueryParameter(name)}'`;
22
22
  if (properties) {
23
23
  url += `&$select=${properties}`;
24
24
  }
@@ -189,6 +189,22 @@ export const formatting = {
189
189
  const guidPattern = /\/Guid\(([0-9a-f-]+)\)\//i;
190
190
  const match = str.match(guidPattern);
191
191
  return match ? match[1] : str;
192
+ },
193
+ /**
194
+ * Converts a CSOM date string to an ISO 8601 date string.
195
+ * @param str The string to extract the date from
196
+ * @description The string should be in the format /Date(year,month,day,hours,minutes,seconds,milliseconds)/ where month is 0-based. Escaped slashes (\/Date(...)\/) are supported as well. The date parts are interpreted as UTC.
197
+ * @returns The date as an ISO 8601 string or the original string if no match is found
198
+ * @example /Date(2026,8,21,12,24,45,997)/ => 2026-09-21T12:24:45.997Z
199
+ */
200
+ extractCsomDate(str) {
201
+ const datePattern = /^\\?\/Date\((\d+(?:,\d+){2,6})\)\\?\/$/i;
202
+ const match = str.trim().match(datePattern);
203
+ if (!match) {
204
+ return str;
205
+ }
206
+ const [year, month, day, hours = 0, minutes = 0, seconds = 0, milliseconds = 0] = match[1].split(',').map(Number);
207
+ return new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds)).toISOString();
192
208
  }
193
209
  };
194
210
  //# sourceMappingURL=formatting.js.map
package/dist/utils/pid.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import child_process from 'child_process';
2
2
  import fs from 'fs';
3
3
  import os from 'os';
4
+ import path from 'path';
4
5
  import { cache } from './cache.js';
5
6
  function getProcessNameOnMacOs(pid) {
6
7
  const res = child_process.spawnSync('ps', ['-o', 'comm=', pid.toString()], { encoding: 'utf8' });
@@ -21,24 +22,14 @@ function getProcessNameOnLinux(pid) {
21
22
  return procName;
22
23
  }
23
24
  function getProcessNameOnWindows(pid) {
24
- const findProcess = child_process.spawnSync('wmic', ['PROCESS', 'where', `ProcessId=${pid}`, 'get', 'Caption'], { encoding: 'utf8' });
25
- if (findProcess.error || findProcess.stderr) {
25
+ const tasklist = path.join(process.env.SystemRoot || 'C:\\Windows', 'System32', 'tasklist.exe');
26
+ const res = child_process.spawnSync(tasklist, ['/FI', `PID eq ${pid}`, '/FO', 'CSV', '/NH'], { encoding: 'utf8' });
27
+ if (res.error || res.status !== 0) {
26
28
  return undefined;
27
29
  }
28
- else {
29
- const getPid = child_process.spawnSync('find', ['/V', '"Caption"'], {
30
- encoding: 'utf8',
31
- input: findProcess.stdout,
32
- // must include or passing quoted "Caption" will fail
33
- windowsVerbatimArguments: true
34
- });
35
- if (getPid.error || getPid.stderr) {
36
- return undefined;
37
- }
38
- else {
39
- return getPid.stdout.trim();
40
- }
41
- }
30
+ // "pwsh.exe","12345","Console","1","98,765 K"
31
+ const match = res.stdout.match(/^"([^"]+)","(\d+)"/m);
32
+ return match && match[2] === pid.toString() ? match[1] : undefined;
42
33
  }
43
34
  export const pid = {
44
35
  getProcessName(pid) {
package/dist/utils/spe.js CHANGED
@@ -9,7 +9,7 @@ export const spe = {
9
9
  * @returns ID of the container type
10
10
  */
11
11
  async getContainerTypeIdByName(name) {
12
- const containerTypes = await odata.getAllItems(`${graphResource}/beta/storage/fileStorage/containerTypes?$select=id,name&$filter=name eq '${formatting.encodeQueryParameter(name)}'`);
12
+ const containerTypes = await odata.getAllItems(`${graphResource}/v1.0/storage/fileStorage/containerTypes?$select=id,name&$filter=name eq '${formatting.encodeQueryParameter(name)}'`);
13
13
  if (containerTypes.length === 0) {
14
14
  throw new Error(`The specified container type '${name}' does not exist.`);
15
15
  }
package/dist/utils/spo.js CHANGED
@@ -576,6 +576,45 @@ export const spo = {
576
576
  return request.post(requestOptions);
577
577
  },
578
578
  /**
579
+ * Retrieves the navigation node with the specified key.
580
+ * Returns the node along with the menu state that contains it.
581
+ * @param webUrl Web url
582
+ * @param key Key (ID) of the navigation node
583
+ * @param location Navigation to search. When not specified, searches the quick launch first and then the top navigation
584
+ */
585
+ async getMenuStateNodeByKey(webUrl, key, location) {
586
+ const locations = location ? [location] : ['QuickLaunch', 'TopNavigationBar'];
587
+ for (const navigationLocation of locations) {
588
+ const menuState = navigationLocation === 'TopNavigationBar'
589
+ ? await this.getTopNavigationMenuState(webUrl)
590
+ : await this.getQuickLaunchMenuState(webUrl);
591
+ const node = this.findMenuStateNode(menuState.Nodes, key);
592
+ if (node) {
593
+ return { menuState, node };
594
+ }
595
+ }
596
+ throw location
597
+ ? `Navigation node with id '${key}' not found in ${location}.`
598
+ : `Navigation node with id '${key}' not found.`;
599
+ },
600
+ /**
601
+ * Recursively searches the specified menu state nodes for the node with the specified key.
602
+ * @param nodes Menu state nodes to search
603
+ * @param key Key (ID) of the navigation node
604
+ */
605
+ findMenuStateNode(nodes, key) {
606
+ for (const node of nodes) {
607
+ if (node.Key === key) {
608
+ return node;
609
+ }
610
+ const childNode = this.findMenuStateNode(node.Nodes, key);
611
+ if (childNode) {
612
+ return childNode;
613
+ }
614
+ }
615
+ return undefined;
616
+ },
617
+ /**
579
618
  * Retrieves the spo group by name.
580
619
  * Returns a group object
581
620
  * @param webUrl Web url
@@ -1250,9 +1289,7 @@ export const spo = {
1250
1289
  // Neither properties nor contentTypeName provided, no need to proceed
1251
1290
  throw 'Either properties or contentTypeName must be provided for systemUpdateListItem.';
1252
1291
  }
1253
- const parsedUrl = new URL(absoluteListUrl);
1254
- const serverRelativeSiteMatch = absoluteListUrl.match(new RegExp('/sites/[^/]+'));
1255
- const webUrl = `${parsedUrl.protocol}//${parsedUrl.host}${serverRelativeSiteMatch ?? ''}`;
1292
+ const webUrl = absoluteListUrl.substring(0, absoluteListUrl.indexOf('/_api/'));
1256
1293
  if (verbose && logger) {
1257
1294
  await logger.logToStderr(`Getting list id...`);
1258
1295
  }
@@ -165,8 +165,8 @@ export const urlUtil = {
165
165
  */
166
166
  getTargetSiteAbsoluteUrl(webUrl, url) {
167
167
  const fullUrl = url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
168
- // Pattern to match SharePoint URLs
169
- const urlPattern = /https:\/\/[\w-]+\.sharepoint\.com\/(teams|sites|personal)\/([\w-]+)/;
168
+ // Pattern to match SharePoint site collection URLs on any of the supported managed paths
169
+ const urlPattern = /^https:\/\/[\w-]+\.sharepoint\.com\/(teams|sites|personal)\/[^/?#]+/i;
170
170
  const match = fullUrl.match(urlPattern);
171
171
  if (match) {
172
172
  // If a match is found, return the matched URL
@@ -100,6 +100,30 @@ export const validation = {
100
100
  }
101
101
  return false;
102
102
  },
103
+ isValidGraphDateTime(dateTime) {
104
+ const graphDateTimeRegEx = new RegExp(/^[0-9]{4}-((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|(0[469]|11)-(0[1-9]|[12][0-9]|30)|(02)-(0[1-9]|[12][0-9]))T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])$/);
105
+ if (!graphDateTimeRegEx.test(dateTime)) {
106
+ return false;
107
+ }
108
+ const [date] = dateTime.split('T');
109
+ const [year, month, day] = date.split('-').map(Number);
110
+ const isLeapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
111
+ const daysInMonth = [
112
+ 31,
113
+ isLeapYear ? 29 : 28,
114
+ 31,
115
+ 30,
116
+ 31,
117
+ 30,
118
+ 31,
119
+ 31,
120
+ 30,
121
+ 31,
122
+ 30,
123
+ 31
124
+ ];
125
+ return day <= daysInMonth[month - 1];
126
+ },
103
127
  isValidBoolean(value) {
104
128
  return value.toLowerCase() === 'true' || value.toLowerCase() === 'false';
105
129
  },
package/dist/utils/zod.js CHANGED
@@ -3,6 +3,10 @@ z.ZodType.prototype.alias = function (name) {
3
3
  this.def.alias = name;
4
4
  return this;
5
5
  };
6
+ z.ZodType.prototype.autocomplete = function (values) {
7
+ this.def.autocomplete = values;
8
+ return this;
9
+ };
6
10
  function parseObject(schema, options, _currentOption) {
7
11
  for (const key in schema.properties) {
8
12
  const property = schema.properties[key];
@@ -24,6 +28,9 @@ function parseString(schema, _options, currentOption) {
24
28
  if (schema.enum) {
25
29
  currentOption.autocomplete = schema.enum.map(e => String(e));
26
30
  }
31
+ else if (schema['x-autocomplete']) {
32
+ currentOption.autocomplete = schema['x-autocomplete'];
33
+ }
27
34
  }
28
35
  return;
29
36
  }
@@ -89,9 +96,12 @@ export const zod = {
89
96
  schemaToOptionInfo(schema) {
90
97
  const jsonSchema = z.toJSONSchema(schema, {
91
98
  override: s => {
92
- const alias = s.zodSchema.def.alias;
93
- if (alias) {
94
- s.jsonSchema['x-alias'] = alias;
99
+ const definition = s.zodSchema.def;
100
+ if (definition.alias) {
101
+ s.jsonSchema['x-alias'] = definition.alias;
102
+ }
103
+ if (definition.autocomplete) {
104
+ s.jsonSchema['x-autocomplete'] = definition.autocomplete;
95
105
  }
96
106
  },
97
107
  unrepresentable: 'any'
@@ -110,14 +120,14 @@ export const zod = {
110
120
  });
111
121
  return options;
112
122
  },
113
- coercedEnum: (e) => z.preprocess(val => {
114
- const target = String(val)?.toLowerCase();
123
+ coercedEnum: (e) => z.string().pipe(z.preprocess(val => {
124
+ const target = String(val).toLowerCase();
115
125
  for (const k of Object.values(e)) {
116
- if (String(k)?.toLowerCase() === target) {
126
+ if (String(k).toLowerCase() === target) {
117
127
  return k;
118
128
  }
119
129
  }
120
130
  return null;
121
- }, z.enum(e))
131
+ }, z.enum(e)))
122
132
  };
123
133
  //# sourceMappingURL=zod.js.map
@@ -0,0 +1,175 @@
1
+ import Global from '../../_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
4
+
5
+ # entra agent blueprint list
6
+
7
+ Retrieves a list of templates defining the agent identity type
8
+
9
+ ## Usage
10
+
11
+ ```sh
12
+ m365 entra agent blueprint list [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ ```md definition-list
18
+ `-p, --properties [properties]`
19
+ : Comma-separated list of properties to retrieve.
20
+ ```
21
+
22
+ <Global />
23
+
24
+ ## Remarks
25
+
26
+ Using the --properties option, you can specify a comma-separated list of agent blueprint properties to retrieve from Microsoft Graph. If you don't specify any properties, Microsoft Graph returns its default property set, as shown in the response examples. The CLI's default properties are used only for text output.
27
+
28
+ :::note
29
+
30
+ A principal who creates a blueprint or blueprint principal is assigned as the owner. Owners can create agent identities and modify only the resources they own, even if they aren't assigned an Agent ID role.
31
+
32
+ For nonowners to call this API in delegated scenarios using work or school accounts, the admin must be assigned a supported [Microsoft Entra role](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference). This operation supports the following built-in roles, which provide only the least privilege necessary:
33
+
34
+ - **Agent ID Administrator**.
35
+ - **Agent ID Developer** - Create agent identity blueprints and blueprint principals.
36
+
37
+ :::
38
+
39
+ ## Permissions
40
+
41
+ <Tabs>
42
+ <TabItem value="Delegated">
43
+
44
+ | Resource | Permissions |
45
+ |-----------------|---------------------------------|
46
+ | Microsoft Graph | AgentIdentityBlueprint.Read.All |
47
+
48
+ </TabItem>
49
+ <TabItem value="Application">
50
+
51
+ | Resource | Permissions |
52
+ |-----------------|---------------------------------|
53
+ | Microsoft Graph | AgentIdentityBlueprint.Read.All |
54
+
55
+ </TabItem>
56
+ </Tabs>
57
+
58
+ ## Examples
59
+
60
+ Retrieve all agent blueprint templates
61
+
62
+ ```sh
63
+ m365 entra agent blueprint list
64
+ ```
65
+
66
+ Retrieve id and name of agent blueprint templates
67
+
68
+ ```sh
69
+ m365 entra agent blueprint list --properties 'id,displayName'
70
+ ```
71
+
72
+ ## Response
73
+
74
+ <Tabs>
75
+ <TabItem value="JSON">
76
+
77
+ ```json
78
+ [
79
+ {
80
+ "appId": "0e81af7f-b058-470a-84be-3a4f5a8014ca",
81
+ "createdByAppId": "14d82eec-204b-4c2f-b7e8-296a70dab67e",
82
+ "createdDateTime": "2025-11-20T07:47:39Z",
83
+ "defaultRedirectUri": null,
84
+ "description": null,
85
+ "disabledByMicrosoftStatus": null,
86
+ "displayName": "OcnAgentBluePrint02",
87
+ "groupMembershipClaims": null,
88
+ "identifierUris": [],
89
+ "managerApplications": [],
90
+ "publisherDomain": "contoso.onmicrosoft.com",
91
+ "serviceManagementReference": null,
92
+ "signInAudience": "AzureADMyOrg",
93
+ "tags": [],
94
+ "tokenEncryptionKeyId": null,
95
+ "uniqueName": null,
96
+ "id": "0e81af7f-b058-470a-84be-3a4f5a8014ca",
97
+ "certification": null,
98
+ "optionalClaims": null,
99
+ "api": {
100
+ "acceptMappedClaims": null,
101
+ "knownClientApplications": [],
102
+ "requestedAccessTokenVersion": 2,
103
+ "oauth2PermissionScopes": [],
104
+ "preAuthorizedApplications": []
105
+ },
106
+ "appRoles": [],
107
+ "info": {
108
+ "logoUrl": null,
109
+ "marketingUrl": null,
110
+ "privacyStatementUrl": null,
111
+ "supportUrl": null,
112
+ "termsOfServiceUrl": null
113
+ },
114
+ "keyCredentials": [],
115
+ "passwordCredentials": [],
116
+ "requiredResourceAccess": [],
117
+ "verifiedPublisher": {
118
+ "displayName": null,
119
+ "verifiedPublisherId": null,
120
+ "addedDateTime": null
121
+ },
122
+ "web": {
123
+ "homePageUrl": null,
124
+ "logoutUrl": null,
125
+ "redirectUris": [],
126
+ "implicitGrantSettings": {
127
+ "enableAccessTokenIssuance": false,
128
+ "enableIdTokenIssuance": false
129
+ },
130
+ "redirectUriSettings": []
131
+ }
132
+ }
133
+ ]
134
+ ```
135
+
136
+ </TabItem>
137
+ <TabItem value="Text">
138
+
139
+ ```text
140
+ appId : 0e81af7f-b058-470a-84be-3a4f5a8014ca
141
+ displayName: OcnAgentBluePrint02
142
+ id : 0e81af7f-b058-470a-84be-3a4f5a8014ca
143
+ ```
144
+
145
+ </TabItem>
146
+ <TabItem value="CSV">
147
+
148
+ ```csv
149
+ appId,createdByAppId,createdDateTime,defaultRedirectUri,description,disabledByMicrosoftStatus,displayName,groupMembershipClaims,publisherDomain,serviceManagementReference,signInAudience,tokenEncryptionKeyId,uniqueName,id,certification,optionalClaims
150
+ 0e81af7f-b058-470a-84be-3a4f5a8014ca,14d82eec-204b-4c2f-b7e8-296a70dab67e,2025-11-20T07:47:39Z,,,,OcnAgentBluePrint02,,contoso.onmicrosoft.com,,AzureADMyOrg,,,0e81af7f-b058-470a-84be-3a4f5a8014ca,,
151
+ ```
152
+
153
+ </TabItem>
154
+ <TabItem value="Markdown">
155
+
156
+ ```md
157
+ # entra agent blueprint list --debug "false" --verbose "false"
158
+
159
+ Date: 6/5/2026
160
+
161
+ ## OcnAgentBluePrint02 (0e81af7f-b058-470a-84be-3a4f5a8014ca)
162
+
163
+ Property | Value
164
+ ---------|-------
165
+ appId | 0e81af7f-b058-470a-84be-3a4f5a8014ca
166
+ createdByAppId | 14d82eec-204b-4c2f-b7e8-296a70dab67e
167
+ createdDateTime | 2025-11-20T07:47:39Z
168
+ displayName | OcnAgentBluePrint02
169
+ publisherDomain | contoso.onmicrosoft.com
170
+ signInAudience | AzureADMyOrg
171
+ id | 0e81af7f-b058-470a-84be-3a4f5a8014ca
172
+ ```
173
+
174
+ </TabItem>
175
+ </Tabs>
@@ -78,7 +78,20 @@ When logging in to Microsoft 365 using the user name and password, next to the a
78
78
 
79
79
  When logging in to Microsoft 365 using a certificate, the CLI for Microsoft 365 will store the contents of the certificate so that it can automatically re-authenticate if necessary. The contents of the certificate are removed by re-authenticating using the device code or by calling the [logout](logout.mdx) command.
80
80
 
81
- Federated Identity is currently supported in GitHub Actions. To use this you need to set `authType` to `federatedIdentity` and specify `appId` and `tenant` to the values of the app registration you've configured a federated credential on.
81
+ Federated Identity is currently supported in GitHub Actions, Azure DevOps and GitLab CI/CD. To use this you need to set `authType` to `federatedIdentity` and specify `appId` and `tenant` to the values of the app registration you've configured a federated credential on.
82
+
83
+ To use Federated Identity in GitLab CI/CD, the job must request an ID token named `GITLAB_OIDC_TOKEN` with audience `api://AzureADTokenExchange`, for example:
84
+
85
+ ```yaml
86
+ job:
87
+ id_tokens:
88
+ GITLAB_OIDC_TOKEN:
89
+ aud: "api://AzureADTokenExchange"
90
+ script:
91
+ - m365 login --authType federatedIdentity --appId eb96cfd0-abfa-4477-8d1d-c6dfde3efb19 --tenant 9a1a1bbd-e158-4cf5-967d-a53b8e85c628
92
+ ```
93
+
94
+ The corresponding federated credential on the Microsoft Entra app registration must have issuer `https://gitlab.com` (or your self-managed GitLab instance URL) and a subject matching the GitLab OIDC claim for the job, for example `project_path:<group>/<project>:ref_type:branch:ref:<branch>`.
82
95
 
83
96
  To log in to Microsoft 365 using a certificate or secret, you will typically [create a custom Microsoft Entra application](../user-guide/using-own-identity.mdx). To use this application with the CLI for Microsoft 365, you will set the `CLIMICROSOFT365_ENTRAAPPID` environment variable to the application's ID and the `CLIMICROSOFT365_TENANT` environment variable to the ID of the Microsoft Entra tenant, where you created the Microsoft Entra application. Also, please make sure to read about [the caveats when using the certificate login option](../user-guide/cli-certificate-caveats.mdx).
84
97
 
@@ -202,7 +215,7 @@ Log in to Microsoft 365 using a user-assigned managed identity with `clientId` s
202
215
  m365 login --authType identity --userName ac9fbed5-804c-4362-a369-21a4ec51109e
203
216
  ```
204
217
 
205
- Log in to Microsoft 365 using a federated identity. Can currently only be used in GitHub Actions.
218
+ Log in to Microsoft 365 using a federated identity. Can currently only be used in GitHub Actions, Azure DevOps and GitLab CI/CD.
206
219
 
207
220
  ```sh
208
221
  m365 login --authType federatedIdentity --appId eb96cfd0-abfa-4477-8d1d-c6dfde3efb19 --tenant 9a1a1bbd-e158-4cf5-967d-a53b8e85c628