@pnp/cli-microsoft365 6.0.0-beta.da01a44 → 6.0.0-beta.da9cd2c

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 (306) hide show
  1. package/.eslintrc.js +4 -2
  2. package/dist/Command.js +16 -2
  3. package/dist/m365/aad/commands/app/app-add.js +40 -17
  4. package/dist/m365/aad/commands/app/app-list.js +38 -0
  5. package/dist/m365/aad/commands/user/user-get.js +1 -0
  6. package/dist/m365/aad/commands/user/user-guest-add.js +103 -0
  7. package/dist/m365/aad/commands.js +2 -0
  8. package/dist/m365/adaptivecard/commands/adaptivecard-send.js +4 -4
  9. package/dist/m365/base/SpoCommand.js +12 -11
  10. package/dist/m365/commands/status.js +6 -1
  11. package/dist/m365/outlook/commands/mail/mail-send.js +55 -31
  12. package/dist/m365/outlook/commands/message/message-get.js +97 -0
  13. package/dist/m365/outlook/commands.js +1 -0
  14. package/dist/m365/planner/commands/bucket/bucket-get.js +5 -8
  15. package/dist/m365/planner/commands/plan/plan-get.js +11 -31
  16. package/dist/m365/pp/commands/Environment.js +3 -0
  17. package/dist/m365/pp/commands/card/card-clone.js +122 -0
  18. package/dist/m365/pp/commands/card/card-get.js +110 -0
  19. package/dist/m365/pp/commands/card/card-list.js +68 -0
  20. package/dist/m365/pp/commands/card/card-remove.js +130 -0
  21. package/dist/m365/pp/commands/dataverse/dataverse-table-get.js +77 -0
  22. package/dist/m365/pp/commands/dataverse/dataverse-table-list.js +6 -12
  23. package/dist/m365/pp/commands/environment/environment-get.js +75 -0
  24. package/dist/m365/pp/commands/gateway/gateway-get.js +70 -0
  25. package/dist/m365/pp/commands/solution/solution-get.js +117 -0
  26. package/dist/m365/pp/commands/solution/solution-publisher-get.js +107 -0
  27. package/dist/m365/pp/commands/solution/solution-publisher-list.js +78 -0
  28. package/dist/m365/pp/commands/solution/solution-publisher-remove.js +130 -0
  29. package/dist/m365/pp/commands/solution/solution-remove.js +130 -0
  30. package/dist/m365/pp/commands.js +12 -0
  31. package/dist/m365/spfx/commands/project/project-doctor/{doctor-1.16.0-beta.1.js → doctor-1.16.0-rc.0.js} +6 -6
  32. package/dist/m365/spfx/commands/project/project-doctor.js +5 -2
  33. package/dist/m365/spfx/commands/project/project-externalize.js +4 -1
  34. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010001_YORC_version.js +2 -1
  35. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010002_YORC_isCreatingSolution.js +2 -1
  36. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010003_YORC_packageManager.js +2 -1
  37. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010004_YORC_componentType.js +2 -1
  38. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010005_YORC_environment.js +2 -1
  39. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010006_YORC_framework.js +3 -2
  40. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010007_YORC_isDomainIsolated.js +2 -1
  41. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010008_YORC_nodeVersion.js +2 -1
  42. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010009_YORC_sdkVersions_microsoft_graph_client.js +56 -0
  43. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN010010_YORC_sdkVersions_teams_js.js +56 -0
  44. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.16.0-beta.1.js → upgrade-1.16.0-rc.0.js} +44 -28
  45. package/dist/m365/spfx/commands/project/project-upgrade.js +5 -2
  46. package/dist/m365/spfx/commands/spfx-doctor.js +6 -6
  47. package/dist/m365/spo/commands/contenttype/contenttype-add.js +82 -43
  48. package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +53 -21
  49. package/dist/m365/spo/commands/contenttype/contenttype-get.js +35 -14
  50. package/dist/m365/spo/commands/field/field-add.js +26 -1
  51. package/dist/m365/spo/commands/field/field-set.js +23 -13
  52. package/dist/m365/spo/commands/file/file-roleassignment-add.js +1 -15
  53. package/dist/m365/spo/commands/file/file-roleinheritance-break.js +129 -0
  54. package/dist/m365/spo/commands/file/file-version-list.js +96 -0
  55. package/dist/m365/spo/commands/folder/folder-list.js +35 -12
  56. package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +215 -0
  57. package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +168 -0
  58. package/dist/m365/spo/commands/folder/folder-roleinheritance-break.js +11 -1
  59. package/dist/m365/spo/commands/folder/folder-roleinheritance-reset.js +12 -1
  60. package/dist/m365/spo/commands/hubsite/hubsite-connect.js +93 -18
  61. package/dist/m365/spo/commands/hubsite/hubsite-disconnect.js +69 -13
  62. package/dist/m365/spo/commands/list/list-contenttype-add.js +21 -18
  63. package/dist/m365/spo/commands/list/list-contenttype-default-set.js +59 -47
  64. package/dist/m365/spo/commands/list/list-contenttype-list.js +16 -8
  65. package/dist/m365/spo/commands/list/list-contenttype-remove.js +16 -8
  66. package/dist/m365/spo/commands/list/list-roleassignment-add.js +5 -23
  67. package/dist/m365/spo/commands/list/list-roleassignment-remove.js +4 -15
  68. package/dist/m365/spo/commands/list/list-roleinheritance-break.js +14 -6
  69. package/dist/m365/spo/commands/list/list-roleinheritance-reset.js +14 -6
  70. package/dist/m365/spo/commands/list/list-set.js +31 -8
  71. package/dist/m365/spo/commands/list/list-view-field-add.js +19 -5
  72. package/dist/m365/spo/commands/list/list-view-field-remove.js +18 -4
  73. package/dist/m365/spo/commands/list/list-view-field-set.js +18 -4
  74. package/dist/m365/spo/commands/list/list-view-list.js +14 -10
  75. package/dist/m365/spo/commands/list/list-view-remove.js +17 -8
  76. package/dist/m365/spo/commands/list/list-view-set.js +19 -7
  77. package/dist/m365/spo/commands/list/list-webhook-add.js +19 -11
  78. package/dist/m365/spo/commands/list/list-webhook-get.js +17 -10
  79. package/dist/m365/spo/commands/list/list-webhook-list.js +17 -42
  80. package/dist/m365/spo/commands/list/list-webhook-remove.js +19 -11
  81. package/dist/m365/spo/commands/list/list-webhook-set.js +27 -20
  82. package/dist/m365/spo/commands/listitem/listitem-add.js +24 -14
  83. package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +18 -8
  84. package/dist/m365/spo/commands/listitem/listitem-get.js +18 -8
  85. package/dist/m365/spo/commands/listitem/listitem-isrecord.js +20 -10
  86. package/dist/m365/spo/commands/listitem/listitem-list.js +21 -14
  87. package/dist/m365/spo/commands/listitem/listitem-record-declare.js +19 -12
  88. package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +24 -21
  89. package/dist/m365/spo/commands/listitem/listitem-remove.js +19 -11
  90. package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +239 -0
  91. package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +4 -15
  92. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-break.js +13 -5
  93. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-reset.js +13 -5
  94. package/dist/m365/spo/commands/listitem/listitem-set.js +52 -44
  95. package/dist/m365/spo/commands/page/page-clientsidewebpart-add.js +4 -7
  96. package/dist/m365/spo/commands/roledefinition/roledefinition-list.js +15 -2
  97. package/dist/m365/spo/commands/site/site-add.js +4 -11
  98. package/dist/m365/spo/commands/site/site-hubsite-connect.js +75 -0
  99. package/dist/m365/spo/commands/site/site-hubsite-disconnect.js +93 -0
  100. package/dist/m365/spo/commands/{hubsite/hubsite-theme-sync.js → site/site-hubsite-theme-sync.js} +11 -11
  101. package/dist/m365/spo/commands/sitedesign/sitedesign-get.js +4 -7
  102. package/dist/m365/spo/commands/web/web-roleassignment-add.js +4 -15
  103. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +4 -8
  104. package/dist/m365/spo/commands/web/web-roleinheritance-break.js +100 -0
  105. package/dist/m365/spo/commands.js +9 -1
  106. package/dist/m365/teams/commands/Meeting.js +3 -0
  107. package/dist/m365/teams/commands/channel/channel-add.js +9 -9
  108. package/dist/m365/teams/commands/channel/channel-get.js +2 -2
  109. package/dist/m365/teams/commands/channel/channel-remove.js +56 -39
  110. package/dist/m365/teams/commands/channel/channel-set.js +57 -19
  111. package/dist/m365/teams/commands/meeting/meeting-list.js +153 -0
  112. package/dist/m365/teams/commands/team/team-archive.js +4 -7
  113. package/dist/m365/teams/commands/team/team-remove.js +3 -3
  114. package/dist/m365/teams/commands/team/team-set.js +0 -7
  115. package/dist/m365/teams/commands/team/team-unarchive.js +3 -3
  116. package/dist/m365/teams/commands.js +1 -0
  117. package/dist/m365/todo/commands/list/list-get.js +89 -0
  118. package/dist/m365/todo/commands/task/task-add.js +55 -3
  119. package/dist/m365/todo/commands/task/task-get.js +108 -0
  120. package/dist/m365/todo/commands/task/task-set.js +53 -1
  121. package/dist/m365/todo/commands.js +2 -0
  122. package/dist/utils/md.js +8 -1
  123. package/docs/docs/_clisettings.md +18 -0
  124. package/docs/docs/cmd/aad/app/app-add.md +19 -19
  125. package/docs/docs/cmd/aad/app/app-list.md +149 -0
  126. package/docs/docs/cmd/aad/user/user-guest-add.md +107 -0
  127. package/docs/docs/cmd/adaptivecard/adaptivecard-send.md +12 -5
  128. package/docs/docs/cmd/app/app-get.md +156 -0
  129. package/docs/docs/cmd/app/app-open.md +20 -0
  130. package/docs/docs/cmd/app/permission/permission-list.md +43 -0
  131. package/docs/docs/cmd/booking/business/business-get.md +107 -0
  132. package/docs/docs/cmd/booking/business/business-list.md +34 -0
  133. package/docs/docs/cmd/flow/flow-get.md +1 -1
  134. package/docs/docs/cmd/graph/schemaextension/schemaextension-add.md +4 -11
  135. package/docs/docs/cmd/graph/schemaextension/schemaextension-set.md +4 -10
  136. package/docs/docs/cmd/outlook/mail/mail-send.md +13 -0
  137. package/docs/docs/cmd/outlook/message/message-get.md +48 -0
  138. package/docs/docs/cmd/pa/app/app-get.md +184 -0
  139. package/docs/docs/cmd/pa/app/app-list.md +181 -0
  140. package/docs/docs/cmd/pa/app/app-remove.md +4 -0
  141. package/docs/docs/cmd/pa/connector/connector-export.md +4 -0
  142. package/docs/docs/cmd/pa/connector/connector-list.md +89 -0
  143. package/docs/docs/cmd/pa/environment/environment-get.md +113 -0
  144. package/docs/docs/cmd/pa/environment/environment-list.md +109 -0
  145. package/docs/docs/cmd/pa/pcf/pcf-init.md +4 -0
  146. package/docs/docs/cmd/pa/solution/solution-init.md +5 -0
  147. package/docs/docs/cmd/pa/solution/solution-reference-add.md +4 -0
  148. package/docs/docs/cmd/planner/bucket/bucket-add.md +29 -0
  149. package/docs/docs/cmd/planner/bucket/bucket-get.md +29 -0
  150. package/docs/docs/cmd/planner/bucket/bucket-list.md +30 -0
  151. package/docs/docs/cmd/planner/bucket/bucket-remove.md +4 -0
  152. package/docs/docs/cmd/planner/bucket/bucket-set.md +4 -0
  153. package/docs/docs/cmd/planner/plan/plan-add.md +123 -0
  154. package/docs/docs/cmd/planner/plan/plan-get.md +77 -8
  155. package/docs/docs/cmd/planner/plan/plan-list.md +45 -0
  156. package/docs/docs/cmd/planner/plan/plan-remove.md +4 -0
  157. package/docs/docs/cmd/planner/task/task-get.md +0 -3
  158. package/docs/docs/cmd/pp/card/card-clone.md +77 -0
  159. package/docs/docs/cmd/pp/card/card-get.md +122 -0
  160. package/docs/docs/cmd/pp/card/card-list.md +104 -0
  161. package/docs/docs/cmd/pp/card/card-remove.md +82 -0
  162. package/docs/docs/cmd/pp/dataverse/dataverse-table-get.md +120 -0
  163. package/docs/docs/cmd/pp/dataverse/dataverse-table-list.md +85 -0
  164. package/docs/docs/cmd/pp/environment/environment-get.md +346 -0
  165. package/docs/docs/cmd/pp/environment/environment-list.md +312 -0
  166. package/docs/docs/cmd/pp/gateway/gateway-get.md +56 -0
  167. package/docs/docs/cmd/pp/gateway/gateway-list.md +35 -0
  168. package/docs/docs/cmd/pp/managementapp/managementapp-add.md +23 -0
  169. package/docs/docs/cmd/pp/managementapp/managementapp-list.md +27 -0
  170. package/docs/docs/cmd/pp/solution/solution-get.md +86 -0
  171. package/docs/docs/cmd/pp/solution/solution-list.md +37 -0
  172. package/docs/docs/cmd/pp/solution/solution-publisher-get.md +83 -0
  173. package/docs/docs/cmd/pp/solution/solution-publisher-list.md +71 -0
  174. package/docs/docs/cmd/pp/solution/solution-publisher-remove.md +58 -0
  175. package/docs/docs/cmd/pp/solution/solution-remove.md +82 -0
  176. package/docs/docs/cmd/pp/tenant/tenant-settings-list.md +62 -0
  177. package/docs/docs/cmd/spfx/project/project-rename.md +1 -14
  178. package/docs/docs/cmd/spfx/project/project-upgrade.md +1 -1
  179. package/docs/docs/cmd/spo/contenttype/contenttype-add.md +20 -2
  180. package/docs/docs/cmd/spo/contenttype/contenttype-field-remove.md +22 -4
  181. package/docs/docs/cmd/spo/contenttype/contenttype-get.md +21 -3
  182. package/docs/docs/cmd/spo/customaction/customaction-add.md +3 -0
  183. package/docs/docs/cmd/spo/customaction/customaction-set.md +3 -2
  184. package/docs/docs/cmd/spo/eventreceiver/eventreceiver-get.md +2 -2
  185. package/docs/docs/cmd/spo/eventreceiver/eventreceiver-remove.md +2 -2
  186. package/docs/docs/cmd/spo/field/field-add.md +20 -2
  187. package/docs/docs/cmd/spo/field/field-set.md +15 -3
  188. package/docs/docs/cmd/spo/file/file-roleassignment-add.md +9 -9
  189. package/docs/docs/cmd/spo/file/file-roleassignment-remove.md +3 -3
  190. package/docs/docs/cmd/spo/file/file-roleinheritance-break.md +54 -0
  191. package/docs/docs/cmd/spo/file/file-version-list.md +76 -0
  192. package/docs/docs/cmd/spo/folder/folder-list.md +45 -0
  193. package/docs/docs/cmd/spo/folder/folder-roleassignment-add.md +59 -0
  194. package/docs/docs/cmd/spo/folder/folder-roleassignment-remove.md +57 -0
  195. package/docs/docs/cmd/spo/folder/folder-roleinheritance-break.md +6 -0
  196. package/docs/docs/cmd/spo/folder/folder-roleinheritance-reset.md +6 -0
  197. package/docs/docs/cmd/spo/hubsite/hubsite-connect.md +36 -14
  198. package/docs/docs/cmd/spo/hubsite/hubsite-disconnect.md +28 -12
  199. package/docs/docs/cmd/spo/hubsite/hubsite-register.md +2 -2
  200. package/docs/docs/cmd/spo/hubsite/hubsite-unregister.md +2 -2
  201. package/docs/docs/cmd/spo/list/list-contenttype-add.md +15 -6
  202. package/docs/docs/cmd/spo/list/list-contenttype-default-set.md +16 -7
  203. package/docs/docs/cmd/spo/list/list-contenttype-list.md +15 -6
  204. package/docs/docs/cmd/spo/list/list-contenttype-remove.md +16 -7
  205. package/docs/docs/cmd/spo/list/list-roleassignment-add.md +9 -9
  206. package/docs/docs/cmd/spo/list/list-roleassignment-remove.md +8 -8
  207. package/docs/docs/cmd/spo/list/list-roleinheritance-break.md +11 -8
  208. package/docs/docs/cmd/spo/list/list-roleinheritance-reset.md +16 -7
  209. package/docs/docs/cmd/spo/list/list-set.md +18 -6
  210. package/docs/docs/cmd/spo/list/list-view-field-add.md +14 -4
  211. package/docs/docs/cmd/spo/list/list-view-field-remove.md +11 -2
  212. package/docs/docs/cmd/spo/list/list-view-field-set.md +18 -2
  213. package/docs/docs/cmd/spo/list/list-view-list.md +16 -7
  214. package/docs/docs/cmd/spo/list/list-view-remove.md +12 -3
  215. package/docs/docs/cmd/spo/list/list-view-set.md +20 -6
  216. package/docs/docs/cmd/spo/list/list-webhook-add.md +15 -16
  217. package/docs/docs/cmd/spo/list/list-webhook-get.md +16 -7
  218. package/docs/docs/cmd/spo/list/list-webhook-list.md +13 -10
  219. package/docs/docs/cmd/spo/list/list-webhook-remove.md +12 -10
  220. package/docs/docs/cmd/spo/list/list-webhook-set.md +21 -12
  221. package/docs/docs/cmd/spo/listitem/listitem-add.md +11 -2
  222. package/docs/docs/cmd/spo/listitem/listitem-attachment-list.md +11 -2
  223. package/docs/docs/cmd/spo/listitem/listitem-get.md +11 -2
  224. package/docs/docs/cmd/spo/listitem/listitem-isrecord.md +12 -2
  225. package/docs/docs/cmd/spo/listitem/listitem-list.md +17 -8
  226. package/docs/docs/cmd/spo/listitem/listitem-record-declare.md +7 -4
  227. package/docs/docs/cmd/spo/listitem/listitem-record-undeclare.md +11 -2
  228. package/docs/docs/cmd/spo/listitem/listitem-remove.md +11 -2
  229. package/docs/docs/cmd/spo/listitem/listitem-roleassignment-add.md +81 -0
  230. package/docs/docs/cmd/spo/listitem/listitem-roleassignment-remove.md +8 -8
  231. package/docs/docs/cmd/spo/listitem/listitem-roleinheritance-break.md +7 -4
  232. package/docs/docs/cmd/spo/listitem/listitem-roleinheritance-reset.md +8 -5
  233. package/docs/docs/cmd/spo/listitem/listitem-set.md +7 -4
  234. package/docs/docs/cmd/spo/page/page-clientsidewebpart-add.md +14 -19
  235. package/docs/docs/cmd/spo/page/page-control-set.md +2 -1
  236. package/docs/docs/cmd/spo/site/site-add.md +0 -3
  237. package/docs/docs/cmd/spo/site/site-hubsite-connect.md +40 -0
  238. package/docs/docs/cmd/spo/site/site-hubsite-disconnect.md +42 -0
  239. package/docs/docs/cmd/spo/{hubsite/hubsite-theme-sync.md → site/site-hubsite-theme-sync.md} +5 -5
  240. package/docs/docs/cmd/spo/sitedesign/sitedesign-get.md +2 -2
  241. package/docs/docs/cmd/spo/term/term-add.md +5 -0
  242. package/docs/docs/cmd/spo/term/term-set-add.md +6 -1
  243. package/docs/docs/cmd/spo/web/web-roleassignment-add.md +6 -6
  244. package/docs/docs/cmd/spo/web/web-roleassignment-remove.md +4 -4
  245. package/docs/docs/cmd/spo/web/web-roleinheritance-break.md +44 -0
  246. package/docs/docs/cmd/teams/channel/channel-add.md +4 -4
  247. package/docs/docs/cmd/teams/channel/channel-get.md +7 -7
  248. package/docs/docs/cmd/teams/channel/channel-remove.md +12 -9
  249. package/docs/docs/cmd/teams/channel/channel-set.md +13 -6
  250. package/docs/docs/cmd/teams/meeting/meeting-list.md +149 -0
  251. package/docs/docs/cmd/teams/message/message-get.md +80 -0
  252. package/docs/docs/cmd/teams/message/message-list.md +63 -0
  253. package/docs/docs/cmd/teams/message/message-reply-list.md +63 -0
  254. package/docs/docs/cmd/teams/messagingsettings/messagingsettings-list.md +31 -0
  255. package/docs/docs/cmd/teams/messagingsettings/messagingsettings-set.md +4 -0
  256. package/docs/docs/cmd/teams/report/report-deviceusagedistributionusercounts.md +35 -0
  257. package/docs/docs/cmd/teams/report/report-deviceusageusercounts.md +36 -0
  258. package/docs/docs/cmd/teams/report/report-deviceusageuserdetail.md +41 -0
  259. package/docs/docs/cmd/teams/report/report-directroutingcalls.md +49 -0
  260. package/docs/docs/cmd/teams/report/report-pstncalls.md +49 -0
  261. package/docs/docs/cmd/teams/report/report-useractivitycounts.md +39 -0
  262. package/docs/docs/cmd/teams/report/report-useractivityusercounts.md +33 -0
  263. package/docs/docs/cmd/teams/report/report-useractivityuserdetail.md +58 -0
  264. package/docs/docs/cmd/teams/tab/tab-add.md +35 -0
  265. package/docs/docs/cmd/teams/tab/tab-get.md +35 -0
  266. package/docs/docs/cmd/teams/tab/tab-list.md +43 -0
  267. package/docs/docs/cmd/teams/tab/tab-remove.md +4 -0
  268. package/docs/docs/cmd/teams/team/team-add.md +145 -0
  269. package/docs/docs/cmd/teams/team/team-archive.md +7 -3
  270. package/docs/docs/cmd/teams/team/team-clone.md +4 -3
  271. package/docs/docs/cmd/teams/team/team-get.md +78 -0
  272. package/docs/docs/cmd/teams/team/team-list.md +30 -0
  273. package/docs/docs/cmd/teams/team/team-remove.md +7 -3
  274. package/docs/docs/cmd/teams/team/team-set.md +4 -3
  275. package/docs/docs/cmd/teams/team/team-unarchive.md +5 -2
  276. package/docs/docs/cmd/teams/user/user-app-add.md +4 -0
  277. package/docs/docs/cmd/teams/user/user-app-list.md +40 -0
  278. package/docs/docs/cmd/teams/user/user-app-remove.md +4 -0
  279. package/docs/docs/cmd/teams/user/user-list.md +31 -0
  280. package/docs/docs/cmd/tenant/id/id-get.md +20 -0
  281. package/docs/docs/cmd/tenant/report/report-activeusercounts.md +35 -0
  282. package/docs/docs/cmd/tenant/report/report-activeuserdetail.md +49 -0
  283. package/docs/docs/cmd/tenant/report/report-office365activationcounts.md +32 -0
  284. package/docs/docs/cmd/tenant/report/report-office365activationsusercounts.md +30 -0
  285. package/docs/docs/cmd/tenant/report/report-office365activationsuserdetail.md +36 -0
  286. package/docs/docs/cmd/tenant/report/report-servicesusercounts.md +41 -0
  287. package/docs/docs/cmd/tenant/security/security-alerts-list.md +105 -0
  288. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-get.md +87 -0
  289. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-health-list.md +91 -0
  290. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-get.md +62 -0
  291. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-healthissue-list.md +51 -0
  292. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-get.md +64 -0
  293. package/docs/docs/cmd/tenant/serviceannouncement/serviceannouncement-message-list.md +52 -0
  294. package/docs/docs/cmd/todo/list/list-add.md +32 -1
  295. package/docs/docs/cmd/todo/list/list-get.md +61 -0
  296. package/docs/docs/cmd/todo/list/list-list.md +31 -0
  297. package/docs/docs/cmd/todo/list/list-remove.md +10 -6
  298. package/docs/docs/cmd/todo/list/list-set.md +9 -5
  299. package/docs/docs/cmd/todo/task/task-add.md +88 -5
  300. package/docs/docs/cmd/todo/task/task-get.md +75 -0
  301. package/docs/docs/cmd/todo/task/task-list.md +47 -0
  302. package/docs/docs/cmd/todo/task/task-remove.md +9 -4
  303. package/docs/docs/cmd/todo/task/task-set.md +88 -7
  304. package/docs/docs/cmd/util/accesstoken/accesstoken-get.md +20 -0
  305. package/docs/docs/cmd/viva/connections/connections-app-create.md +4 -0
  306. package/package.json +14 -3
package/.eslintrc.js CHANGED
@@ -185,7 +185,8 @@ module.exports = {
185
185
  "camelCase"
186
186
  ]
187
187
  }
188
- ]
188
+ ],
189
+ "@typescript-eslint/explicit-function-return-type": ["error", { "allowExpressions": true }]
189
190
  },
190
191
  "overrides": [
191
192
  {
@@ -196,7 +197,8 @@ module.exports = {
196
197
  "no-console": "error",
197
198
  "@typescript-eslint/no-empty-function": "off",
198
199
  "cli-microsoft365/correct-command-class-name": "off",
199
- "cli-microsoft365/correct-command-name": "off"
200
+ "cli-microsoft365/correct-command-name": "off",
201
+ "@typescript-eslint/explicit-function-return-type": "off"
200
202
  }
201
203
  },
202
204
  {
package/dist/Command.js CHANGED
@@ -61,6 +61,9 @@ class Command {
61
61
  __classPrivateFieldGet(this, _Command_instances, "m", _Command_initOptions).call(this);
62
62
  __classPrivateFieldGet(this, _Command_instances, "m", _Command_initValidators).call(this);
63
63
  }
64
+ get allowedOutputs() {
65
+ return ['csv', 'json', 'text'];
66
+ }
64
67
  validateUnknownOptions(args, command) {
65
68
  return __awaiter(this, void 0, void 0, function* () {
66
69
  if (this.allowUnknownOptions()) {
@@ -135,6 +138,17 @@ class Command {
135
138
  return true;
136
139
  });
137
140
  }
141
+ validateOutput(args) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ if (args.options.output &&
144
+ this.allowedOutputs.indexOf(args.options.output) < 0) {
145
+ return `'${args.options.output}' is not a valid output type. Allowed output types are ${this.allowedOutputs.join(', ')}`;
146
+ }
147
+ else {
148
+ return true;
149
+ }
150
+ });
151
+ }
138
152
  alias() {
139
153
  return;
140
154
  }
@@ -417,9 +431,9 @@ _Command_instances = new WeakSet(), _Command_initTelemetry = function _Command_i
417
431
  }, _Command_initOptions = function _Command_initOptions() {
418
432
  this.options.unshift({ option: '--query [query]' }, {
419
433
  option: '-o, --output [output]',
420
- autocomplete: ['csv', 'json', 'text']
434
+ autocomplete: this.allowedOutputs
421
435
  }, { option: '--verbose' }, { option: '--debug' });
422
436
  }, _Command_initValidators = function _Command_initValidators() {
423
- this.validators.push((args, command) => this.validateUnknownOptions(args, command), (args, command) => this.validateRequiredOptions(args, command), (args, command) => this.validateOptionSets(args, command));
437
+ this.validators.push((args, command) => this.validateUnknownOptions(args, command), (args, command) => this.validateRequiredOptions(args, command), args => this.validateOutput(args), (args, command) => this.validateOptionSets(args, command));
424
438
  };
425
439
  //# sourceMappingURL=Command.js.map
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  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");
14
14
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
15
  };
16
- var _AadAppAddCommand_instances, _AadAppAddCommand_initTelemetry, _AadAppAddCommand_initOptions, _AadAppAddCommand_initValidators;
16
+ var _AadAppAddCommand_instances, _AadAppAddCommand_initTelemetry, _AadAppAddCommand_initOptions, _AadAppAddCommand_initValidators, _AadAppAddCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const fs = require("fs");
19
19
  const uuid_1 = require("uuid");
@@ -32,6 +32,7 @@ class AadAppAddCommand extends GraphCommand_1.default {
32
32
  __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initTelemetry).call(this);
33
33
  __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initOptions).call(this);
34
34
  __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initValidators).call(this);
35
+ __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initOptionSets).call(this);
35
36
  }
36
37
  get name() {
37
38
  return commands_1.default.APP_ADD;
@@ -206,8 +207,6 @@ class AadAppAddCommand extends GraphCommand_1.default {
206
207
  delete v2Manifest.appId;
207
208
  delete v2Manifest.publisherDomain;
208
209
  // extract secrets from the manifest. Store them in a separate variable
209
- // and remove them from the manifest because we need to create them
210
- // separately
211
210
  const secrets = this.getSecretsFromManifest(v2Manifest);
212
211
  // Azure Portal returns v2 manifest whereas the Graph API expects a v1.6
213
212
  if (args.options.apisApplication || args.options.apisDelegated) {
@@ -215,6 +214,33 @@ class AadAppAddCommand extends GraphCommand_1.default {
215
214
  // otherwise, they will be skipped in the app update
216
215
  v2Manifest.requiredResourceAccess = appInfo.requiredResourceAccess;
217
216
  }
217
+ if (args.options.redirectUris) {
218
+ // take submitted redirectUris/platform as options
219
+ // otherwise, they will be removed from the app
220
+ v2Manifest.replyUrlsWithType = args.options.redirectUris.split(',').map(u => {
221
+ return {
222
+ url: u.trim(),
223
+ type: this.translatePlatformToType(args.options.platform)
224
+ };
225
+ });
226
+ }
227
+ if (args.options.multitenant) {
228
+ // override manifest setting when using multitenant flag
229
+ v2Manifest.signInAudience = 'AzureADMultipleOrgs';
230
+ }
231
+ if (args.options.implicitFlow) {
232
+ // remove manifest settings when using implicitFlow flag
233
+ delete v2Manifest.oauth2AllowIdTokenImplicitFlow;
234
+ delete v2Manifest.oauth2AllowImplicitFlow;
235
+ }
236
+ if (args.options.scopeName) {
237
+ // override manifest setting when using options.
238
+ delete v2Manifest.oauth2Permissions;
239
+ }
240
+ if (args.options.certificateFile || args.options.certificateBase64Encoded) {
241
+ // override manifest setting when using options.
242
+ delete v2Manifest.keyCredentials;
243
+ }
218
244
  const graphManifest = this.transformManifest(v2Manifest);
219
245
  const updateAppRequestOptions = {
220
246
  url: `${this.resource}/v1.0/myorganization/applications/${appInfo.id}`,
@@ -425,7 +451,6 @@ class AadAppAddCommand extends GraphCommand_1.default {
425
451
  return odata_1.odata
426
452
  .getAllItems(`${this.resource}/v1.0/myorganization/servicePrincipals?$select=appId,appRoles,id,oauth2PermissionScopes,servicePrincipalNames`)
427
453
  .then(servicePrincipals => {
428
- var _a;
429
454
  let resolvedApis = [];
430
455
  try {
431
456
  if (args.options.apisDelegated || args.options.apisApplication) {
@@ -448,17 +473,10 @@ class AadAppAddCommand extends GraphCommand_1.default {
448
473
  }
449
474
  });
450
475
  }
451
- if (typeof ((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.requiredResourceAccess) !== 'undefined' && this.manifest.requiredResourceAccess.length > 0) {
476
+ else {
452
477
  const manifestApis = this.manifest.requiredResourceAccess;
453
478
  manifestApis.forEach(manifestApi => {
454
- const requiredResource = resolvedApis.find(api => api.resourceAppId === manifestApi.resourceAppId);
455
- if (requiredResource) {
456
- // exclude if any duplicate required resources in both manifest and submitted options
457
- requiredResource.resourceAccess.push(...manifestApi.resourceAccess.filter(manRes => !requiredResource.resourceAccess.some(res => res.id === manRes.id)));
458
- }
459
- else {
460
- resolvedApis.push(manifestApi);
461
- }
479
+ resolvedApis.push(manifestApi);
462
480
  const app = servicePrincipals.find(servicePrincipals => servicePrincipals.appId === manifestApi.resourceAppId);
463
481
  if (app) {
464
482
  manifestApi.resourceAccess.forEach((res => {
@@ -547,7 +565,7 @@ class AadAppAddCommand extends GraphCommand_1.default {
547
565
  }
548
566
  }
549
567
  configureSecret(args, appInfo, logger) {
550
- if (!args.options.withSecret) {
568
+ if (!args.options.withSecret || (appInfo.secrets && appInfo.secrets.length > 0)) {
551
569
  return Promise.resolve(appInfo);
552
570
  }
553
571
  if (this.verbose) {
@@ -643,6 +661,12 @@ class AadAppAddCommand extends GraphCommand_1.default {
643
661
  }
644
662
  return Promise.resolve(appInfo);
645
663
  }
664
+ translatePlatformToType(platform) {
665
+ if (platform === 'publicClient') {
666
+ return 'InstalledClient';
667
+ }
668
+ return platform.charAt(0).toUpperCase() + platform.substring(1);
669
+ }
646
670
  }
647
671
  _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = function _AadAppAddCommand_initTelemetry() {
648
672
  this.telemetry.push((args) => {
@@ -708,9 +732,6 @@ _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = f
708
732
  });
709
733
  }, _AadAppAddCommand_initValidators = function _AadAppAddCommand_initValidators() {
710
734
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
711
- if (!args.options.manifest && !args.options.name) {
712
- return 'Specify either the name of the app to create or the manifest';
713
- }
714
735
  if (args.options.platform &&
715
736
  AadAppAddCommand.aadApplicationPlatform.indexOf(args.options.platform) < 0) {
716
737
  return `${args.options.platform} is not a valid value for platform. Allowed values are ${AadAppAddCommand.aadApplicationPlatform.join(', ')}`;
@@ -755,6 +776,8 @@ _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = f
755
776
  }
756
777
  return true;
757
778
  }));
779
+ }, _AadAppAddCommand_initOptionSets = function _AadAppAddCommand_initOptionSets() {
780
+ this.optionSets.push(['name', 'manifest']);
758
781
  };
759
782
  AadAppAddCommand.aadApplicationPlatform = ['spa', 'web', 'publicClient'];
760
783
  AadAppAddCommand.aadAppScopeConsentBy = ['admins', 'adminsAndUsers'];
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const odata_1 = require("../../../../utils/odata");
13
+ const GraphCommand_1 = require("../../../base/GraphCommand");
14
+ const commands_1 = require("../../commands");
15
+ class AadAppListCommand extends GraphCommand_1.default {
16
+ get name() {
17
+ return commands_1.default.APP_LIST;
18
+ }
19
+ get description() {
20
+ return 'Retrieves a list of Azure AD app registrations';
21
+ }
22
+ defaultProperties() {
23
+ return ['appId', 'id', 'displayName', "signInAudience"];
24
+ }
25
+ commandAction(logger) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ try {
28
+ const results = yield odata_1.odata.getAllItems(`${this.resource}/v1.0/applications`);
29
+ logger.log(results);
30
+ }
31
+ catch (err) {
32
+ this.handleRejectedODataJsonPromise(err);
33
+ }
34
+ });
35
+ }
36
+ }
37
+ module.exports = new AadAppListCommand();
38
+ //# sourceMappingURL=app-list.js.map
@@ -80,6 +80,7 @@ _AadUserGetCommand_instances = new WeakSet(), _AadUserGetCommand_initTelemetry =
80
80
  Object.assign(this.telemetryProperties, {
81
81
  id: typeof args.options.id !== 'undefined',
82
82
  userName: typeof args.options.userName !== 'undefined',
83
+ email: typeof args.options.email !== 'undefined',
83
84
  properties: args.options.properties
84
85
  });
85
86
  });
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ 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");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _AadUserGuestAddCommand_instances, _AadUserGuestAddCommand_initTelemetry, _AadUserGuestAddCommand_initOptions;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const request_1 = require("../../../../request");
19
+ const GraphCommand_1 = require("../../../base/GraphCommand");
20
+ const commands_1 = require("../../commands");
21
+ class AadUserGuestAddCommand extends GraphCommand_1.default {
22
+ constructor() {
23
+ super();
24
+ _AadUserGuestAddCommand_instances.add(this);
25
+ __classPrivateFieldGet(this, _AadUserGuestAddCommand_instances, "m", _AadUserGuestAddCommand_initTelemetry).call(this);
26
+ __classPrivateFieldGet(this, _AadUserGuestAddCommand_instances, "m", _AadUserGuestAddCommand_initOptions).call(this);
27
+ }
28
+ get name() {
29
+ return commands_1.default.USER_GUEST_ADD;
30
+ }
31
+ get description() {
32
+ return 'Invite an external user to the organization';
33
+ }
34
+ defaultProperties() {
35
+ return ['id', 'inviteRedeemUrl', 'invitedUserDisplayName', 'invitedUserEmailAddress', 'invitedUserType', 'resetRedemption', 'sendInvitationMessage', 'status'];
36
+ }
37
+ commandAction(logger, args) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ try {
40
+ const requestOptions = {
41
+ url: `${this.resource}/v1.0/invitations`,
42
+ headers: {
43
+ accept: 'application/json;odata.metadata=none'
44
+ },
45
+ responseType: 'json',
46
+ data: {
47
+ invitedUserEmailAddress: args.options.emailAddress,
48
+ inviteRedirectUrl: args.options.inviteRedirectUrl || 'https://myapplications.microsoft.com',
49
+ invitedUserDisplayName: args.options.displayName,
50
+ sendInvitationMessage: args.options.sendInvitationMessage,
51
+ invitedUserMessageInfo: {
52
+ customizedMessageBody: args.options.welcomeMessage,
53
+ messageLanguage: args.options.messageLanguage || 'en-US',
54
+ ccRecipients: args.options.ccRecipients ? this.mapEmailsToRecipients([args.options.ccRecipients]) : undefined
55
+ }
56
+ }
57
+ };
58
+ const result = yield request_1.default.post(requestOptions);
59
+ logger.log(result);
60
+ }
61
+ catch (err) {
62
+ this.handleRejectedODataJsonPromise(err);
63
+ }
64
+ });
65
+ }
66
+ mapEmailsToRecipients(emails) {
67
+ return emails.map(mail => ({
68
+ emailAddress: {
69
+ address: mail.trim()
70
+ }
71
+ }));
72
+ }
73
+ }
74
+ _AadUserGuestAddCommand_instances = new WeakSet(), _AadUserGuestAddCommand_initTelemetry = function _AadUserGuestAddCommand_initTelemetry() {
75
+ this.telemetry.push((args) => {
76
+ Object.assign(this.telemetryProperties, {
77
+ displayName: typeof args.options.displayName !== 'undefined',
78
+ inviteRedirectUrl: typeof args.options.inviteRedirectUrl !== 'undefined',
79
+ welcomeMessage: typeof args.options.welcomeMessage !== 'undefined',
80
+ messageLanguage: typeof args.options.messageLanguage !== 'undefined',
81
+ ccRecipients: typeof args.options.ccRecipients !== 'undefined',
82
+ sendInvitationMessage: !!args.options.sendInvitationMessage
83
+ });
84
+ });
85
+ }, _AadUserGuestAddCommand_initOptions = function _AadUserGuestAddCommand_initOptions() {
86
+ this.options.unshift({
87
+ option: '--emailAddress <emailAddress>'
88
+ }, {
89
+ option: '--displayName [displayName]'
90
+ }, {
91
+ option: '--inviteRedirectUrl [inviteRedirectUrl]'
92
+ }, {
93
+ option: '--welcomeMessage [welcomeMessage]'
94
+ }, {
95
+ option: '--messageLanguage [messageLanguage]'
96
+ }, {
97
+ option: '--ccRecipients [ccRecipients]'
98
+ }, {
99
+ option: '--sendInvitationMessage'
100
+ });
101
+ };
102
+ module.exports = new AadUserGuestAddCommand();
103
+ //# sourceMappingURL=user-guest-add.js.map
@@ -4,6 +4,7 @@ const prefix = 'aad';
4
4
  exports.default = {
5
5
  APP_ADD: `${prefix} app add`,
6
6
  APP_GET: `${prefix} app get`,
7
+ APP_LIST: `${prefix} app list`,
7
8
  APP_REMOVE: `${prefix} app remove`,
8
9
  APP_ROLE_ADD: `${prefix} app role add`,
9
10
  APP_ROLE_LIST: `${prefix} app role list`,
@@ -54,6 +55,7 @@ exports.default = {
54
55
  SP_ADD: `${prefix} sp add`,
55
56
  SP_GET: `${prefix} sp get`,
56
57
  USER_GET: `${prefix} user get`,
58
+ USER_GUEST_ADD: `${prefix} user guest add`,
57
59
  USER_HIBP: `${prefix} user hibp`,
58
60
  USER_LIST: `${prefix} user list`,
59
61
  USER_PASSWORD_VALIDATE: `${prefix} user password validate`,
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  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");
14
14
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
15
  };
16
- var _AdaptiveCardSendCommand_instances, _AdaptiveCardSendCommand_initTelemetry, _AdaptiveCardSendCommand_initOptions, _AdaptiveCardSendCommand_initValidators;
16
+ var _AdaptiveCardSendCommand_instances, _AdaptiveCardSendCommand_initTelemetry, _AdaptiveCardSendCommand_initOptions, _AdaptiveCardSendCommand_initValidators, _AdaptiveCardSendCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const request_1 = require("../../../request");
19
19
  const AnonymousCommand_1 = require("../../base/AnonymousCommand");
@@ -25,6 +25,7 @@ class AdaptiveCardSendCommand extends AnonymousCommand_1.default {
25
25
  __classPrivateFieldGet(this, _AdaptiveCardSendCommand_instances, "m", _AdaptiveCardSendCommand_initTelemetry).call(this);
26
26
  __classPrivateFieldGet(this, _AdaptiveCardSendCommand_instances, "m", _AdaptiveCardSendCommand_initOptions).call(this);
27
27
  __classPrivateFieldGet(this, _AdaptiveCardSendCommand_instances, "m", _AdaptiveCardSendCommand_initValidators).call(this);
28
+ __classPrivateFieldGet(this, _AdaptiveCardSendCommand_instances, "m", _AdaptiveCardSendCommand_initOptionSets).call(this);
28
29
  }
29
30
  get name() {
30
31
  return commands_1.default.SEND;
@@ -206,9 +207,6 @@ _AdaptiveCardSendCommand_instances = new WeakSet(), _AdaptiveCardSendCommand_ini
206
207
  });
207
208
  }, _AdaptiveCardSendCommand_initValidators = function _AdaptiveCardSendCommand_initValidators() {
208
209
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
209
- if (!args.options.card && !args.options.title) {
210
- return 'Specify either the title or the card to send';
211
- }
212
210
  if (args.options.card) {
213
211
  try {
214
212
  JSON.parse(args.options.card);
@@ -227,6 +225,8 @@ _AdaptiveCardSendCommand_instances = new WeakSet(), _AdaptiveCardSendCommand_ini
227
225
  }
228
226
  return true;
229
227
  }));
228
+ }, _AdaptiveCardSendCommand_initOptionSets = function _AdaptiveCardSendCommand_initOptionSets() {
229
+ this.optionSets.push(['title', 'card']);
230
230
  };
231
231
  module.exports = new AdaptiveCardSendCommand();
232
232
  //# sourceMappingURL=adaptivecard-send.js.map
@@ -24,23 +24,24 @@ class SpoCommand extends Command_1.default {
24
24
  getNamesOfOptionsWithUrls() {
25
25
  const namesOfOptionsWithUrls = [
26
26
  'appCatalogUrl',
27
- 'siteUrl',
28
- 'webUrl',
29
- 'origin',
30
- 'url',
31
- 'imageUrl',
32
27
  'actionUrl',
33
- 'logoUrl',
28
+ 'imageUrl',
34
29
  'libraryUrl',
35
- 'thumbnailUrl',
36
- 'targetUrl',
30
+ 'logoUrl',
37
31
  'newSiteUrl',
38
- 'previewImageUrl',
39
32
  'NoAccessRedirectUrl',
40
- 'StartASiteFormUrl',
41
33
  'OrgNewsSiteUrl',
34
+ 'origin',
35
+ 'parentUrl',
42
36
  'parentWebUrl',
43
- 'siteLogoUrl'
37
+ 'previewImageUrl',
38
+ 'siteLogoUrl',
39
+ 'siteUrl',
40
+ 'StartASiteFormUrl',
41
+ 'targetUrl',
42
+ 'thumbnailUrl',
43
+ 'url',
44
+ 'webUrl'
44
45
  ];
45
46
  const excludedOptionsWithUrls = this.getExcludedOptionsWithUrls();
46
47
  if (!excludedOptionsWithUrls) {
@@ -37,12 +37,17 @@ class StatusCommand extends Command_1.default {
37
37
  logger.logToStderr({
38
38
  connectedAs: accessToken_1.accessToken.getUserNameFromAccessToken(Auth_1.default.service.accessTokens[Auth_1.default.defaultResource].accessToken),
39
39
  authType: Auth_1.AuthType[Auth_1.default.service.authType],
40
+ appId: Auth_1.default.service.appId,
41
+ appTenant: Auth_1.default.service.tenant,
40
42
  accessTokens: JSON.stringify(Auth_1.default.service.accessTokens, null, 2)
41
43
  });
42
44
  }
43
45
  else {
44
46
  logger.log({
45
- connectedAs: accessToken_1.accessToken.getUserNameFromAccessToken(Auth_1.default.service.accessTokens[Auth_1.default.defaultResource].accessToken)
47
+ connectedAs: accessToken_1.accessToken.getUserNameFromAccessToken(Auth_1.default.service.accessTokens[Auth_1.default.defaultResource].accessToken),
48
+ authType: Auth_1.AuthType[Auth_1.default.service.authType],
49
+ appId: Auth_1.default.service.appId,
50
+ appTenant: Auth_1.default.service.tenant
46
51
  });
47
52
  }
48
53
  }
@@ -15,10 +15,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
15
  };
16
16
  var _OutlookMailSendCommand_instances, _OutlookMailSendCommand_initTelemetry, _OutlookMailSendCommand_initOptions, _OutlookMailSendCommand_initValidators;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ const fs = require("fs");
19
+ const path = require("path");
18
20
  const Auth_1 = require("../../../../Auth");
19
21
  const request_1 = require("../../../../request");
20
22
  const GraphCommand_1 = require("../../../base/GraphCommand");
21
23
  const commands_1 = require("../../commands");
24
+ const validation_1 = require("../../../../utils/validation");
22
25
  class OutlookMailSendCommand extends GraphCommand_1.default {
23
26
  constructor() {
24
27
  super();
@@ -34,7 +37,6 @@ class OutlookMailSendCommand extends GraphCommand_1.default {
34
37
  return 'Sends an email';
35
38
  }
36
39
  commandAction(logger, args) {
37
- var _a, _b;
38
40
  return __awaiter(this, void 0, void 0, function* () {
39
41
  try {
40
42
  const isAppOnlyAuth = Auth_1.Auth.isAppOnlyAuth(Auth_1.default.service.accessTokens[this.resource].accessToken);
@@ -48,28 +50,8 @@ class OutlookMailSendCommand extends GraphCommand_1.default {
48
50
  'content-type': 'application/json'
49
51
  },
50
52
  responseType: 'json',
51
- data: {
52
- message: {
53
- subject: args.options.subject,
54
- body: {
55
- contentType: args.options.bodyContentType || 'Text',
56
- content: args.options.bodyContents
57
- },
58
- toRecipients: this.mapEmailAddressesToRecipients(args.options.to.split(',')),
59
- ccRecipients: this.mapEmailAddressesToRecipients((_a = args.options.cc) === null || _a === void 0 ? void 0 : _a.split(',')),
60
- bccRecipients: this.mapEmailAddressesToRecipients((_b = args.options.bcc) === null || _b === void 0 ? void 0 : _b.split(',')),
61
- importance: args.options.importance
62
- },
63
- saveToSentItems: args.options.saveToSentItems
64
- }
53
+ data: this.getRequestBody(args.options)
65
54
  };
66
- if (args.options.mailbox) {
67
- requestOptions.data.message.from = {
68
- emailAddress: {
69
- address: args.options.mailbox
70
- }
71
- };
72
- }
73
55
  yield request_1.default.post(requestOptions);
74
56
  }
75
57
  catch (err) {
@@ -77,15 +59,40 @@ class OutlookMailSendCommand extends GraphCommand_1.default {
77
59
  }
78
60
  });
79
61
  }
80
- mapEmailAddressesToRecipients(emailAddresses) {
81
- if (!emailAddresses) {
82
- return emailAddresses;
62
+ mapEmailAddressToRecipient(email) {
63
+ if (!email) {
64
+ return undefined;
83
65
  }
84
- return emailAddresses.map(email => ({
66
+ return {
85
67
  emailAddress: {
86
68
  address: email.trim()
87
69
  }
70
+ };
71
+ }
72
+ getRequestBody(options) {
73
+ var _a, _b;
74
+ const attachments = typeof options.attachment === 'string' ? [options.attachment] : options.attachment;
75
+ const attachmentContents = attachments === null || attachments === void 0 ? void 0 : attachments.map(a => ({
76
+ '@odata.type': '#microsoft.graph.fileAttachment',
77
+ name: path.basename(a),
78
+ contentBytes: fs.readFileSync(a, { encoding: 'base64' })
88
79
  }));
80
+ return ({
81
+ message: {
82
+ subject: options.subject,
83
+ body: {
84
+ contentType: options.bodyContentType || 'Text',
85
+ content: options.bodyContents
86
+ },
87
+ from: this.mapEmailAddressToRecipient(options.mailbox),
88
+ toRecipients: options.to.split(',').map(mail => this.mapEmailAddressToRecipient(mail)),
89
+ ccRecipients: (_a = options.cc) === null || _a === void 0 ? void 0 : _a.split(',').map(mail => this.mapEmailAddressToRecipient(mail)),
90
+ bccRecipients: (_b = options.bcc) === null || _b === void 0 ? void 0 : _b.split(',').map(mail => this.mapEmailAddressToRecipient(mail)),
91
+ importance: options.importance,
92
+ attachments: attachmentContents
93
+ },
94
+ saveToSentItems: options.saveToSentItems
95
+ });
89
96
  }
90
97
  }
91
98
  _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initTelemetry = function _OutlookMailSendCommand_initTelemetry() {
@@ -97,7 +104,8 @@ _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initT
97
104
  saveToSentItems: args.options.saveToSentItems,
98
105
  importance: args.options.importance,
99
106
  mailbox: typeof args.options.mailbox !== 'undefined',
100
- sender: typeof args.options.sender !== 'undefined'
107
+ sender: typeof args.options.sender !== 'undefined',
108
+ attachment: typeof args.options.attachment !== 'undefined'
101
109
  });
102
110
  });
103
111
  }, _OutlookMailSendCommand_initOptions = function _OutlookMailSendCommand_initOptions() {
@@ -121,6 +129,8 @@ _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initT
121
129
  }, {
122
130
  option: '--importance [importance]',
123
131
  autocomplete: ['low', 'normal', 'high']
132
+ }, {
133
+ option: '--attachment [attachment]'
124
134
  }, {
125
135
  option: '--saveToSentItems [saveToSentItems]'
126
136
  });
@@ -129,16 +139,30 @@ _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initT
129
139
  if (args.options.bodyContentType &&
130
140
  args.options.bodyContentType !== 'Text' &&
131
141
  args.options.bodyContentType !== 'HTML') {
132
- return `${args.options.bodyContents} is not a valid value for the bodyContents option. Allowed values are Text|HTML`;
142
+ return `${args.options.bodyContentType} is not a valid value for the bodyContentType option. Allowed values are Text|HTML`;
133
143
  }
134
- if (args.options.saveToSentItems &&
135
- args.options.saveToSentItems !== 'true' &&
136
- args.options.saveToSentItems !== 'false') {
144
+ if (args.options.saveToSentItems && !validation_1.validation.isValidBoolean(args.options.saveToSentItems)) {
137
145
  return `${args.options.saveToSentItems} is not a valid value for the saveToSentItems option. Allowed values are true|false`;
138
146
  }
139
147
  if (args.options.importance && ['low', 'normal', 'high'].indexOf(args.options.importance) === -1) {
140
148
  return `'${args.options.importance}' is not a valid value for the importance option. Allowed values are low|normal|high`;
141
149
  }
150
+ if (args.options.attachment) {
151
+ const attachments = typeof args.options.attachment === 'string' ? [args.options.attachment] : args.options.attachment;
152
+ for (const attachment of attachments) {
153
+ if (!fs.existsSync(attachment)) {
154
+ return `File with path '${attachment}' was not found.`;
155
+ }
156
+ if (!fs.lstatSync(attachment).isFile()) {
157
+ return `'${attachment}' is not a file.`;
158
+ }
159
+ }
160
+ const requestBody = this.getRequestBody(args.options);
161
+ // The max body size of the request is 4 194 304 chars before getting a 413 response
162
+ if (JSON.stringify(requestBody).length > 4194304) {
163
+ return 'Exceeded the max total size of attachments which is 3MB.';
164
+ }
165
+ }
142
166
  return true;
143
167
  }));
144
168
  };