@pnp/cli-microsoft365 10.5.0-beta.d99742c → 10.6.0-beta.195c8d5

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 (133) hide show
  1. package/.eslintrc.cjs +3 -1
  2. package/allCommands.json +1 -1
  3. package/allCommandsFull.json +1 -1
  4. package/dist/Auth.js +60 -3
  5. package/dist/Command.js +14 -26
  6. package/dist/auth/MsalNetworkClient.js +32 -0
  7. package/dist/config.js +2 -0
  8. package/dist/m365/adaptivecard/commands/adaptivecard-send.js +2 -1
  9. package/dist/m365/app/commands/app-get.js +3 -13
  10. package/dist/m365/app/commands/permission/permission-list.js +4 -14
  11. package/dist/m365/base/SpoCommand.js +2 -1
  12. package/dist/m365/booking/commands/business/business-get.js +0 -3
  13. package/dist/m365/commands/login.js +3 -0
  14. package/dist/m365/commands/request.js +3 -12
  15. package/dist/m365/commands/setup.js +2 -0
  16. package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +10 -5
  17. package/dist/m365/entra/commands/app/app-add.js +5 -0
  18. package/dist/m365/entra/commands/app/app-get.js +27 -21
  19. package/dist/m365/entra/commands/app/app-permission-list.js +28 -22
  20. package/dist/m365/entra/commands/app/app-remove.js +22 -19
  21. package/dist/m365/entra/commands/app/app-role-add.js +22 -19
  22. package/dist/m365/entra/commands/app/app-role-list.js +22 -19
  23. package/dist/m365/entra/commands/app/app-role-remove.js +39 -36
  24. package/dist/m365/entra/commands/app/app-set.js +45 -19
  25. package/dist/m365/entra/commands/group/group-add.js +1 -0
  26. package/dist/m365/entra/commands/group/group-set.js +12 -6
  27. package/dist/m365/entra/commands/policy/policy-list.js +46 -3
  28. package/dist/m365/entra/commands/user/user-add.js +1 -0
  29. package/dist/m365/entra/commands/user/user-guest-add.js +0 -3
  30. package/dist/m365/entra/commands/user/user-list.js +2 -1
  31. package/dist/m365/external/commands/item/item-add.js +2 -1
  32. package/dist/m365/flow/commands/environment/environment-get.js +0 -3
  33. package/dist/m365/flow/commands/flow-get.js +0 -3
  34. package/dist/m365/flow/commands/flow-list.js +1 -1
  35. package/dist/m365/flow/commands/run/run-get.js +0 -3
  36. package/dist/m365/graph/commands/openextension/openextension-add.js +73 -0
  37. package/dist/m365/graph/commands/openextension/openextension-get.js +57 -0
  38. package/dist/m365/graph/commands/openextension/openextension-list.js +62 -0
  39. package/dist/m365/graph/commands/openextension/openextension-remove.js +68 -0
  40. package/dist/m365/graph/commands.js +4 -0
  41. package/dist/m365/pa/commands/app/app-get.js +0 -3
  42. package/dist/m365/pa/commands/environment/environment-get.js +0 -3
  43. package/dist/m365/planner/commands/bucket/bucket-add.js +0 -3
  44. package/dist/m365/planner/commands/plan/plan-add.js +0 -3
  45. package/dist/m365/planner/commands/plan/plan-get.js +0 -3
  46. package/dist/m365/planner/commands/plan/plan-set.js +0 -3
  47. package/dist/m365/planner/commands/task/task-checklistitem-add.js +0 -3
  48. package/dist/m365/pp/commands/aibuildermodel/aibuildermodel-get.js +0 -3
  49. package/dist/m365/pp/commands/card/card-clone.js +12 -16
  50. package/dist/m365/pp/commands/card/card-get.js +13 -22
  51. package/dist/m365/pp/commands/card/card-remove.js +13 -16
  52. package/dist/m365/pp/commands/copilot/copilot-get.js +0 -3
  53. package/dist/m365/pp/commands/dataverse/dataverse-table-get.js +0 -3
  54. package/dist/m365/pp/commands/environment/environment-get.js +0 -3
  55. package/dist/m365/pp/commands/solution/solution-get.js +5 -14
  56. package/dist/m365/pp/commands/solution/solution-publish.js +6 -16
  57. package/dist/m365/pp/commands/solution/solution-publisher-get.js +0 -3
  58. package/dist/m365/pp/commands/solution/solution-remove.js +4 -13
  59. package/dist/m365/pp/commands/website/website-get.js +0 -3
  60. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.21.0.js +25 -0
  61. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  62. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002029_DEVDEP_microsoft_rush_stack_compiler_5_3.js +13 -0
  63. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.21.0.js +63 -0
  64. package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
  65. package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
  66. package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +12 -47
  67. package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +13 -31
  68. package/dist/m365/spo/commands/group/group-member-add.js +0 -3
  69. package/dist/m365/spo/commands/homesite/homesite-add.js +66 -0
  70. package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +12 -43
  71. package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +8 -27
  72. package/dist/m365/spo/commands/page/page-copy.js +0 -3
  73. package/dist/m365/spo/commands/page/page-get.js +0 -3
  74. package/dist/m365/spo/commands/sitedesign/sitedesign-run-status-get.js +0 -3
  75. package/dist/m365/spo/commands/web/web-roleassignment-add.js +22 -47
  76. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +17 -32
  77. package/dist/m365/spo/commands.js +1 -0
  78. package/dist/m365/tenant/commands/people/people-profilecardproperty-add.js +4 -3
  79. package/dist/m365/tenant/commands/people/people-profilecardproperty-set.js +4 -3
  80. package/dist/m365/tenant/commands/serviceannouncement/serviceannouncement-health-get.js +0 -3
  81. package/dist/m365/todo/commands/list/list-get.js +0 -3
  82. package/dist/m365/todo/commands/list/list-remove.js +1 -1
  83. package/dist/m365/todo/commands/task/task-get.js +0 -3
  84. package/dist/m365/util/commands/accesstoken/accesstoken-get.js +13 -3
  85. package/dist/m365/viva/commands/engage/engage-message-add.js +0 -3
  86. package/dist/m365/viva/commands/engage/engage-message-get.js +0 -3
  87. package/dist/m365/viva/commands/engage/engage-user-get.js +0 -3
  88. package/dist/utils/accessToken.js +8 -0
  89. package/dist/utils/entraApp.js +3 -1
  90. package/dist/utils/optionsUtils.js +28 -0
  91. package/dist/utils/powerPlatform.js +51 -1
  92. package/dist/utils/prompt.js +9 -2
  93. package/dist/utils/spo.js +32 -3
  94. package/docs/docs/cmd/booking/business/business-get.mdx +13 -0
  95. package/docs/docs/cmd/entra/policy/policy-list.mdx +1 -1
  96. package/docs/docs/cmd/entra/user/user-guest-add.mdx +11 -0
  97. package/docs/docs/cmd/flow/environment/environment-get.mdx +2 -0
  98. package/docs/docs/cmd/flow/flow-get.mdx +2 -0
  99. package/docs/docs/cmd/flow/run/run-get.mdx +17 -13
  100. package/docs/docs/cmd/graph/directoryextension/directoryextension-get.mdx +2 -3
  101. package/docs/docs/cmd/graph/openextension/openextension-add.mdx +120 -0
  102. package/docs/docs/cmd/graph/openextension/openextension-get.mdx +111 -0
  103. package/docs/docs/cmd/graph/openextension/openextension-list.mdx +129 -0
  104. package/docs/docs/cmd/graph/openextension/openextension-remove.mdx +59 -0
  105. package/docs/docs/cmd/login.mdx +9 -1
  106. package/docs/docs/cmd/pa/app/app-get.mdx +8 -2
  107. package/docs/docs/cmd/pa/environment/environment-get.mdx +5 -3
  108. package/docs/docs/cmd/planner/plan/plan-add.mdx +2 -0
  109. package/docs/docs/cmd/planner/plan/plan-get.mdx +8 -4
  110. package/docs/docs/cmd/planner/plan/plan-set.mdx +2 -0
  111. package/docs/docs/cmd/planner/task/task-checklistitem-add.mdx +6 -3
  112. package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-get.mdx +12 -3
  113. package/docs/docs/cmd/pp/card/card-get.mdx +36 -5
  114. package/docs/docs/cmd/pp/copilot/copilot-get.mdx +41 -5
  115. package/docs/docs/cmd/pp/dataverse/dataverse-table-get.mdx +19 -4
  116. package/docs/docs/cmd/pp/environment/environment-get.mdx +5 -2
  117. package/docs/docs/cmd/pp/solution/solution-get.mdx +12 -7
  118. package/docs/docs/cmd/pp/solution/solution-publisher-get.mdx +12 -7
  119. package/docs/docs/cmd/pp/website/website-get.mdx +22 -4
  120. package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -4
  121. package/docs/docs/cmd/spo/group/group-member-add.mdx +12 -3
  122. package/docs/docs/cmd/spo/homesite/homesite-add.mdx +124 -0
  123. package/docs/docs/cmd/spo/page/page-copy.mdx +30 -4
  124. package/docs/docs/cmd/spo/page/page-get.mdx +44 -5
  125. package/docs/docs/cmd/spo/sitedesign/sitedesign-run-status-get.mdx +7 -0
  126. package/docs/docs/cmd/todo/list/list-get.mdx +7 -4
  127. package/docs/docs/cmd/todo/task/task-get.mdx +7 -2
  128. package/docs/docs/cmd/util/accesstoken/accesstoken-get.mdx +72 -0
  129. package/docs/docs/cmd/viva/engage/engage-message-add.mdx +37 -12
  130. package/docs/docs/cmd/viva/engage/engage-message-get.mdx +27 -13
  131. package/docs/docs/cmd/viva/engage/engage-user-get.mdx +50 -8
  132. package/npm-shrinkwrap.json +517 -481
  133. package/package.json +14 -14
@@ -6,6 +6,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
6
6
  var _EntraAppRemoveCommand_instances, _EntraAppRemoveCommand_initTelemetry, _EntraAppRemoveCommand_initOptions, _EntraAppRemoveCommand_initValidators, _EntraAppRemoveCommand_initOptionSets;
7
7
  import { cli } from '../../../../cli/cli.js';
8
8
  import request from '../../../../request.js';
9
+ import { entraApp } from '../../../../utils/entraApp.js';
9
10
  import { formatting } from '../../../../utils/formatting.js';
10
11
  import { validation } from '../../../../utils/validation.js';
11
12
  import GraphCommand from '../../../base/GraphCommand.js';
@@ -63,27 +64,29 @@ class EntraAppRemoveCommand extends GraphCommand {
63
64
  if (this.verbose) {
64
65
  await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : name}...`);
65
66
  }
66
- const filter = appId ?
67
- `appId eq '${formatting.encodeQueryParameter(appId)}'` :
68
- `displayName eq '${formatting.encodeQueryParameter(name)}'`;
69
- const requestOptions = {
70
- url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
71
- headers: {
72
- accept: 'application/json;odata.metadata=none'
73
- },
74
- responseType: 'json'
75
- };
76
- const res = await request.get(requestOptions);
77
- if (res.value.length === 1) {
78
- return res.value[0].id;
67
+ if (appId) {
68
+ const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
69
+ return app.id;
79
70
  }
80
- if (res.value.length === 0) {
81
- const applicationIdentifier = appId ? `ID ${appId}` : `name ${name}`;
82
- throw `No Microsoft Entra application registration with ${applicationIdentifier} found`;
71
+ else {
72
+ const requestOptions = {
73
+ url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'&$select=id`,
74
+ headers: {
75
+ accept: 'application/json;odata.metadata=none'
76
+ },
77
+ responseType: 'json'
78
+ };
79
+ const res = await request.get(requestOptions);
80
+ if (res.value.length === 1) {
81
+ return res.value[0].id;
82
+ }
83
+ if (res.value.length === 0) {
84
+ throw `No Microsoft Entra application registration with name ${name} found`;
85
+ }
86
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
87
+ const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
88
+ return result.id;
83
89
  }
84
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
85
- const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
86
- return result.id;
87
90
  }
88
91
  }
89
92
  _EntraAppRemoveCommand_instances = new WeakSet(), _EntraAppRemoveCommand_initTelemetry = function _EntraAppRemoveCommand_initTelemetry() {
@@ -10,6 +10,7 @@ import { formatting } from '../../../../utils/formatting.js';
10
10
  import GraphCommand from '../../../base/GraphCommand.js';
11
11
  import commands from '../../commands.js';
12
12
  import { cli } from '../../../../cli/cli.js';
13
+ import { entraApp } from '../../../../utils/entraApp.js';
13
14
  class EntraAppRoleAddCommand extends GraphCommand {
14
15
  get name() {
15
16
  return commands.APP_ROLE_ADD;
@@ -87,27 +88,29 @@ class EntraAppRoleAddCommand extends GraphCommand {
87
88
  if (this.verbose) {
88
89
  await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
89
90
  }
90
- const filter = appId ?
91
- `appId eq '${formatting.encodeQueryParameter(appId)}'` :
92
- `displayName eq '${formatting.encodeQueryParameter(appName)}'`;
93
- const requestOptions = {
94
- url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
95
- headers: {
96
- accept: 'application/json;odata.metadata=none'
97
- },
98
- responseType: 'json'
99
- };
100
- const res = await request.get(requestOptions);
101
- if (res.value.length === 1) {
102
- return res.value[0].id;
91
+ if (appId) {
92
+ const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
93
+ return app.id;
103
94
  }
104
- if (res.value.length === 0) {
105
- const applicationIdentifier = appId ? `ID ${appId}` : `name ${appName}`;
106
- throw `No Microsoft Entra application registration with ${applicationIdentifier} found`;
95
+ else {
96
+ const requestOptions = {
97
+ url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
98
+ headers: {
99
+ accept: 'application/json;odata.metadata=none'
100
+ },
101
+ responseType: 'json'
102
+ };
103
+ const res = await request.get(requestOptions);
104
+ if (res.value.length === 1) {
105
+ return res.value[0].id;
106
+ }
107
+ if (res.value.length === 0) {
108
+ throw `No Microsoft Entra application registration with name ${appName} found`;
109
+ }
110
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
111
+ const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
112
+ return result.id;
107
113
  }
108
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
109
- const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
110
- return result.id;
111
114
  }
112
115
  }
113
116
  _a = EntraAppRoleAddCommand, _EntraAppRoleAddCommand_instances = new WeakSet(), _EntraAppRoleAddCommand_initTelemetry = function _EntraAppRoleAddCommand_initTelemetry() {
@@ -10,6 +10,7 @@ import { odata } from '../../../../utils/odata.js';
10
10
  import GraphCommand from '../../../base/GraphCommand.js';
11
11
  import commands from '../../commands.js';
12
12
  import { cli } from '../../../../cli/cli.js';
13
+ import { entraApp } from '../../../../utils/entraApp.js';
13
14
  class EntraAppRoleListCommand extends GraphCommand {
14
15
  get name() {
15
16
  return commands.APP_ROLE_LIST;
@@ -45,27 +46,29 @@ class EntraAppRoleListCommand extends GraphCommand {
45
46
  if (this.verbose) {
46
47
  await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
47
48
  }
48
- const filter = appId ?
49
- `appId eq '${formatting.encodeQueryParameter(appId)}'` :
50
- `displayName eq '${formatting.encodeQueryParameter(appName)}'`;
51
- const requestOptions = {
52
- url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
53
- headers: {
54
- accept: 'application/json;odata.metadata=none'
55
- },
56
- responseType: 'json'
57
- };
58
- const res = await request.get(requestOptions);
59
- if (res.value.length === 1) {
60
- return res.value[0].id;
49
+ if (appId) {
50
+ const app = await entraApp.getAppRegistrationByAppId(appId, ["id"]);
51
+ return app.id;
61
52
  }
62
- if (res.value.length === 0) {
63
- const applicationIdentifier = appId ? `ID ${appId}` : `name ${appName}`;
64
- throw `No Microsoft Entra application registration with ${applicationIdentifier} found`;
53
+ else {
54
+ const requestOptions = {
55
+ url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
56
+ headers: {
57
+ accept: 'application/json;odata.metadata=none'
58
+ },
59
+ responseType: 'json'
60
+ };
61
+ const res = await request.get(requestOptions);
62
+ if (res.value.length === 1) {
63
+ return res.value[0].id;
64
+ }
65
+ if (res.value.length === 0) {
66
+ throw `No Microsoft Entra application registration with name ${appName} found`;
67
+ }
68
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
69
+ const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
70
+ return result.id;
65
71
  }
66
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
67
- const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
68
- return result.id;
69
72
  }
70
73
  }
71
74
  _EntraAppRoleListCommand_instances = new WeakSet(), _EntraAppRoleListCommand_initTelemetry = function _EntraAppRoleListCommand_initTelemetry() {
@@ -10,6 +10,7 @@ import { formatting } from "../../../../utils/formatting.js";
10
10
  import { validation } from '../../../../utils/validation.js';
11
11
  import GraphCommand from '../../../base/GraphCommand.js';
12
12
  import commands from '../../commands.js';
13
+ import { entraApp } from "../../../../utils/entraApp.js";
13
14
  class EntraAppRoleRemoveCommand extends GraphCommand {
14
15
  get name() {
15
16
  return commands.APP_ROLE_REMOVE;
@@ -46,15 +47,15 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
46
47
  }
47
48
  async processAppRoleDelete(logger, args) {
48
49
  const appObjectId = await this.getAppObjectId(args, logger);
49
- const aadApp = await this.getAadApp(appObjectId, logger);
50
+ const app = await this.getEntraApp(appObjectId, logger);
50
51
  const appRoleDeleteIdentifierNameValue = args.options.name ? `name '${args.options.name}'` : (args.options.claim ? `claim '${args.options.claim}'` : `id '${args.options.id}'`);
51
52
  if (this.verbose) {
52
- await logger.logToStderr(`Deleting role with ${appRoleDeleteIdentifierNameValue} from Microsoft Entra app ${aadApp.id}...`);
53
+ await logger.logToStderr(`Deleting role with ${appRoleDeleteIdentifierNameValue} from Microsoft Entra app ${app.id}...`);
53
54
  }
54
55
  // Find the role search criteria provided by the user.
55
56
  const appRoleDeleteIdentifierProperty = args.options.name ? `displayName` : (args.options.claim ? `value` : `id`);
56
57
  const appRoleDeleteIdentifierValue = args.options.name ? args.options.name : (args.options.claim ? args.options.claim : args.options.id);
57
- const appRoleToDelete = aadApp.appRoles.filter((role) => role[appRoleDeleteIdentifierProperty] === appRoleDeleteIdentifierValue);
58
+ const appRoleToDelete = app.appRoles.filter((role) => role[appRoleDeleteIdentifierProperty] === appRoleDeleteIdentifierValue);
58
59
  if (args.options.name &&
59
60
  appRoleToDelete !== undefined &&
60
61
  appRoleToDelete.length > 1) {
@@ -66,38 +67,38 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
66
67
  }
67
68
  const roleToDelete = appRoleToDelete[0];
68
69
  if (roleToDelete.isEnabled) {
69
- await this.disableAppRole(logger, aadApp, roleToDelete.id);
70
- await this.deleteAppRole(logger, aadApp, roleToDelete.id);
70
+ await this.disableAppRole(logger, app, roleToDelete.id);
71
+ await this.deleteAppRole(logger, app, roleToDelete.id);
71
72
  }
72
73
  else {
73
- await this.deleteAppRole(logger, aadApp, roleToDelete.id);
74
+ await this.deleteAppRole(logger, app, roleToDelete.id);
74
75
  }
75
76
  }
76
- async disableAppRole(logger, aadApp, roleId) {
77
- const roleIndex = aadApp.appRoles.findIndex((role) => role.id === roleId);
77
+ async disableAppRole(logger, app, roleId) {
78
+ const roleIndex = app.appRoles.findIndex((role) => role.id === roleId);
78
79
  if (this.verbose) {
79
80
  await logger.logToStderr(`Disabling the app role`);
80
81
  }
81
- aadApp.appRoles[roleIndex].isEnabled = false;
82
+ app.appRoles[roleIndex].isEnabled = false;
82
83
  const requestOptions = {
83
- url: `${this.resource}/v1.0/myorganization/applications/${aadApp.id}`,
84
+ url: `${this.resource}/v1.0/myorganization/applications/${app.id}`,
84
85
  headers: {
85
86
  accept: 'application/json;odata.metadata=none'
86
87
  },
87
88
  responseType: 'json',
88
89
  data: {
89
- appRoles: aadApp.appRoles
90
+ appRoles: app.appRoles
90
91
  }
91
92
  };
92
93
  return request.patch(requestOptions);
93
94
  }
94
- async deleteAppRole(logger, aadApp, roleId) {
95
+ async deleteAppRole(logger, app, roleId) {
95
96
  if (this.verbose) {
96
97
  await logger.logToStderr(`Deleting the app role.`);
97
98
  }
98
- const updatedAppRoles = aadApp.appRoles.filter((role) => role.id !== roleId);
99
+ const updatedAppRoles = app.appRoles.filter((role) => role.id !== roleId);
99
100
  const requestOptions = {
100
- url: `${this.resource}/v1.0/myorganization/applications/${aadApp.id}`,
101
+ url: `${this.resource}/v1.0/myorganization/applications/${app.id}`,
101
102
  headers: {
102
103
  accept: 'application/json;odata.metadata=none'
103
104
  },
@@ -108,12 +109,12 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
108
109
  };
109
110
  return request.patch(requestOptions);
110
111
  }
111
- async getAadApp(appId, logger) {
112
+ async getEntraApp(appObjectId, logger) {
112
113
  if (this.verbose) {
113
- await logger.logToStderr(`Retrieving app roles information for the Microsoft Entra app ${appId}...`);
114
+ await logger.logToStderr(`Retrieving app roles information for the Microsoft Entra app ${appObjectId}...`);
114
115
  }
115
116
  const requestOptions = {
116
- url: `${this.resource}/v1.0/myorganization/applications/${appId}?$select=id,appRoles`,
117
+ url: `${this.resource}/v1.0/myorganization/applications/${appObjectId}?$select=id,appRoles`,
117
118
  headers: {
118
119
  accept: 'application/json;odata.metadata=none'
119
120
  },
@@ -129,27 +130,29 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
129
130
  if (this.verbose) {
130
131
  await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
131
132
  }
132
- const filter = appId ?
133
- `appId eq '${formatting.encodeQueryParameter(appId)}'` :
134
- `displayName eq '${formatting.encodeQueryParameter(appName)}'`;
135
- const requestOptions = {
136
- url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
137
- headers: {
138
- accept: 'application/json;odata.metadata=none'
139
- },
140
- responseType: 'json'
141
- };
142
- const res = await request.get(requestOptions);
143
- if (res.value.length === 1) {
144
- return res.value[0].id;
133
+ if (appId) {
134
+ const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
135
+ return app.id;
145
136
  }
146
- if (res.value.length === 0) {
147
- const applicationIdentifier = appId ? `ID ${appId}` : `name ${appName}`;
148
- throw `No Microsoft Entra application registration with ${applicationIdentifier} found`;
137
+ else {
138
+ const requestOptions = {
139
+ url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
140
+ headers: {
141
+ accept: 'application/json;odata.metadata=none'
142
+ },
143
+ responseType: 'json'
144
+ };
145
+ const res = await request.get(requestOptions);
146
+ if (res.value.length === 1) {
147
+ return res.value[0].id;
148
+ }
149
+ if (res.value.length === 0) {
150
+ throw `No Microsoft Entra application registration with name ${appName} found`;
151
+ }
152
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
153
+ const result = (await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair));
154
+ return result.id;
149
155
  }
150
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
151
- const result = (await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair));
152
- return result.id;
153
156
  }
154
157
  }
155
158
  _EntraAppRoleRemoveCommand_instances = new WeakSet(), _EntraAppRoleRemoveCommand_initTelemetry = function _EntraAppRoleRemoveCommand_initTelemetry() {
@@ -10,6 +10,8 @@ import { formatting } from '../../../../utils/formatting.js';
10
10
  import GraphCommand from '../../../base/GraphCommand.js';
11
11
  import commands from '../../commands.js';
12
12
  import { cli } from '../../../../cli/cli.js';
13
+ import { optionsUtils } from '../../../../utils/optionsUtils.js';
14
+ import { entraApp } from '../../../../utils/entraApp.js';
13
15
  class EntraAppSetCommand extends GraphCommand {
14
16
  get name() {
15
17
  return commands.APP_SET;
@@ -17,6 +19,9 @@ class EntraAppSetCommand extends GraphCommand {
17
19
  get description() {
18
20
  return 'Updates Entra app registration';
19
21
  }
22
+ allowUnknownOptions() {
23
+ return true;
24
+ }
20
25
  constructor() {
21
26
  super();
22
27
  _EntraAppSetCommand_instances.add(this);
@@ -29,6 +34,7 @@ class EntraAppSetCommand extends GraphCommand {
29
34
  async commandAction(logger, args) {
30
35
  try {
31
36
  let objectId = await this.getAppObjectId(args, logger);
37
+ objectId = await this.updateUnknownOptions(args, objectId);
32
38
  objectId = await this.configureUri(args, objectId, logger);
33
39
  objectId = await this.configureRedirectUris(args, objectId, logger);
34
40
  objectId = await this.updateAllowPublicClientFlows(args, objectId, logger);
@@ -46,27 +52,46 @@ class EntraAppSetCommand extends GraphCommand {
46
52
  if (this.verbose) {
47
53
  await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : name}...`);
48
54
  }
49
- const filter = appId ?
50
- `appId eq '${formatting.encodeQueryParameter(appId)}'` :
51
- `displayName eq '${formatting.encodeQueryParameter(name)}'`;
52
- const requestOptions = {
53
- url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
54
- headers: {
55
- accept: 'application/json;odata.metadata=none'
56
- },
57
- responseType: 'json'
58
- };
59
- const res = await request.get(requestOptions);
60
- if (res.value.length === 1) {
61
- return res.value[0].id;
55
+ if (appId) {
56
+ const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
57
+ return app.id;
58
+ }
59
+ else {
60
+ const requestOptions = {
61
+ url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'&$select=id`,
62
+ headers: {
63
+ accept: 'application/json;odata.metadata=none'
64
+ },
65
+ responseType: 'json'
66
+ };
67
+ const res = await request.get(requestOptions);
68
+ if (res.value.length === 1) {
69
+ return res.value[0].id;
70
+ }
71
+ if (res.value.length === 0) {
72
+ throw `No Microsoft Entra application registration with name ${name} found`;
73
+ }
74
+ const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
75
+ const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
76
+ return result.id;
62
77
  }
63
- if (res.value.length === 0) {
64
- const applicationIdentifier = appId ? `ID ${appId}` : `name ${name}`;
65
- throw `No Microsoft Entra application registration with ${applicationIdentifier} found`;
78
+ }
79
+ async updateUnknownOptions(args, objectId) {
80
+ const unknownOptions = optionsUtils.getUnknownOptions(args.options, this.options);
81
+ if (Object.keys(unknownOptions).length > 0) {
82
+ const requestBody = {};
83
+ optionsUtils.addUnknownOptionsToPayload(requestBody, unknownOptions);
84
+ const requestOptions = {
85
+ url: `${this.resource}/v1.0/myorganization/applications/${objectId}`,
86
+ headers: {
87
+ 'content-type': 'application/json;odata.metadata=none'
88
+ },
89
+ responseType: 'json',
90
+ data: requestBody
91
+ };
92
+ await request.patch(requestOptions);
66
93
  }
67
- const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
68
- const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
69
- return result.id;
94
+ return objectId;
70
95
  }
71
96
  async updateAllowPublicClientFlows(args, objectId, logger) {
72
97
  if (args.options.allowPublicClientFlows === undefined) {
@@ -270,6 +295,7 @@ _a = EntraAppSetCommand, _EntraAppSetCommand_instances = new WeakSet(), _EntraAp
270
295
  certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined',
271
296
  allowPublicClientFlows: typeof args.options.allowPublicClientFlows !== 'undefined'
272
297
  });
298
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
273
299
  });
274
300
  }, _EntraAppSetCommand_initOptions = function _EntraAppSetCommand_initOptions() {
275
301
  this.options.unshift({ option: '--appId [appId]' }, { option: '--objectId [objectId]' }, { option: '-n, --name [name]' }, { option: '-u, --uris [uris]' }, { option: '-r, --redirectUris [redirectUris]' }, { option: '--certificateFile [certificateFile]' }, { option: '--certificateBase64Encoded [certificateBase64Encoded]' }, { option: '--certificateDisplayName [certificateDisplayName]' }, {
@@ -212,6 +212,7 @@ _EntraGroupAddCommand_instances = new WeakSet(), _EntraGroupAddCommand_initOptio
212
212
  memberUserNames: typeof args.options.memberUserNames !== 'undefined',
213
213
  visibility: typeof args.options.visibility !== 'undefined'
214
214
  });
215
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
215
216
  });
216
217
  };
217
218
  export default new EntraGroupAddCommand();
@@ -19,6 +19,9 @@ class EntraGroupSetCommand extends GraphCommand {
19
19
  get description() {
20
20
  return 'Updates a Microsoft Entra group';
21
21
  }
22
+ allowUnknownOptions() {
23
+ return true;
24
+ }
22
25
  constructor() {
23
26
  super();
24
27
  _EntraGroupSetCommand_instances.add(this);
@@ -38,17 +41,19 @@ class EntraGroupSetCommand extends GraphCommand {
38
41
  }
39
42
  groupId = await entraGroup.getGroupIdByDisplayName(args.options.displayName);
40
43
  }
44
+ const requestBody = {
45
+ displayName: args.options.newDisplayName,
46
+ description: args.options.description === '' ? null : args.options.description,
47
+ mailNickName: args.options.mailNickname,
48
+ visibility: args.options.visibility
49
+ };
50
+ this.addUnknownOptionsToPayload(requestBody, args.options);
41
51
  const requestOptions = {
42
52
  url: `${this.resource}/v1.0/groups/${groupId}`,
43
53
  headers: {
44
54
  accept: 'application/json;odata.metadata=none'
45
55
  },
46
- data: {
47
- displayName: args.options.newDisplayName,
48
- description: args.options.description === '' ? null : args.options.description,
49
- mailNickName: args.options.mailNickname,
50
- visibility: args.options.visibility
51
- }
56
+ data: requestBody
52
57
  };
53
58
  await request.patch(requestOptions);
54
59
  const ownerIds = await this.getUserIds(logger, args.options.ownerIds, args.options.ownerUserNames);
@@ -167,6 +172,7 @@ _EntraGroupSetCommand_instances = new WeakSet(), _EntraGroupSetCommand_initTelem
167
172
  memberUserNames: typeof args.options.memberUserNames !== 'undefined',
168
173
  visibility: typeof args.options.visibility !== 'undefined'
169
174
  });
175
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
170
176
  });
171
177
  }, _EntraGroupSetCommand_initOptions = function _EntraGroupSetCommand_initOptions() {
172
178
  this.options.unshift({
@@ -9,10 +9,22 @@ import GraphCommand from '../../../base/GraphCommand.js';
9
9
  import commands from '../../commands.js';
10
10
  const policyEndPoints = {
11
11
  activitybasedtimeout: "activityBasedTimeoutPolicies",
12
+ adminconsentrequest: "adminConsentRequestPolicy",
13
+ appManagement: "appManagementPolicies",
14
+ authenticationflows: "authenticationFlowsPolicy",
15
+ authenticationmethods: "authenticationMethodsPolicy",
16
+ authenticationstrength: "authenticationStrengthPolicies",
12
17
  authorization: "authorizationPolicy",
13
18
  claimsmapping: "claimsMappingPolicies",
19
+ conditionalaccess: "conditionalAccessPolicies",
20
+ crosstenantaccess: "crossTenantAccessPolicy",
21
+ defaultappmanagement: "defaultAppManagementPolicy",
22
+ deviceregistration: "deviceRegistrationPolicy",
23
+ featurerolloutpolicy: "featureRolloutPolicies",
14
24
  homerealmdiscovery: "homeRealmDiscoveryPolicies",
15
25
  identitysecuritydefaultsenforcement: "identitySecurityDefaultsEnforcementPolicy",
26
+ permissiongrant: "permissionGrantPolicies",
27
+ rolemanagement: "roleManagementPolicies",
16
28
  tokenissuance: "tokenIssuancePolicies",
17
29
  tokenlifetime: "tokenLifetimePolicies"
18
30
  };
@@ -56,15 +68,26 @@ class EntraPolicyListCommand extends GraphCommand {
56
68
  }
57
69
  async getPolicies(policyType) {
58
70
  const endpoint = policyEndPoints[policyType];
71
+ let requestUrl = `${this.resource}/v1.0/policies/${endpoint}`;
72
+ if (endpoint === policyEndPoints.rolemanagement) {
73
+ // roleManagementPolicies endpoint requires $filter query parameter
74
+ requestUrl += `?$filter=scopeId eq '/' and scopeType eq 'DirectoryRole'`;
75
+ }
59
76
  const requestOptions = {
60
- url: `${this.resource}/v1.0/policies/${endpoint}`,
77
+ url: requestUrl,
61
78
  headers: {
62
79
  accept: 'application/json;odata.metadata=none'
63
80
  },
64
81
  responseType: 'json'
65
82
  };
66
83
  const response = await request.get(requestOptions);
67
- if (endpoint === policyEndPoints.authorization ||
84
+ if (endpoint === policyEndPoints.adminconsentrequest ||
85
+ endpoint === policyEndPoints.authenticationflows ||
86
+ endpoint === policyEndPoints.authenticationmethods ||
87
+ endpoint === policyEndPoints.authorization ||
88
+ endpoint === policyEndPoints.crosstenantaccess ||
89
+ endpoint === policyEndPoints.defaultappmanagement ||
90
+ endpoint === policyEndPoints.deviceregistration ||
68
91
  endpoint === policyEndPoints.identitysecuritydefaultsenforcement) {
69
92
  return response;
70
93
  }
@@ -95,6 +118,26 @@ _a = EntraPolicyListCommand, _EntraPolicyListCommand_instances = new WeakSet(),
95
118
  return true;
96
119
  });
97
120
  };
98
- EntraPolicyListCommand.supportedPolicyTypes = ['activityBasedTimeout', 'authorization', 'claimsMapping', 'homeRealmDiscovery', 'identitySecurityDefaultsEnforcement', 'tokenIssuance', 'tokenLifetime'];
121
+ EntraPolicyListCommand.supportedPolicyTypes = [
122
+ 'activityBasedTimeout',
123
+ 'adminConsentRequest',
124
+ 'appManagement',
125
+ 'authenticationFlows',
126
+ 'authenticationMethods',
127
+ 'authenticationStrength',
128
+ 'authorization',
129
+ 'claimsMapping',
130
+ 'conditionalAccess',
131
+ 'crossTenantAccess',
132
+ 'defaultAppManagement',
133
+ 'deviceRegistration',
134
+ 'featureRolloutPolicy',
135
+ 'homeRealmDiscovery',
136
+ 'identitySecurityDefaultsEnforcement',
137
+ 'permissionGrant',
138
+ 'roleManagement',
139
+ 'tokenIssuance',
140
+ 'tokenLifetime'
141
+ ];
99
142
  export default new EntraPolicyListCommand();
100
143
  //# sourceMappingURL=policy-list.js.map
@@ -131,6 +131,7 @@ _EntraUserAddCommand_instances = new WeakSet(), _EntraUserAddCommand_initTelemet
131
131
  managerUserId: typeof args.options.managerUserId !== 'undefined',
132
132
  managerUserName: typeof args.options.managerUserName !== 'undefined'
133
133
  });
134
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
134
135
  });
135
136
  }, _EntraUserAddCommand_initOptions = function _EntraUserAddCommand_initOptions() {
136
137
  this.options.unshift({
@@ -20,9 +20,6 @@ class EntraUserGuestAddCommand extends GraphCommand {
20
20
  __classPrivateFieldGet(this, _EntraUserGuestAddCommand_instances, "m", _EntraUserGuestAddCommand_initTelemetry).call(this);
21
21
  __classPrivateFieldGet(this, _EntraUserGuestAddCommand_instances, "m", _EntraUserGuestAddCommand_initOptions).call(this);
22
22
  }
23
- defaultProperties() {
24
- return ['id', 'inviteRedeemUrl', 'invitedUserDisplayName', 'invitedUserEmailAddress', 'invitedUserType', 'resetRedemption', 'sendInvitationMessage', 'status'];
25
- }
26
23
  async commandAction(logger, args) {
27
24
  try {
28
25
  const requestOptions = {
@@ -8,6 +8,7 @@ import { formatting } from '../../../../utils/formatting.js';
8
8
  import { odata } from '../../../../utils/odata.js';
9
9
  import GraphCommand from '../../../base/GraphCommand.js';
10
10
  import commands from '../../commands.js';
11
+ import { optionsUtils } from '../../../../utils/optionsUtils.js';
11
12
  class EntraUserListCommand extends GraphCommand {
12
13
  get name() {
13
14
  return commands.USER_LIST;
@@ -56,7 +57,7 @@ class EntraUserListCommand extends GraphCommand {
56
57
  }
57
58
  getFilter(options) {
58
59
  const filters = [];
59
- const unknownOptions = this.getUnknownOptions(options);
60
+ const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
60
61
  Object.keys(unknownOptions).forEach(key => {
61
62
  if (typeof options[key] === 'boolean') {
62
63
  throw `Specify value for the ${key} property`;
@@ -47,7 +47,7 @@ class ExternalItemAddCommand extends GraphCommand {
47
47
  // we need to rewrite the @odata properties to the correct format
48
48
  // to extract multiple values for collections into arrays
49
49
  this.rewriteCollectionProperties(args.options);
50
- this.addUnknownOptionsToPayload(requestBody.properties, args.options);
50
+ this.addUnknownOptionsToPayload(requestBody, args.options);
51
51
  const requestOptions = {
52
52
  url: `${this.resource}/v1.0/external/connections/${args.options.externalConnectionId}/items/${args.options.id}`,
53
53
  headers: {
@@ -96,6 +96,7 @@ _a = ExternalItemAddCommand, _ExternalItemAddCommand_instances = new WeakSet(),
96
96
  Object.assign(this.telemetryProperties, {
97
97
  contentType: typeof args.options.contentType
98
98
  });
99
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
99
100
  });
100
101
  }, _ExternalItemAddCommand_initOptions = function _ExternalItemAddCommand_initOptions() {
101
102
  this.options.unshift({
@@ -15,9 +15,6 @@ class FlowEnvironmentGetCommand extends PowerAutomateCommand {
15
15
  get description() {
16
16
  return 'Gets information about the specified Microsoft Flow environment';
17
17
  }
18
- defaultProperties() {
19
- return ['name', 'id', 'location', 'displayName', 'provisioningState', 'environmentSku', 'azureRegionHint', 'isDefault'];
20
- }
21
18
  constructor() {
22
19
  super();
23
20
  _FlowEnvironmentGetCommand_instances.add(this);
@@ -15,9 +15,6 @@ class FlowGetCommand extends PowerAutomateCommand {
15
15
  get description() {
16
16
  return 'Gets information about the specified Microsoft Flow';
17
17
  }
18
- defaultProperties() {
19
- return ['name', 'displayName', 'description', 'triggers', 'actions'];
20
- }
21
18
  constructor() {
22
19
  super();
23
20
  _FlowGetCommand_instances.add(this);
@@ -29,7 +29,7 @@ class FlowListCommand extends PowerAutomateCommand {
29
29
  }
30
30
  async commandAction(logger, args) {
31
31
  if (this.verbose) {
32
- await logger.logToStderr(`Getting Power Automate flows${args.options.asAdmin && ' as admin'} in environment '${args.options.environmentName}'...`);
32
+ await logger.logToStderr(`Getting Power Automate flows${args.options.asAdmin ? ' as admin' : ''} in environment '${args.options.environmentName}'...`);
33
33
  }
34
34
  try {
35
35
  const { environmentName, asAdmin, sharingStatus, includeSolutions } = args.options;