@pnp/cli-microsoft365 5.7.0-beta.b3dfced → 5.7.0-beta.bb14b6c

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 (468) hide show
  1. package/.devcontainer/Dockerfile +3 -1
  2. package/.devcontainer/devcontainer.json +1 -0
  3. package/dist/Command.js +186 -93
  4. package/dist/cli/Cli.js +11 -66
  5. package/dist/m365/aad/commands/app/app-add.js +235 -105
  6. package/dist/m365/aad/commands/app/app-get.js +37 -20
  7. package/dist/m365/aad/commands/app/app-remove.js +38 -21
  8. package/dist/m365/aad/commands/app/app-role-add.js +39 -23
  9. package/dist/m365/aad/commands/app/app-role-list.js +37 -19
  10. package/dist/m365/aad/commands/app/app-role-remove.js +40 -26
  11. package/dist/m365/aad/commands/app/app-set.js +47 -36
  12. package/dist/m365/aad/commands/approleassignment/approleassignment-add.js +48 -32
  13. package/dist/m365/aad/commands/approleassignment/approleassignment-list.js +43 -25
  14. package/dist/m365/aad/commands/approleassignment/approleassignment-remove.js +51 -36
  15. package/dist/m365/aad/commands/group/group-list.js +21 -12
  16. package/dist/m365/aad/commands/groupsetting/groupsetting-add.js +30 -17
  17. package/dist/m365/aad/commands/groupsetting/groupsetting-get.js +30 -12
  18. package/dist/m365/aad/commands/groupsetting/groupsetting-remove.js +39 -20
  19. package/dist/m365/aad/commands/groupsetting/groupsetting-set.js +30 -12
  20. package/dist/m365/aad/commands/groupsettingtemplate/groupsettingtemplate-get.js +40 -21
  21. package/dist/m365/aad/commands/o365group/o365group-add.js +64 -54
  22. package/dist/m365/aad/commands/o365group/o365group-conversation-list.js +30 -12
  23. package/dist/m365/aad/commands/o365group/o365group-conversation-post-list.js +43 -25
  24. package/dist/m365/aad/commands/o365group/o365group-get.js +32 -15
  25. package/dist/m365/aad/commands/o365group/o365group-list.js +49 -33
  26. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-clear.js +23 -14
  27. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-list.js +26 -18
  28. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-remove.js +40 -32
  29. package/dist/m365/aad/commands/o365group/o365group-recyclebinitem-restore.js +46 -28
  30. package/dist/m365/aad/commands/o365group/o365group-remove.js +42 -24
  31. package/dist/m365/aad/commands/o365group/o365group-renew.js +30 -12
  32. package/dist/m365/aad/commands/o365group/o365group-set.js +54 -30
  33. package/dist/m365/aad/commands/o365group/o365group-teamify.js +40 -15
  34. package/dist/m365/aad/commands/o365group/o365group-user-add.js +46 -29
  35. package/dist/m365/aad/commands/o365group/o365group-user-list.js +40 -21
  36. package/dist/m365/aad/commands/o365group/o365group-user-remove.js +36 -28
  37. package/dist/m365/aad/commands/o365group/o365group-user-set.js +46 -29
  38. package/dist/m365/aad/commands/oauth2grant/oauth2grant-add.js +34 -18
  39. package/dist/m365/aad/commands/oauth2grant/oauth2grant-list.js +30 -12
  40. package/dist/m365/aad/commands/oauth2grant/oauth2grant-remove.js +18 -12
  41. package/dist/m365/aad/commands/oauth2grant/oauth2grant-set.js +18 -12
  42. package/dist/m365/aad/commands/policy/policy-list.js +38 -18
  43. package/dist/m365/aad/commands/siteclassification/siteclassification-disable.js +23 -14
  44. package/dist/m365/aad/commands/siteclassification/siteclassification-enable.js +30 -24
  45. package/dist/m365/aad/commands/siteclassification/siteclassification-set.js +46 -29
  46. package/dist/m365/aad/commands/sp/sp-add.js +43 -25
  47. package/dist/m365/aad/commands/sp/sp-get.js +43 -25
  48. package/dist/m365/aad/commands/user/user-get.js +45 -28
  49. package/dist/m365/aad/commands/user/user-hibp.js +41 -23
  50. package/dist/m365/aad/commands/user/user-list.js +22 -14
  51. package/dist/m365/aad/commands/user/user-password-validate.js +16 -9
  52. package/dist/m365/aad/commands/user/user-set.js +43 -25
  53. package/dist/m365/aad/commands/user/user-signin-list.js +46 -29
  54. package/dist/m365/adaptivecard/commands/adaptivecard-send.js +54 -40
  55. package/dist/m365/app/commands/app-open.js +22 -21
  56. package/dist/m365/base/AppCommand.js +29 -13
  57. package/dist/m365/base/DateAndPeriodBasedReport.js +41 -24
  58. package/dist/m365/base/PeriodBasedReport.js +37 -18
  59. package/dist/m365/base/SpoCommand.js +1 -1
  60. package/dist/m365/booking/commands/business/business-get.js +86 -0
  61. package/dist/m365/booking/commands/business/business-list.js +30 -0
  62. package/dist/m365/booking/commands.js +8 -0
  63. package/dist/m365/cli/commands/cli-consent.js +38 -18
  64. package/dist/m365/cli/commands/cli-issue.js +26 -18
  65. package/dist/m365/cli/commands/completion/completion-pwsh-setup.js +16 -9
  66. package/dist/m365/cli/commands/config/config-get.js +38 -18
  67. package/dist/m365/cli/commands/config/config-reset.js +38 -18
  68. package/dist/m365/cli/commands/config/config-set.js +38 -21
  69. package/dist/m365/commands/login.js +54 -42
  70. package/dist/m365/file/commands/convert/convert-pdf.js +32 -15
  71. package/dist/m365/file/commands/file-add.js +35 -12
  72. package/dist/m365/file/commands/file-list.js +31 -13
  73. package/dist/m365/flow/commands/environment/environment-get.js +16 -9
  74. package/dist/m365/flow/commands/flow-disable.js +20 -15
  75. package/dist/m365/flow/commands/flow-enable.js +20 -15
  76. package/dist/m365/flow/commands/flow-export.js +56 -43
  77. package/dist/m365/flow/commands/flow-get.js +20 -15
  78. package/dist/m365/flow/commands/flow-list.js +25 -17
  79. package/dist/m365/flow/commands/flow-remove.js +44 -27
  80. package/dist/m365/flow/commands/run/run-cancel.js +36 -21
  81. package/dist/m365/flow/commands/run/run-get.js +20 -15
  82. package/dist/m365/flow/commands/run/run-list.js +18 -12
  83. package/dist/m365/flow/commands/run/run-resubmit.js +43 -26
  84. package/dist/m365/graph/commands/schemaextension/schemaextension-add.js +41 -27
  85. package/dist/m365/graph/commands/schemaextension/schemaextension-get.js +16 -9
  86. package/dist/m365/graph/commands/schemaextension/schemaextension-list.js +47 -30
  87. package/dist/m365/graph/commands/schemaextension/schemaextension-remove.js +25 -17
  88. package/dist/m365/graph/commands/schemaextension/schemaextension-set.js +63 -48
  89. package/dist/m365/graph/commands/subscription/subscription-add.js +52 -36
  90. package/dist/m365/outlook/commands/mail/mail-send.js +48 -32
  91. package/dist/m365/outlook/commands/message/message-list.js +42 -23
  92. package/dist/m365/outlook/commands/message/message-move.js +52 -36
  93. package/dist/m365/outlook/commands/room/room-list.js +23 -14
  94. package/dist/m365/pa/commands/app/app-get.js +40 -21
  95. package/dist/m365/pa/commands/app/app-list.js +40 -21
  96. package/dist/m365/pa/commands/app/app-remove.js +39 -20
  97. package/dist/m365/pa/commands/connector/connector-export.js +41 -18
  98. package/dist/m365/pa/commands/connector/connector-list.js +16 -9
  99. package/dist/m365/pa/commands/environment/environment-get.js +16 -9
  100. package/dist/m365/pa/commands/pcf/pcf-init.js +53 -50
  101. package/dist/m365/pa/commands/solution/solution-init.js +45 -38
  102. package/dist/m365/pa/commands/solution/solution-reference-add.js +40 -25
  103. package/dist/m365/planner/commands/bucket/bucket-add.js +54 -40
  104. package/dist/m365/planner/commands/bucket/bucket-get.js +49 -44
  105. package/dist/m365/planner/commands/bucket/bucket-list.js +51 -35
  106. package/dist/m365/planner/commands/bucket/bucket-remove.js +65 -54
  107. package/dist/m365/planner/commands/bucket/bucket-set.js +67 -57
  108. package/dist/m365/planner/commands/plan/plan-add.js +48 -32
  109. package/dist/m365/planner/commands/plan/plan-get.js +55 -40
  110. package/dist/m365/planner/commands/plan/plan-list.js +42 -23
  111. package/dist/m365/planner/commands/plan/plan-remove.js +43 -36
  112. package/dist/m365/planner/commands/task/task-add.js +56 -57
  113. package/dist/m365/planner/commands/task/task-checklistitem-add.js +23 -16
  114. package/dist/m365/planner/commands/task/task-checklistitem-list.js +18 -11
  115. package/dist/m365/planner/commands/task/task-checklistitem-remove.js +21 -14
  116. package/dist/m365/planner/commands/task/task-get.js +46 -36
  117. package/dist/m365/planner/commands/task/task-list.js +57 -43
  118. package/dist/m365/planner/commands/task/task-reference-add.js +39 -13
  119. package/dist/m365/planner/commands/task/task-reference-list.js +18 -11
  120. package/dist/m365/planner/commands/task/task-reference-remove.js +40 -25
  121. package/dist/m365/planner/commands/task/task-remove.js +46 -23
  122. package/dist/m365/planner/commands/task/task-set.js +52 -53
  123. package/dist/m365/planner/commands/tenant/tenant-settings-set.js +59 -44
  124. package/dist/m365/pp/commands/environment/environment-list.js +23 -9
  125. package/dist/m365/pp/commands/managementapp/managementapp-add.js +37 -19
  126. package/dist/m365/search/commands/externalconnection/externalconnection-add.js +43 -26
  127. package/dist/m365/search/commands/externalconnection/externalconnection-get.js +29 -23
  128. package/dist/m365/search/commands/externalconnection/externalconnection-remove.js +101 -0
  129. package/dist/m365/search/commands.js +2 -1
  130. package/dist/m365/spfx/commands/package/package-generate.js +46 -38
  131. package/dist/m365/spfx/commands/project/project-doctor.js +39 -22
  132. package/dist/m365/spfx/commands/project/project-externalize.js +15 -9
  133. package/dist/m365/spfx/commands/project/project-rename.js +23 -18
  134. package/dist/m365/spfx/commands/project/project-upgrade.js +53 -39
  135. package/dist/m365/spfx/commands/spfx-doctor.js +54 -19
  136. package/dist/m365/spo/commands/app/app-add.js +46 -29
  137. package/dist/m365/spo/commands/app/app-deploy.js +50 -34
  138. package/dist/m365/spo/commands/app/app-get.js +47 -30
  139. package/dist/m365/spo/commands/app/app-install.js +42 -24
  140. package/dist/m365/spo/commands/app/app-instance-list.js +30 -12
  141. package/dist/m365/spo/commands/app/app-list.js +41 -22
  142. package/dist/m365/spo/commands/app/app-remove.js +46 -29
  143. package/dist/m365/spo/commands/app/app-retract.js +46 -29
  144. package/dist/m365/spo/commands/app/app-teamspackage-download.js +40 -24
  145. package/dist/m365/spo/commands/app/app-uninstall.js +45 -28
  146. package/dist/m365/spo/commands/app/app-upgrade.js +42 -24
  147. package/dist/m365/spo/commands/apppage/apppage-add.js +43 -26
  148. package/dist/m365/spo/commands/apppage/apppage-set.js +36 -29
  149. package/dist/m365/spo/commands/cdn/cdn-get.js +38 -16
  150. package/dist/m365/spo/commands/cdn/cdn-origin-add.js +40 -21
  151. package/dist/m365/spo/commands/cdn/cdn-origin-list.js +38 -16
  152. package/dist/m365/spo/commands/cdn/cdn-origin-remove.js +43 -25
  153. package/dist/m365/spo/commands/cdn/cdn-policy-list.js +38 -16
  154. package/dist/m365/spo/commands/cdn/cdn-policy-set.js +44 -26
  155. package/dist/m365/spo/commands/cdn/cdn-set.js +45 -27
  156. package/dist/m365/spo/commands/contenttype/contenttype-add.js +50 -32
  157. package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +52 -39
  158. package/dist/m365/spo/commands/contenttype/contenttype-field-set.js +46 -35
  159. package/dist/m365/spo/commands/contenttype/contenttype-get.js +48 -26
  160. package/dist/m365/spo/commands/contenttype/contenttype-list.js +37 -15
  161. package/dist/m365/spo/commands/contenttype/contenttype-remove.js +48 -33
  162. package/dist/m365/spo/commands/customaction/customaction-add.js +143 -140
  163. package/dist/m365/spo/commands/customaction/customaction-clear.js +43 -28
  164. package/dist/m365/spo/commands/customaction/customaction-get.js +47 -32
  165. package/dist/m365/spo/commands/customaction/customaction-list.js +40 -21
  166. package/dist/m365/spo/commands/customaction/customaction-remove.js +50 -36
  167. package/dist/m365/spo/commands/customaction/customaction-set.js +129 -127
  168. package/dist/m365/spo/commands/eventreceiver/eventreceiver-get.js +58 -46
  169. package/dist/m365/spo/commands/eventreceiver/eventreceiver-list.js +49 -33
  170. package/dist/m365/spo/commands/externaluser/externaluser-list.js +50 -34
  171. package/dist/m365/spo/commands/feature/feature-disable.js +48 -33
  172. package/dist/m365/spo/commands/feature/feature-enable.js +48 -33
  173. package/dist/m365/spo/commands/feature/feature-list.js +40 -21
  174. package/dist/m365/spo/commands/field/field-add.js +44 -21
  175. package/dist/m365/spo/commands/field/field-get.js +56 -44
  176. package/dist/m365/spo/commands/field/field-list.js +45 -28
  177. package/dist/m365/spo/commands/field/field-remove.js +62 -52
  178. package/dist/m365/spo/commands/field/field-set.js +57 -45
  179. package/dist/m365/spo/commands/file/file-add.js +72 -64
  180. package/dist/m365/spo/commands/file/file-checkin.js +49 -33
  181. package/dist/m365/spo/commands/file/file-checkout.js +42 -24
  182. package/dist/m365/spo/commands/file/file-copy.js +44 -30
  183. package/dist/m365/spo/commands/file/file-get.js +54 -40
  184. package/dist/m365/spo/commands/file/file-list.js +39 -18
  185. package/dist/m365/spo/commands/file/file-move.js +44 -30
  186. package/dist/m365/spo/commands/file/file-remove.js +48 -32
  187. package/dist/m365/spo/commands/file/file-rename.js +41 -26
  188. package/dist/m365/spo/commands/file/file-sharinginfo-get.js +42 -24
  189. package/dist/m365/spo/commands/folder/folder-add.js +32 -18
  190. package/dist/m365/spo/commands/folder/folder-copy.js +41 -26
  191. package/dist/m365/spo/commands/folder/folder-get.js +30 -15
  192. package/dist/m365/spo/commands/folder/folder-list.js +30 -15
  193. package/dist/m365/spo/commands/folder/folder-move.js +41 -26
  194. package/dist/m365/spo/commands/folder/folder-remove.js +42 -27
  195. package/dist/m365/spo/commands/folder/folder-rename.js +32 -18
  196. package/dist/m365/spo/commands/group/group-add.js +60 -44
  197. package/dist/m365/spo/commands/group/group-get.js +49 -34
  198. package/dist/m365/spo/commands/group/group-list.js +28 -12
  199. package/dist/m365/spo/commands/group/group-remove.js +45 -28
  200. package/dist/m365/spo/commands/group/group-set.js +74 -67
  201. package/dist/m365/spo/commands/group/group-user-add.js +48 -24
  202. package/dist/m365/spo/commands/group/group-user-list.js +42 -18
  203. package/dist/m365/spo/commands/group/group-user-remove.js +47 -31
  204. package/dist/m365/spo/commands/hidedefaultthemes/hidedefaultthemes-set.js +37 -17
  205. package/dist/m365/spo/commands/homesite/homesite-remove.js +23 -14
  206. package/dist/m365/spo/commands/homesite/homesite-set.js +28 -12
  207. package/dist/m365/spo/commands/hubsite/hubsite-connect.js +32 -15
  208. package/dist/m365/spo/commands/hubsite/hubsite-data-get.js +37 -20
  209. package/dist/m365/spo/commands/hubsite/hubsite-disconnect.js +37 -20
  210. package/dist/m365/spo/commands/hubsite/hubsite-get.js +54 -39
  211. package/dist/m365/spo/commands/hubsite/hubsite-list.js +20 -14
  212. package/dist/m365/spo/commands/hubsite/hubsite-register.js +28 -12
  213. package/dist/m365/spo/commands/hubsite/hubsite-rights-grant.js +35 -19
  214. package/dist/m365/spo/commands/hubsite/hubsite-rights-revoke.js +39 -23
  215. package/dist/m365/spo/commands/hubsite/hubsite-set.js +48 -34
  216. package/dist/m365/spo/commands/hubsite/hubsite-theme-sync.js +28 -12
  217. package/dist/m365/spo/commands/hubsite/hubsite-unregister.js +37 -20
  218. package/dist/m365/spo/commands/knowledgehub/knowledgehub-remove.js +23 -14
  219. package/dist/m365/spo/commands/knowledgehub/knowledgehub-set.js +28 -12
  220. package/dist/m365/spo/commands/list/list-add.js +321 -365
  221. package/dist/m365/spo/commands/list/list-contenttype-add.js +47 -32
  222. package/dist/m365/spo/commands/list/list-contenttype-default-set.js +47 -32
  223. package/dist/m365/spo/commands/list/list-contenttype-list.js +42 -24
  224. package/dist/m365/spo/commands/list/list-contenttype-remove.js +50 -36
  225. package/dist/m365/spo/commands/list/list-get.js +48 -32
  226. package/dist/m365/spo/commands/list/list-label-get.js +42 -24
  227. package/dist/m365/spo/commands/list/list-label-set.js +56 -43
  228. package/dist/m365/spo/commands/list/list-list.js +37 -20
  229. package/dist/m365/spo/commands/list/list-remove.js +45 -28
  230. package/dist/m365/spo/commands/list/list-roleassignment-add.js +208 -0
  231. package/dist/m365/spo/commands/list/list-roleassignment-remove.js +171 -0
  232. package/dist/m365/spo/commands/list/list-roleinheritance-break.js +48 -33
  233. package/dist/m365/spo/commands/list/list-roleinheritance-reset.js +45 -29
  234. package/dist/m365/spo/commands/list/list-set.js +318 -362
  235. package/dist/m365/spo/commands/list/list-sitescript-get.js +42 -24
  236. package/dist/m365/spo/commands/list/list-view-add.js +48 -40
  237. package/dist/m365/spo/commands/list/list-view-field-add.js +57 -44
  238. package/dist/m365/spo/commands/list/list-view-field-remove.js +57 -44
  239. package/dist/m365/spo/commands/list/list-view-field-set.js +56 -43
  240. package/dist/m365/spo/commands/list/list-view-get.js +51 -36
  241. package/dist/m365/spo/commands/list/list-view-list.js +42 -24
  242. package/dist/m365/spo/commands/list/list-view-remove.js +51 -36
  243. package/dist/m365/spo/commands/list/list-view-set.js +48 -32
  244. package/dist/m365/spo/commands/list/list-webhook-add.js +54 -39
  245. package/dist/m365/spo/commands/list/list-webhook-get.js +45 -28
  246. package/dist/m365/spo/commands/list/list-webhook-list.js +48 -32
  247. package/dist/m365/spo/commands/list/list-webhook-remove.js +48 -32
  248. package/dist/m365/spo/commands/list/list-webhook-set.js +54 -39
  249. package/dist/m365/spo/commands/listitem/listitem-add.js +65 -57
  250. package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +44 -27
  251. package/dist/m365/spo/commands/listitem/listitem-get.js +49 -41
  252. package/dist/m365/spo/commands/listitem/listitem-isrecord.js +44 -27
  253. package/dist/m365/spo/commands/listitem/listitem-list.js +66 -66
  254. package/dist/m365/spo/commands/listitem/listitem-record-declare.js +47 -31
  255. package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +44 -27
  256. package/dist/m365/spo/commands/listitem/listitem-remove.js +50 -35
  257. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-break.js +50 -29
  258. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-reset.js +47 -32
  259. package/dist/m365/spo/commands/listitem/listitem-set.js +68 -63
  260. package/dist/m365/spo/commands/mail/mail-send.js +52 -41
  261. package/dist/m365/spo/commands/navigation/navigation-node-add.js +49 -34
  262. package/dist/m365/spo/commands/navigation/navigation-node-list.js +40 -21
  263. package/dist/m365/spo/commands/navigation/navigation-node-remove.js +45 -28
  264. package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.js +43 -25
  265. package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-list.js +0 -4
  266. package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-remove.js +18 -12
  267. package/dist/m365/spo/commands/orgnewssite/orgnewssite-list.js +0 -4
  268. package/dist/m365/spo/commands/orgnewssite/orgnewssite-remove.js +37 -20
  269. package/dist/m365/spo/commands/orgnewssite/orgnewssite-set.js +28 -12
  270. package/dist/m365/spo/commands/page/page-add.js +60 -48
  271. package/dist/m365/spo/commands/page/page-clientsidewebpart-add.js +59 -47
  272. package/dist/m365/spo/commands/page/page-column-get.js +36 -21
  273. package/dist/m365/spo/commands/page/page-column-list.js +34 -18
  274. package/dist/m365/spo/commands/page/page-control-get.js +34 -18
  275. package/dist/m365/spo/commands/page/page-control-list.js +30 -15
  276. package/dist/m365/spo/commands/page/page-control-set.js +46 -24
  277. package/dist/m365/spo/commands/page/page-copy.js +41 -26
  278. package/dist/m365/spo/commands/page/page-get.js +32 -18
  279. package/dist/m365/spo/commands/page/page-header-set.js +74 -66
  280. package/dist/m365/spo/commands/page/page-list.js +28 -12
  281. package/dist/m365/spo/commands/page/page-remove.js +32 -18
  282. package/dist/m365/spo/commands/page/page-section-add.js +43 -21
  283. package/dist/m365/spo/commands/page/page-section-get.js +34 -18
  284. package/dist/m365/spo/commands/page/page-section-list.js +30 -15
  285. package/dist/m365/spo/commands/page/page-set.js +62 -50
  286. package/dist/m365/spo/commands/page/page-template-list.js +28 -12
  287. package/dist/m365/spo/commands/page/page-text-add.js +49 -34
  288. package/dist/m365/spo/commands/propertybag/propertybag-get.js +39 -23
  289. package/dist/m365/spo/commands/propertybag/propertybag-list.js +37 -20
  290. package/dist/m365/spo/commands/propertybag/propertybag-remove.js +42 -33
  291. package/dist/m365/spo/commands/propertybag/propertybag-set.js +41 -35
  292. package/dist/m365/spo/commands/roledefinition/roledefinition-get.js +32 -15
  293. package/dist/m365/spo/commands/roledefinition/roledefinition-list.js +28 -12
  294. package/dist/m365/spo/commands/roledefinition/roledefinition-remove.js +41 -23
  295. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.js +18 -12
  296. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.js +16 -7
  297. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.js +30 -10
  298. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.js +30 -10
  299. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-set.js +40 -21
  300. package/dist/m365/spo/commands/site/site-add.js +101 -101
  301. package/dist/m365/spo/commands/site/site-appcatalog-add.js +28 -17
  302. package/dist/m365/spo/commands/site/site-appcatalog-remove.js +28 -17
  303. package/dist/m365/spo/commands/site/site-apppermission-add.js +42 -28
  304. package/dist/m365/spo/commands/site/site-apppermission-get.js +30 -15
  305. package/dist/m365/spo/commands/site/site-apppermission-list.js +40 -25
  306. package/dist/m365/spo/commands/site/site-apppermission-remove.js +46 -33
  307. package/dist/m365/spo/commands/site/site-apppermission-set.js +45 -32
  308. package/dist/m365/spo/commands/site/site-chrome-set.js +65 -53
  309. package/dist/m365/spo/commands/site/site-classic-add.js +66 -57
  310. package/dist/m365/spo/commands/site/site-classic-list.js +29 -22
  311. package/dist/m365/spo/commands/site/site-classic-set.js +74 -66
  312. package/dist/m365/spo/commands/site/site-commsite-enable.js +39 -20
  313. package/dist/m365/spo/commands/site/site-ensure.js +130 -131
  314. package/dist/m365/spo/commands/site/site-get.js +26 -10
  315. package/dist/m365/spo/commands/site/site-groupify.js +50 -38
  316. package/dist/m365/spo/commands/site/site-inplacerecordsmanagement-set.js +39 -20
  317. package/dist/m365/spo/commands/site/site-list.js +52 -36
  318. package/dist/m365/spo/commands/site/site-recyclebinitem-list.js +43 -19
  319. package/dist/m365/spo/commands/site/site-recyclebinitem-restore.js +32 -15
  320. package/dist/m365/spo/commands/site/site-remove.js +46 -32
  321. package/dist/m365/spo/commands/site/site-rename.js +50 -38
  322. package/dist/m365/spo/commands/site/site-set.js +97 -99
  323. package/dist/m365/spo/commands/sitedesign/sitedesign-add.js +55 -41
  324. package/dist/m365/spo/commands/sitedesign/sitedesign-apply.js +41 -23
  325. package/dist/m365/spo/commands/sitedesign/sitedesign-get.js +38 -16
  326. package/dist/m365/spo/commands/sitedesign/sitedesign-remove.js +39 -20
  327. package/dist/m365/spo/commands/sitedesign/sitedesign-rights-grant.js +35 -19
  328. package/dist/m365/spo/commands/sitedesign/sitedesign-rights-list.js +30 -12
  329. package/dist/m365/spo/commands/sitedesign/sitedesign-rights-revoke.js +41 -23
  330. package/dist/m365/spo/commands/sitedesign/sitedesign-run-list.js +39 -20
  331. package/dist/m365/spo/commands/sitedesign/sitedesign-run-status-get.js +32 -15
  332. package/dist/m365/spo/commands/sitedesign/sitedesign-set.js +64 -53
  333. package/dist/m365/spo/commands/sitedesign/sitedesign-task-get.js +30 -12
  334. package/dist/m365/spo/commands/sitedesign/sitedesign-task-list.js +28 -12
  335. package/dist/m365/spo/commands/sitedesign/sitedesign-task-remove.js +39 -20
  336. package/dist/m365/spo/commands/sitescript/sitescript-add.js +41 -23
  337. package/dist/m365/spo/commands/sitescript/sitescript-get.js +30 -12
  338. package/dist/m365/spo/commands/sitescript/sitescript-remove.js +39 -20
  339. package/dist/m365/spo/commands/sitescript/sitescript-set.js +48 -32
  340. package/dist/m365/spo/commands/spo-search.js +123 -126
  341. package/dist/m365/spo/commands/spo-set.js +28 -12
  342. package/dist/m365/spo/commands/storageentity/storageentity-get.js +16 -7
  343. package/dist/m365/spo/commands/storageentity/storageentity-list.js +28 -16
  344. package/dist/m365/spo/commands/storageentity/storageentity-remove.js +39 -29
  345. package/dist/m365/spo/commands/storageentity/storageentity-set.js +44 -36
  346. package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +46 -24
  347. package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-remove.js +40 -24
  348. package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-restore.js +37 -20
  349. package/dist/m365/spo/commands/tenant/tenant-settings-set.js +375 -443
  350. package/dist/m365/spo/commands/term/term-add.js +63 -52
  351. package/dist/m365/spo/commands/term/term-get.js +52 -37
  352. package/dist/m365/spo/commands/term/term-group-add.js +42 -24
  353. package/dist/m365/spo/commands/term/term-group-get.js +40 -21
  354. package/dist/m365/spo/commands/term/term-list.js +46 -29
  355. package/dist/m365/spo/commands/term/term-set-add.js +51 -36
  356. package/dist/m365/spo/commands/term/term-set-get.js +46 -29
  357. package/dist/m365/spo/commands/term/term-set-list.js +40 -21
  358. package/dist/m365/spo/commands/theme/theme-apply.js +41 -23
  359. package/dist/m365/spo/commands/theme/theme-get.js +16 -7
  360. package/dist/m365/spo/commands/theme/theme-remove.js +25 -17
  361. package/dist/m365/spo/commands/theme/theme-set.js +41 -21
  362. package/dist/m365/spo/commands/user/user-get.js +45 -28
  363. package/dist/m365/spo/commands/user/user-list.js +28 -12
  364. package/dist/m365/spo/commands/user/user-remove.js +45 -28
  365. package/dist/m365/spo/commands/userprofile/userprofile-get.js +30 -12
  366. package/dist/m365/spo/commands/userprofile/userprofile-set.js +20 -15
  367. package/dist/m365/spo/commands/web/web-add.js +54 -41
  368. package/dist/m365/spo/commands/web/web-clientsidewebpart-list.js +28 -12
  369. package/dist/m365/spo/commands/web/web-get.js +37 -20
  370. package/dist/m365/spo/commands/web/web-installedlanguage-list.js +28 -12
  371. package/dist/m365/spo/commands/web/web-list.js +28 -12
  372. package/dist/m365/spo/commands/web/web-reindex.js +25 -12
  373. package/dist/m365/spo/commands/web/web-remove.js +37 -20
  374. package/dist/m365/spo/commands/web/web-roleinheritance-reset.js +63 -0
  375. package/dist/m365/spo/commands/web/web-set.js +70 -59
  376. package/dist/m365/spo/commands.js +3 -0
  377. package/dist/m365/teams/commands/app/app-install.js +37 -13
  378. package/dist/m365/teams/commands/app/app-list.js +43 -25
  379. package/dist/m365/teams/commands/app/app-publish.js +30 -12
  380. package/dist/m365/teams/commands/app/app-remove.js +39 -20
  381. package/dist/m365/teams/commands/app/app-uninstall.js +41 -18
  382. package/dist/m365/teams/commands/app/app-update.js +42 -24
  383. package/dist/m365/teams/commands/cache/cache-remove.js +26 -18
  384. package/dist/m365/teams/commands/channel/channel-add.js +52 -37
  385. package/dist/m365/teams/commands/channel/channel-get.js +47 -34
  386. package/dist/m365/teams/commands/channel/channel-list.js +43 -25
  387. package/dist/m365/teams/commands/channel/channel-member-add.js +65 -55
  388. package/dist/m365/teams/commands/channel/channel-member-list.js +50 -37
  389. package/dist/m365/teams/commands/channel/channel-member-remove.js +60 -54
  390. package/dist/m365/teams/commands/channel/channel-member-set.js +58 -48
  391. package/dist/m365/teams/commands/channel/channel-remove.js +45 -28
  392. package/dist/m365/teams/commands/channel/channel-set.js +50 -33
  393. package/dist/m365/teams/commands/chat/chat-get.js +63 -54
  394. package/dist/m365/teams/commands/chat/chat-list.js +38 -12
  395. package/dist/m365/teams/commands/chat/chat-member-list.js +30 -12
  396. package/dist/m365/teams/commands/chat/chat-message-list.js +30 -12
  397. package/dist/m365/teams/commands/chat/chat-message-send.js +62 -57
  398. package/dist/m365/teams/commands/chat/chatUtil.js +0 -12
  399. package/dist/m365/teams/commands/funsettings/funsettings-list.js +30 -12
  400. package/dist/m365/teams/commands/funsettings/funsettings-set.js +48 -32
  401. package/dist/m365/teams/commands/guestsettings/guestsettings-list.js +30 -12
  402. package/dist/m365/teams/commands/guestsettings/guestsettings-set.js +41 -25
  403. package/dist/m365/teams/commands/membersettings/membersettings-list.js +30 -12
  404. package/dist/m365/teams/commands/membersettings/membersettings-set.js +47 -34
  405. package/dist/m365/teams/commands/message/message-get.js +34 -18
  406. package/dist/m365/teams/commands/message/message-list.js +41 -18
  407. package/dist/m365/teams/commands/message/message-reply-list.js +34 -18
  408. package/dist/m365/teams/commands/messagingsettings/messagingsettings-list.js +30 -12
  409. package/dist/m365/teams/commands/messagingsettings/messagingsettings-set.js +47 -34
  410. package/dist/m365/teams/commands/report/report-directroutingcalls.js +39 -20
  411. package/dist/m365/teams/commands/report/report-pstncalls.js +39 -20
  412. package/dist/m365/teams/commands/tab/tab-add.js +59 -46
  413. package/dist/m365/teams/commands/tab/tab-get.js +50 -38
  414. package/dist/m365/teams/commands/tab/tab-list.js +32 -15
  415. package/dist/m365/teams/commands/tab/tab-remove.js +43 -26
  416. package/dist/m365/teams/commands/team/team-add.js +44 -30
  417. package/dist/m365/teams/commands/team/team-archive.js +46 -26
  418. package/dist/m365/teams/commands/team/team-clone.js +75 -64
  419. package/dist/m365/teams/commands/team/team-get.js +40 -21
  420. package/dist/m365/teams/commands/team/team-list.js +23 -14
  421. package/dist/m365/teams/commands/team/team-remove.js +43 -26
  422. package/dist/m365/teams/commands/team/team-set.js +55 -44
  423. package/dist/m365/teams/commands/team/team-unarchive.js +34 -18
  424. package/dist/m365/teams/commands/user/user-app-add.js +32 -15
  425. package/dist/m365/teams/commands/user/user-app-list.js +40 -21
  426. package/dist/m365/teams/commands/user/user-app-remove.js +41 -23
  427. package/dist/m365/teams/commands/user/user-list.js +38 -22
  428. package/dist/m365/tenant/commands/id/id-get.js +23 -9
  429. package/dist/m365/tenant/commands/security/security-alerts-list.js +22 -13
  430. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +22 -14
  431. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-list.js +22 -13
  432. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-get.js +16 -9
  433. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-healthissue-list.js +16 -9
  434. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-get.js +30 -12
  435. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-message-list.js +23 -9
  436. package/dist/m365/todo/commands/list/list-add.js +16 -9
  437. package/dist/m365/todo/commands/list/list-remove.js +43 -25
  438. package/dist/m365/todo/commands/list/list-set.js +42 -27
  439. package/dist/m365/todo/commands/task/task-add.js +42 -24
  440. package/dist/m365/todo/commands/task/task-list.js +40 -21
  441. package/dist/m365/todo/commands/task/task-remove.js +45 -28
  442. package/dist/m365/todo/commands/task/task-set.js +58 -45
  443. package/dist/m365/util/commands/accesstoken/accesstoken-get.js +25 -12
  444. package/dist/m365/viva/commands/connections/connections-app-create.js +28 -21
  445. package/dist/m365/yammer/commands/group/group-list.js +37 -21
  446. package/dist/m365/yammer/commands/group/group-user-add.js +42 -24
  447. package/dist/m365/yammer/commands/group/group-user-remove.js +42 -24
  448. package/dist/m365/yammer/commands/message/message-add.js +48 -32
  449. package/dist/m365/yammer/commands/message/message-get.js +30 -12
  450. package/dist/m365/yammer/commands/message/message-like-set.js +39 -24
  451. package/dist/m365/yammer/commands/message/message-list.js +50 -38
  452. package/dist/m365/yammer/commands/message/message-remove.js +39 -20
  453. package/dist/m365/yammer/commands/network/network-list.js +23 -14
  454. package/dist/m365/yammer/commands/user/user-get.js +40 -21
  455. package/dist/m365/yammer/commands/user/user-list.js +47 -34
  456. package/dist/m365/yammer/commands/yammer-search.js +40 -25
  457. package/docs/docs/cmd/aad/app/app-add.md +12 -1
  458. package/docs/docs/cmd/aad/app/app-set.md +1 -1
  459. package/docs/docs/cmd/booking/business/business-get.md +33 -0
  460. package/docs/docs/cmd/booking/business/business-list.md +21 -0
  461. package/docs/docs/cmd/search/externalconnection/externalconnection-remove.md +40 -0
  462. package/docs/docs/cmd/spo/list/list-roleassignment-add.md +78 -0
  463. package/docs/docs/cmd/spo/list/list-roleassignment-remove.md +54 -0
  464. package/docs/docs/cmd/spo/navigation/navigation-node-add.md +1 -1
  465. package/docs/docs/cmd/spo/roledefinition/roledefinition-get.md +1 -1
  466. package/docs/docs/cmd/spo/web/web-roleinheritance-reset.md +24 -0
  467. package/npm-shrinkwrap.json +2 -2
  468. package/package.json +11 -1
@@ -8,6 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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 _AadAppAddCommand_instances, _AadAppAddCommand_initTelemetry, _AadAppAddCommand_initOptions, _AadAppAddCommand_initValidators;
11
17
  Object.defineProperty(exports, "__esModule", { value: true });
12
18
  const fs = require("fs");
13
19
  const uuid_1 = require("uuid");
@@ -18,8 +24,13 @@ const GraphCommand_1 = require("../../../base/GraphCommand");
18
24
  const commands_1 = require("../../commands");
19
25
  class AadAppAddCommand extends GraphCommand_1.default {
20
26
  constructor() {
21
- super(...arguments);
27
+ super();
28
+ _AadAppAddCommand_instances.add(this);
22
29
  this.appName = '';
30
+ this.appPermissions = [];
31
+ __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initTelemetry).call(this);
32
+ __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initOptions).call(this);
33
+ __classPrivateFieldGet(this, _AadAppAddCommand_instances, "m", _AadAppAddCommand_initValidators).call(this);
23
34
  }
24
35
  get name() {
25
36
  return commands_1.default.APP_ADD;
@@ -27,24 +38,6 @@ class AadAppAddCommand extends GraphCommand_1.default {
27
38
  get description() {
28
39
  return 'Creates new Azure AD app registration';
29
40
  }
30
- getTelemetryProperties(args) {
31
- const telemetryProps = super.getTelemetryProperties(args);
32
- telemetryProps.apis = typeof args.options.apisDelegated !== 'undefined';
33
- telemetryProps.implicitFlow = args.options.implicitFlow;
34
- telemetryProps.multitenant = args.options.multitenant;
35
- telemetryProps.platform = args.options.platform;
36
- telemetryProps.redirectUris = typeof args.options.redirectUris !== 'undefined';
37
- telemetryProps.scopeAdminConsentDescription = typeof args.options.scopeAdminConsentDescription !== 'undefined';
38
- telemetryProps.scopeAdminConsentDisplayName = typeof args.options.scopeAdminConsentDisplayName !== 'undefined';
39
- telemetryProps.scopeName = args.options.scopeConsentBy;
40
- telemetryProps.scopeName = typeof args.options.scopeName !== 'undefined';
41
- telemetryProps.uri = typeof args.options.uri !== 'undefined';
42
- telemetryProps.withSecret = args.options.withSecret;
43
- telemetryProps.certificateFile = typeof args.options.certificateFile !== 'undefined';
44
- telemetryProps.certificateBase64Encoded = typeof args.options.certificateBase64Encoded !== 'undefined';
45
- telemetryProps.certificateDisplayName = typeof args.options.certificateDisplayName !== 'undefined';
46
- return telemetryProps;
47
- }
48
41
  commandAction(logger, args, cb) {
49
42
  this
50
43
  .resolveApis(args, logger)
@@ -58,6 +51,7 @@ class AadAppAddCommand extends GraphCommand_1.default {
58
51
  return Promise.resolve(appInfo);
59
52
  })
60
53
  .then(appInfo => this.updateAppFromManifest(args, appInfo))
54
+ .then(appInfo => this.grantAdminConsent(appInfo, args.options.grantAdminConsent, logger))
61
55
  .then(appInfo => this.configureUri(args, appInfo, logger))
62
56
  .then(appInfo => this.configureSecret(args, appInfo, logger))
63
57
  .then(appInfo => this.saveAppInfo(args, appInfo, logger))
@@ -128,6 +122,81 @@ class AadAppAddCommand extends GraphCommand_1.default {
128
122
  return request_1.default.post(createApplicationRequestOptions);
129
123
  });
130
124
  }
125
+ grantAdminConsent(appInfo, adminConsent, logger) {
126
+ if (!adminConsent || this.appPermissions.length === 0) {
127
+ return Promise.resolve(appInfo);
128
+ }
129
+ return this.createServicePrincipal(appInfo.appId)
130
+ .then((sp) => {
131
+ if (this.debug) {
132
+ logger.logToStderr("Service principal created, returned object id: " + sp.id);
133
+ }
134
+ const tasks = [];
135
+ this.appPermissions.forEach(permission => {
136
+ if (permission.scope.length > 0) {
137
+ tasks.push(this.grantOAuth2Permission(sp.id, permission.resourceId, permission.scope.join(' ')));
138
+ if (this.debug) {
139
+ logger.logToStderr(`Admin consent granted for following resource ${permission.resourceId}, with delegated permissions: ${permission.scope.join(',')}`);
140
+ }
141
+ }
142
+ permission.resourceAccess.filter(access => access.type === "Role").forEach((access) => {
143
+ tasks.push(this.addRoleToServicePrincipal(sp.id, permission.resourceId, access.id));
144
+ if (this.debug) {
145
+ logger.logToStderr(`Admin consent granted for following resource ${permission.resourceId}, with application permission: ${access.id}`);
146
+ }
147
+ });
148
+ });
149
+ return Promise.all(tasks)
150
+ .then(_ => {
151
+ return appInfo;
152
+ });
153
+ });
154
+ }
155
+ addRoleToServicePrincipal(objectId, resourceId, appRoleId) {
156
+ const requestOptions = {
157
+ url: `${this.resource}/v1.0/myorganization/servicePrincipals/${objectId}/appRoleAssignments`,
158
+ headers: {
159
+ 'Content-Type': 'application/json'
160
+ },
161
+ responseType: 'json',
162
+ data: {
163
+ appRoleId: appRoleId,
164
+ principalId: objectId,
165
+ resourceId: resourceId
166
+ }
167
+ };
168
+ return request_1.default.post(requestOptions);
169
+ }
170
+ grantOAuth2Permission(appId, resourceId, scopeName) {
171
+ const grantAdminConsentApplicationRequestOptions = {
172
+ url: `${this.resource}/v1.0/myorganization/oauth2PermissionGrants`,
173
+ headers: {
174
+ accept: 'application/json;odata.metadata=none'
175
+ },
176
+ responseType: 'json',
177
+ data: {
178
+ clientId: appId,
179
+ consentType: "AllPrincipals",
180
+ principalId: null,
181
+ resourceId: resourceId,
182
+ scope: scopeName
183
+ }
184
+ };
185
+ return request_1.default.post(grantAdminConsentApplicationRequestOptions);
186
+ }
187
+ createServicePrincipal(appId) {
188
+ const requestOptions = {
189
+ url: `${this.resource}/v1.0/myorganization/servicePrincipals`,
190
+ headers: {
191
+ 'content-type': 'application/json'
192
+ },
193
+ data: {
194
+ appId: appId
195
+ },
196
+ responseType: 'json'
197
+ };
198
+ return request_1.default.post(requestOptions);
199
+ }
131
200
  updateAppFromManifest(args, appInfo) {
132
201
  if (!args.options.manifest) {
133
202
  return Promise.resolve(appInfo);
@@ -143,6 +212,11 @@ class AadAppAddCommand extends GraphCommand_1.default {
143
212
  // separately
144
213
  const secrets = this.getSecretsFromManifest(v2Manifest);
145
214
  // Azure Portal returns v2 manifest whereas the Graph API expects a v1.6
215
+ if (args.options.apisApplication || args.options.apisDelegated) {
216
+ // take submitted delegated / application permissions as options
217
+ // otherwise, they will be skipped in the app update
218
+ v2Manifest.requiredResourceAccess = appInfo.requiredResourceAccess;
219
+ }
146
220
  const graphManifest = this.transformManifest(v2Manifest);
147
221
  const updateAppRequestOptions = {
148
222
  url: `${this.resource}/v1.0/myorganization/applications/${appInfo.id}`,
@@ -342,36 +416,69 @@ class AadAppAddCommand extends GraphCommand_1.default {
342
416
  .then(_ => appInfo);
343
417
  }
344
418
  resolveApis(args, logger) {
345
- if (!args.options.apisDelegated && !args.options.apisApplication) {
419
+ var _a;
420
+ if (!args.options.apisDelegated && !args.options.apisApplication
421
+ && (typeof ((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.requiredResourceAccess) === 'undefined' || this.manifest.requiredResourceAccess.length === 0)) {
346
422
  return Promise.resolve([]);
347
423
  }
348
424
  if (this.verbose) {
349
425
  logger.logToStderr('Resolving requested APIs...');
350
426
  }
351
427
  return utils_1.odata
352
- .getAllItems(`${this.resource}/v1.0/myorganization/servicePrincipals?$select=servicePrincipalNames,appId,oauth2PermissionScopes,appRoles`)
428
+ .getAllItems(`${this.resource}/v1.0/myorganization/servicePrincipals?$select=appId,appRoles,id,oauth2PermissionScopes,servicePrincipalNames`)
353
429
  .then(servicePrincipals => {
430
+ var _a;
431
+ let resolvedApis = [];
354
432
  try {
355
- const resolvedApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisDelegated, 'Scope', logger);
356
- if (this.debug) {
357
- logger.logToStderr(`Resolved delegated permissions: ${JSON.stringify(resolvedApis, null, 2)}`);
358
- }
359
- const resolvedApplicationApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisApplication, 'Role', logger);
360
- if (this.debug) {
361
- logger.logToStderr(`Resolved application permissions: ${JSON.stringify(resolvedApplicationApis, null, 2)}`);
362
- }
363
- // merge resolved application APIs onto resolved delegated APIs
364
- resolvedApplicationApis.forEach(resolvedRequiredResource => {
365
- const requiredResource = resolvedApis.find(api => api.resourceAppId === resolvedRequiredResource.resourceAppId);
366
- if (requiredResource) {
367
- requiredResource.resourceAccess.push(...resolvedRequiredResource.resourceAccess);
433
+ if (args.options.apisDelegated || args.options.apisApplication) {
434
+ resolvedApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisDelegated, 'Scope', logger);
435
+ if (this.verbose) {
436
+ logger.logToStderr(`Resolved delegated permissions: ${JSON.stringify(resolvedApis, null, 2)}`);
368
437
  }
369
- else {
370
- resolvedApis.push(resolvedRequiredResource);
438
+ const resolvedApplicationApis = this.getRequiredResourceAccessForApis(servicePrincipals, args.options.apisApplication, 'Role', logger);
439
+ if (this.verbose) {
440
+ logger.logToStderr(`Resolved application permissions: ${JSON.stringify(resolvedApplicationApis, null, 2)}`);
371
441
  }
372
- });
373
- if (this.debug) {
442
+ // merge resolved application APIs onto resolved delegated APIs
443
+ resolvedApplicationApis.forEach(resolvedRequiredResource => {
444
+ const requiredResource = resolvedApis.find(api => api.resourceAppId === resolvedRequiredResource.resourceAppId);
445
+ if (requiredResource) {
446
+ requiredResource.resourceAccess.push(...resolvedRequiredResource.resourceAccess);
447
+ }
448
+ else {
449
+ resolvedApis.push(resolvedRequiredResource);
450
+ }
451
+ });
452
+ }
453
+ if (typeof ((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.requiredResourceAccess) !== 'undefined' && this.manifest.requiredResourceAccess.length > 0) {
454
+ const manifestApis = this.manifest.requiredResourceAccess;
455
+ manifestApis.forEach(manifestApi => {
456
+ const requiredResource = resolvedApis.find(api => api.resourceAppId === manifestApi.resourceAppId);
457
+ if (requiredResource) {
458
+ // exclude if any duplicate required resources in both manifest and submitted options
459
+ requiredResource.resourceAccess.push(...manifestApi.resourceAccess.filter(manRes => !requiredResource.resourceAccess.some(res => res.id === manRes.id)));
460
+ }
461
+ else {
462
+ resolvedApis.push(manifestApi);
463
+ }
464
+ const app = servicePrincipals.find(servicePrincipals => servicePrincipals.appId === manifestApi.resourceAppId);
465
+ if (app) {
466
+ manifestApi.resourceAccess.forEach((res => {
467
+ var _a;
468
+ const resourceAccessPermission = {
469
+ id: res.id,
470
+ type: res.type
471
+ };
472
+ const oAuthValue = (_a = app.oauth2PermissionScopes.find(scp => scp.id === res.id)) === null || _a === void 0 ? void 0 : _a.value;
473
+ this.updateAppPermissions(app.id, resourceAccessPermission, oAuthValue);
474
+ }));
475
+ }
476
+ });
477
+ }
478
+ if (this.verbose) {
374
479
  logger.logToStderr(`Merged delegated and application permissions: ${JSON.stringify(resolvedApis, null, 2)}`);
480
+ logger.logToStderr(`App role assignments: ${JSON.stringify(this.appPermissions.flatMap(permission => permission.resourceAccess.filter(access => access.type === "Role")), null, 2)}`);
481
+ logger.logToStderr(`OAuth2 permissions: ${JSON.stringify(this.appPermissions.flatMap(permission => permission.scope), null, 2)}`);
375
482
  }
376
483
  return Promise.resolve(resolvedApis);
377
484
  }
@@ -413,13 +520,34 @@ class AadAppAddCommand extends GraphCommand_1.default {
413
520
  };
414
521
  resolvedApis.push(resolvedApi);
415
522
  }
416
- resolvedApi.resourceAccess.push({
523
+ const resourceAccessPermission = {
417
524
  id: permission.id,
418
525
  type: scopeType
419
- });
526
+ };
527
+ resolvedApi.resourceAccess.push(resourceAccessPermission);
528
+ this.updateAppPermissions(servicePrincipal.id, resourceAccessPermission, permission.value);
420
529
  });
421
530
  return resolvedApis;
422
531
  }
532
+ updateAppPermissions(spId, resourceAccessPermission, oAuth2PermissionValue) {
533
+ // During API resolution, we store globally both app role assignments and oauth2permissions
534
+ // So that we'll be able to parse them during the admin consent process
535
+ let existingPermission = this.appPermissions.find(oauth => oauth.resourceId === spId);
536
+ if (!existingPermission) {
537
+ existingPermission = {
538
+ resourceId: spId,
539
+ resourceAccess: [],
540
+ scope: []
541
+ };
542
+ this.appPermissions.push(existingPermission);
543
+ }
544
+ if (resourceAccessPermission.type === 'Scope' && oAuth2PermissionValue && !existingPermission.scope.find(scp => scp === oAuth2PermissionValue)) {
545
+ existingPermission.scope.push(oAuth2PermissionValue);
546
+ }
547
+ if (!existingPermission.resourceAccess.find(res => res.id === resourceAccessPermission.id)) {
548
+ existingPermission.resourceAccess.push(resourceAccessPermission);
549
+ }
550
+ }
423
551
  configureSecret(args, appInfo, logger) {
424
552
  if (!args.options.withSecret) {
425
553
  return Promise.resolve(appInfo);
@@ -514,69 +642,71 @@ class AadAppAddCommand extends GraphCommand_1.default {
514
642
  }
515
643
  return Promise.resolve(appInfo);
516
644
  }
517
- options() {
518
- const options = [
519
- {
520
- option: '-n, --name [name]'
521
- },
522
- {
523
- option: '--multitenant'
524
- },
525
- {
526
- option: '-r, --redirectUris [redirectUris]'
527
- },
528
- {
529
- option: '-p, --platform [platform]',
530
- autocomplete: AadAppAddCommand.aadApplicationPlatform
531
- },
532
- {
533
- option: '--implicitFlow'
534
- },
535
- {
536
- option: '-s, --withSecret'
537
- },
538
- {
539
- option: '--apisDelegated [apisDelegated]'
540
- },
541
- {
542
- option: '--apisApplication [apisApplication]'
543
- },
544
- {
545
- option: '-u, --uri [uri]'
546
- },
547
- {
548
- option: '--scopeName [scopeName]'
549
- },
550
- {
551
- option: '--scopeConsentBy [scopeConsentBy]',
552
- autocomplete: AadAppAddCommand.aadAppScopeConsentBy
553
- },
554
- {
555
- option: '--scopeAdminConsentDisplayName [scopeAdminConsentDisplayName]'
556
- },
557
- {
558
- option: '--scopeAdminConsentDescription [scopeAdminConsentDescription]'
559
- },
560
- {
561
- option: '--certificateFile [certificateFile]'
562
- },
563
- {
564
- option: '--certificateBase64Encoded [certificateBase64Encoded]'
565
- },
566
- {
567
- option: '--certificateDisplayName [certificateDisplayName]'
568
- },
569
- {
570
- option: '--manifest [manifest]'
571
- },
572
- {
573
- option: '--save'
574
- }
575
- ];
576
- const parentOptions = super.options();
577
- return options.concat(parentOptions);
578
- }
579
- validate(args) {
645
+ }
646
+ _AadAppAddCommand_instances = new WeakSet(), _AadAppAddCommand_initTelemetry = function _AadAppAddCommand_initTelemetry() {
647
+ this.telemetry.push((args) => {
648
+ Object.assign(this.telemetryProperties, {
649
+ apis: typeof args.options.apisDelegated !== 'undefined',
650
+ implicitFlow: args.options.implicitFlow,
651
+ multitenant: args.options.multitenant,
652
+ platform: args.options.platform,
653
+ redirectUris: typeof args.options.redirectUris !== 'undefined',
654
+ scopeAdminConsentDescription: typeof args.options.scopeAdminConsentDescription !== 'undefined',
655
+ scopeAdminConsentDisplayName: typeof args.options.scopeAdminConsentDisplayName !== 'undefined',
656
+ scopeConsentBy: args.options.scopeConsentBy,
657
+ scopeName: typeof args.options.scopeName !== 'undefined',
658
+ uri: typeof args.options.uri !== 'undefined',
659
+ withSecret: args.options.withSecret,
660
+ certificateFile: typeof args.options.certificateFile !== 'undefined',
661
+ certificateBase64Encoded: typeof args.options.certificateBase64Encoded !== 'undefined',
662
+ certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined',
663
+ grantAdminConsent: typeof args.options.grantAdminConsent !== 'undefined'
664
+ });
665
+ });
666
+ }, _AadAppAddCommand_initOptions = function _AadAppAddCommand_initOptions() {
667
+ this.options.unshift({
668
+ option: '-n, --name [name]'
669
+ }, {
670
+ option: '--multitenant'
671
+ }, {
672
+ option: '-r, --redirectUris [redirectUris]'
673
+ }, {
674
+ option: '-p, --platform [platform]',
675
+ autocomplete: AadAppAddCommand.aadApplicationPlatform
676
+ }, {
677
+ option: '--implicitFlow'
678
+ }, {
679
+ option: '-s, --withSecret'
680
+ }, {
681
+ option: '--apisDelegated [apisDelegated]'
682
+ }, {
683
+ option: '--apisApplication [apisApplication]'
684
+ }, {
685
+ option: '-u, --uri [uri]'
686
+ }, {
687
+ option: '--scopeName [scopeName]'
688
+ }, {
689
+ option: '--scopeConsentBy [scopeConsentBy]',
690
+ autocomplete: AadAppAddCommand.aadAppScopeConsentBy
691
+ }, {
692
+ option: '--scopeAdminConsentDisplayName [scopeAdminConsentDisplayName]'
693
+ }, {
694
+ option: '--scopeAdminConsentDescription [scopeAdminConsentDescription]'
695
+ }, {
696
+ option: '--certificateFile [certificateFile]'
697
+ }, {
698
+ option: '--certificateBase64Encoded [certificateBase64Encoded]'
699
+ }, {
700
+ option: '--certificateDisplayName [certificateDisplayName]'
701
+ }, {
702
+ option: '--manifest [manifest]'
703
+ }, {
704
+ option: '--save'
705
+ }, {
706
+ option: '--grantAdminConsent'
707
+ });
708
+ }, _AadAppAddCommand_initValidators = function _AadAppAddCommand_initValidators() {
709
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
580
710
  if (!args.options.manifest && !args.options.name) {
581
711
  return 'Specify either the name of the app to create or the manifest';
582
712
  }
@@ -623,8 +753,8 @@ class AadAppAddCommand extends GraphCommand_1.default {
623
753
  }
624
754
  }
625
755
  return true;
626
- }
627
- }
756
+ }));
757
+ };
628
758
  AadAppAddCommand.aadApplicationPlatform = ['spa', 'web', 'publicClient'];
629
759
  AadAppAddCommand.aadAppScopeConsentBy = ['admins', 'adminsAndUsers'];
630
760
  module.exports = new AadAppAddCommand();
@@ -1,4 +1,19 @@
1
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 _AadAppGetCommand_instances, _AadAppGetCommand_initTelemetry, _AadAppGetCommand_initOptions, _AadAppGetCommand_initValidators;
2
17
  Object.defineProperty(exports, "__esModule", { value: true });
3
18
  const fs = require("fs");
4
19
  const request_1 = require("../../../../request");
@@ -6,19 +21,19 @@ const utils_1 = require("../../../../utils");
6
21
  const GraphCommand_1 = require("../../../base/GraphCommand");
7
22
  const commands_1 = require("../../commands");
8
23
  class AadAppGetCommand extends GraphCommand_1.default {
24
+ constructor() {
25
+ super();
26
+ _AadAppGetCommand_instances.add(this);
27
+ __classPrivateFieldGet(this, _AadAppGetCommand_instances, "m", _AadAppGetCommand_initTelemetry).call(this);
28
+ __classPrivateFieldGet(this, _AadAppGetCommand_instances, "m", _AadAppGetCommand_initOptions).call(this);
29
+ __classPrivateFieldGet(this, _AadAppGetCommand_instances, "m", _AadAppGetCommand_initValidators).call(this);
30
+ }
9
31
  get name() {
10
32
  return commands_1.default.APP_GET;
11
33
  }
12
34
  get description() {
13
35
  return 'Gets an Azure AD app registration';
14
36
  }
15
- getTelemetryProperties(args) {
16
- const telemetryProps = super.getTelemetryProperties(args);
17
- telemetryProps.appId = typeof args.options.appId !== 'undefined';
18
- telemetryProps.objectId = typeof args.options.objectId !== 'undefined';
19
- telemetryProps.name = typeof args.options.name !== 'undefined';
20
- return telemetryProps;
21
- }
22
37
  commandAction(logger, args, cb) {
23
38
  this
24
39
  .getAppObjectId(args)
@@ -108,17 +123,19 @@ class AadAppGetCommand extends GraphCommand_1.default {
108
123
  }
109
124
  return Promise.resolve(appInfo);
110
125
  }
111
- options() {
112
- const options = [
113
- { option: '--appId [appId]' },
114
- { option: '--objectId [objectId]' },
115
- { option: '--name [name]' },
116
- { option: '--save' }
117
- ];
118
- const parentOptions = super.options();
119
- return options.concat(parentOptions);
120
- }
121
- validate(args) {
126
+ }
127
+ _AadAppGetCommand_instances = new WeakSet(), _AadAppGetCommand_initTelemetry = function _AadAppGetCommand_initTelemetry() {
128
+ this.telemetry.push((args) => {
129
+ Object.assign(this.telemetryProperties, {
130
+ appId: typeof args.options.appId !== 'undefined',
131
+ objectId: typeof args.options.objectId !== 'undefined',
132
+ name: typeof args.options.name !== 'undefined'
133
+ });
134
+ });
135
+ }, _AadAppGetCommand_initOptions = function _AadAppGetCommand_initOptions() {
136
+ this.options.unshift({ option: '--appId [appId]' }, { option: '--objectId [objectId]' }, { option: '--name [name]' }, { option: '--save' });
137
+ }, _AadAppGetCommand_initValidators = function _AadAppGetCommand_initValidators() {
138
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
122
139
  if (!args.options.appId &&
123
140
  !args.options.objectId &&
124
141
  !args.options.name) {
@@ -136,7 +153,7 @@ class AadAppGetCommand extends GraphCommand_1.default {
136
153
  return `${args.options.objectId} is not a valid GUID`;
137
154
  }
138
155
  return true;
139
- }
140
- }
156
+ }));
157
+ };
141
158
  module.exports = new AadAppGetCommand();
142
159
  //# sourceMappingURL=app-get.js.map
@@ -1,4 +1,19 @@
1
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 _AadAppRemoveCommand_instances, _AadAppRemoveCommand_initTelemetry, _AadAppRemoveCommand_initOptions, _AadAppRemoveCommand_initValidators;
2
17
  Object.defineProperty(exports, "__esModule", { value: true });
3
18
  const cli_1 = require("../../../../cli");
4
19
  const request_1 = require("../../../../request");
@@ -6,6 +21,13 @@ const utils_1 = require("../../../../utils");
6
21
  const GraphCommand_1 = require("../../../base/GraphCommand");
7
22
  const commands_1 = require("../../commands");
8
23
  class AadAppRemoveCommand extends GraphCommand_1.default {
24
+ constructor() {
25
+ super();
26
+ _AadAppRemoveCommand_instances.add(this);
27
+ __classPrivateFieldGet(this, _AadAppRemoveCommand_instances, "m", _AadAppRemoveCommand_initTelemetry).call(this);
28
+ __classPrivateFieldGet(this, _AadAppRemoveCommand_instances, "m", _AadAppRemoveCommand_initOptions).call(this);
29
+ __classPrivateFieldGet(this, _AadAppRemoveCommand_instances, "m", _AadAppRemoveCommand_initValidators).call(this);
30
+ }
9
31
  get name() {
10
32
  return commands_1.default.APP_REMOVE;
11
33
  }
@@ -15,14 +37,6 @@ class AadAppRemoveCommand extends GraphCommand_1.default {
15
37
  get description() {
16
38
  return 'Removes an Azure AD app registration';
17
39
  }
18
- getTelemetryProperties(args) {
19
- const telemetryProps = super.getTelemetryProperties(args);
20
- telemetryProps.appId = typeof args.options.appId !== 'undefined';
21
- telemetryProps.objectId = typeof args.options.objectId !== 'undefined';
22
- telemetryProps.name = typeof args.options.name !== 'undefined';
23
- telemetryProps.confirm = (!(!args.options.confirm)).toString();
24
- return telemetryProps;
25
- }
26
40
  commandAction(logger, args, cb) {
27
41
  this.showDeprecationWarning(logger, commands_1.default.APP_DELETE, commands_1.default.APP_REMOVE);
28
42
  const deleteApp = () => {
@@ -93,17 +107,20 @@ class AadAppRemoveCommand extends GraphCommand_1.default {
93
107
  return Promise.reject(`Multiple Azure AD application registration with name ${name} found. Please choose one of the object IDs: ${res.value.map(a => a.id).join(', ')}`);
94
108
  });
95
109
  }
96
- options() {
97
- const options = [
98
- { option: '--appId [appId]' },
99
- { option: '--objectId [objectId]' },
100
- { option: '--name [name]' },
101
- { option: '--confirm' }
102
- ];
103
- const parentOptions = super.options();
104
- return options.concat(parentOptions);
105
- }
106
- validate(args) {
110
+ }
111
+ _AadAppRemoveCommand_instances = new WeakSet(), _AadAppRemoveCommand_initTelemetry = function _AadAppRemoveCommand_initTelemetry() {
112
+ this.telemetry.push((args) => {
113
+ Object.assign(this.telemetryProperties, {
114
+ appId: typeof args.options.appId !== 'undefined',
115
+ objectId: typeof args.options.objectId !== 'undefined',
116
+ name: typeof args.options.name !== 'undefined',
117
+ confirm: (!(!args.options.confirm)).toString()
118
+ });
119
+ });
120
+ }, _AadAppRemoveCommand_initOptions = function _AadAppRemoveCommand_initOptions() {
121
+ this.options.unshift({ option: '--appId [appId]' }, { option: '--objectId [objectId]' }, { option: '--name [name]' }, { option: '--confirm' });
122
+ }, _AadAppRemoveCommand_initValidators = function _AadAppRemoveCommand_initValidators() {
123
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
107
124
  if (!args.options.appId &&
108
125
  !args.options.objectId &&
109
126
  !args.options.name) {
@@ -121,7 +138,7 @@ class AadAppRemoveCommand extends GraphCommand_1.default {
121
138
  return `${args.options.objectId} is not a valid GUID`;
122
139
  }
123
140
  return true;
124
- }
125
- }
141
+ }));
142
+ };
126
143
  module.exports = new AadAppRemoveCommand();
127
144
  //# sourceMappingURL=app-remove.js.map