@pnp/cli-microsoft365 7.5.0-beta.494c631 → 7.5.0-beta.940b241

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 (204) hide show
  1. package/.devcontainer/Dockerfile +2 -2
  2. package/.eslintrc.cjs +6 -2
  3. package/.mocharc.json +3 -5
  4. package/Dockerfile +2 -5
  5. package/README.md +2 -2
  6. package/allCommands.json +1 -1
  7. package/allCommandsFull.json +1 -1
  8. package/dist/Command.js +1 -1
  9. package/dist/m365/app/commands/app-get.js +2 -2
  10. package/dist/m365/base/AppCommand.js +2 -2
  11. package/dist/m365/base/{YammerCommand.js → VivaEngageCommand.js} +2 -2
  12. package/dist/m365/cli/commands/cli-consent.js +5 -3
  13. package/dist/m365/entra/aadCommands.js +3 -0
  14. package/dist/m365/entra/commands/administrativeunit/administrativeunit-get.js +2 -2
  15. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-add.js +8 -8
  16. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-get.js +2 -2
  17. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-list.js +2 -2
  18. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-remove.js +153 -0
  19. package/dist/m365/entra/commands/administrativeunit/administrativeunit-remove.js +2 -2
  20. package/dist/m365/entra/commands/administrativeunit/administrativeunit-roleassignment-add.js +4 -4
  21. package/dist/m365/entra/commands/app/app-add.js +1 -1
  22. package/dist/m365/entra/commands/app/app-get.js +1 -1
  23. package/dist/m365/entra/commands/app/app-list.js +1 -1
  24. package/dist/m365/entra/commands/app/app-permission-add.js +4 -8
  25. package/dist/m365/entra/commands/app/app-permission-list.js +182 -0
  26. package/dist/m365/entra/commands/app/app-remove.js +1 -1
  27. package/dist/m365/entra/commands/app/app-role-add.js +1 -1
  28. package/dist/m365/entra/commands/app/app-role-list.js +1 -1
  29. package/dist/m365/entra/commands/app/app-role-remove.js +1 -1
  30. package/dist/m365/entra/commands/app/app-set.js +1 -1
  31. package/dist/m365/entra/commands/{sp/sp-add.js → enterpriseapp/enterpriseapp-add.js} +18 -18
  32. package/dist/m365/entra/commands/{sp/sp-get.js → enterpriseapp/enterpriseapp-get.js} +19 -19
  33. package/dist/m365/entra/commands/{sp/sp-list.js → enterpriseapp/enterpriseapp-list.js} +13 -13
  34. package/dist/m365/entra/commands/group/group-add.js +224 -0
  35. package/dist/m365/entra/commands/group/group-get.js +3 -3
  36. package/dist/m365/entra/commands/group/group-remove.js +2 -2
  37. package/dist/m365/entra/commands/group/group-user-add.js +145 -0
  38. package/dist/m365/entra/commands/group/group-user-list.js +2 -2
  39. package/dist/m365/entra/commands/m365group/m365group-conversation-list.js +2 -2
  40. package/dist/m365/entra/commands/m365group/m365group-conversation-post-list.js +3 -3
  41. package/dist/m365/entra/commands/m365group/m365group-get.js +3 -3
  42. package/dist/m365/entra/commands/m365group/m365group-remove.js +2 -2
  43. package/dist/m365/entra/commands/m365group/m365group-renew.js +2 -2
  44. package/dist/m365/entra/commands/m365group/m365group-report-activitygroupcounts.js +1 -1
  45. package/dist/m365/entra/commands/m365group/m365group-set.js +2 -2
  46. package/dist/m365/entra/commands/m365group/m365group-teamify.js +2 -2
  47. package/dist/m365/entra/commands/m365group/m365group-user-add.js +2 -2
  48. package/dist/m365/entra/commands/m365group/m365group-user-list.js +3 -3
  49. package/dist/m365/entra/commands/m365group/m365group-user-remove.js +2 -2
  50. package/dist/m365/entra/commands/m365group/m365group-user-set.js +2 -2
  51. package/dist/m365/entra/commands/user/user-get.js +38 -38
  52. package/dist/m365/entra/commands/user/user-registrationdetails-list.js +224 -0
  53. package/dist/m365/entra/commands.js +17 -0
  54. package/dist/m365/external/commands/connection/connection-doctor.js +2 -1
  55. package/dist/m365/file/commands/file-copy.js +151 -0
  56. package/dist/m365/file/commands.js +1 -0
  57. package/dist/m365/flow/commands/owner/owner-ensure.js +4 -4
  58. package/dist/m365/flow/commands/owner/owner-remove.js +4 -4
  59. package/dist/m365/onenote/commands/notebook/notebook-list.js +2 -2
  60. package/dist/m365/onenote/commands/page/page-list.js +2 -2
  61. package/dist/m365/pa/commands/app/app-owner-set.js +2 -2
  62. package/dist/m365/pa/commands/app/app-permission-ensure.js +4 -4
  63. package/dist/m365/pa/commands/app/app-permission-remove.js +4 -4
  64. package/dist/m365/planner/commands/bucket/bucket-add.js +2 -2
  65. package/dist/m365/planner/commands/bucket/bucket-get.js +2 -2
  66. package/dist/m365/planner/commands/bucket/bucket-list.js +2 -2
  67. package/dist/m365/planner/commands/bucket/bucket-remove.js +2 -2
  68. package/dist/m365/planner/commands/bucket/bucket-set.js +2 -2
  69. package/dist/m365/planner/commands/plan/plan-add.js +2 -2
  70. package/dist/m365/planner/commands/plan/plan-get.js +2 -2
  71. package/dist/m365/planner/commands/plan/plan-list.js +2 -2
  72. package/dist/m365/planner/commands/plan/plan-remove.js +2 -2
  73. package/dist/m365/planner/commands/plan/plan-set.js +2 -2
  74. package/dist/m365/planner/commands/roster/roster-member-add.js +2 -2
  75. package/dist/m365/planner/commands/roster/roster-member-get.js +2 -2
  76. package/dist/m365/planner/commands/roster/roster-member-remove.js +2 -2
  77. package/dist/m365/planner/commands/task/task-add.js +2 -2
  78. package/dist/m365/planner/commands/task/task-get.js +2 -2
  79. package/dist/m365/planner/commands/task/task-list.js +2 -2
  80. package/dist/m365/planner/commands/task/task-remove.js +2 -2
  81. package/dist/m365/planner/commands/task/task-set.js +2 -2
  82. package/dist/m365/spfx/commands/project/DeployWorkflow.js +4 -3
  83. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +1 -1
  84. package/dist/m365/spo/commands/group/group-member-add.js +4 -4
  85. package/dist/m365/spo/commands/group/group-member-remove.js +2 -2
  86. package/dist/m365/spo/commands/group/group-set.js +2 -2
  87. package/dist/m365/spo/commands/site/site-remove.js +2 -2
  88. package/dist/m365/spo/commands/site/site-set.js +2 -2
  89. package/dist/m365/spo/commands/user/user-ensure.js +2 -2
  90. package/dist/m365/teams/commands/app/app-install.js +2 -2
  91. package/dist/m365/teams/commands/channel/channel-get.js +2 -2
  92. package/dist/m365/teams/commands/channel/channel-list.js +2 -2
  93. package/dist/m365/teams/commands/channel/channel-member-add.js +2 -2
  94. package/dist/m365/teams/commands/channel/channel-member-list.js +2 -2
  95. package/dist/m365/teams/commands/channel/channel-member-remove.js +2 -2
  96. package/dist/m365/teams/commands/channel/channel-member-set.js +2 -2
  97. package/dist/m365/teams/commands/channel/channel-remove.js +2 -2
  98. package/dist/m365/teams/commands/channel/channel-set.js +2 -2
  99. package/dist/m365/teams/commands/meeting/meeting-add.js +2 -2
  100. package/dist/m365/teams/commands/meeting/meeting-attendancereport-list.js +2 -2
  101. package/dist/m365/teams/commands/meeting/meeting-get.js +3 -3
  102. package/dist/m365/teams/commands/meeting/meeting-list.js +2 -2
  103. package/dist/m365/teams/commands/meeting/meeting-transcript-list.js +2 -2
  104. package/dist/m365/teams/commands/tab/tab-get.js +2 -2
  105. package/dist/m365/teams/commands/team/team-add.js +6 -6
  106. package/dist/m365/teams/commands/team/team-archive.js +2 -2
  107. package/dist/m365/teams/commands/team/team-get.js +2 -2
  108. package/dist/m365/teams/commands/team/team-remove.js +2 -2
  109. package/dist/m365/teams/commands/team/team-unarchive.js +2 -2
  110. package/dist/m365/{yammer/commands/group/group-list.js → viva/commands/engage/engage-group-list.js} +19 -14
  111. package/dist/m365/{yammer/commands/group/group-user-add.js → viva/commands/engage/engage-group-user-add.js} +19 -14
  112. package/dist/m365/{yammer/commands/group/group-user-remove.js → viva/commands/engage/engage-group-user-remove.js} +19 -14
  113. package/dist/m365/{yammer/commands/message/message-add.js → viva/commands/engage/engage-message-add.js} +19 -14
  114. package/dist/m365/{yammer/commands/message/message-get.js → viva/commands/engage/engage-message-get.js} +17 -12
  115. package/dist/m365/{yammer/commands/message/message-like-set.js → viva/commands/engage/engage-message-like-set.js} +21 -16
  116. package/dist/m365/{yammer/commands/message/message-list.js → viva/commands/engage/engage-message-list.js} +21 -16
  117. package/dist/m365/{yammer/commands/message/message-remove.js → viva/commands/engage/engage-message-remove.js} +20 -15
  118. package/dist/m365/{yammer/commands/network/network-list.js → viva/commands/engage/engage-network-list.js} +16 -11
  119. package/dist/m365/viva/commands/engage/engage-report-activitycounts.js +23 -0
  120. package/dist/m365/viva/commands/engage/engage-report-activityusercounts.js +23 -0
  121. package/dist/m365/viva/commands/engage/engage-report-activityuserdetail.js +23 -0
  122. package/dist/m365/viva/commands/engage/engage-report-deviceusagedistributionusercounts.js +23 -0
  123. package/dist/m365/viva/commands/engage/engage-report-deviceusageusercounts.js +23 -0
  124. package/dist/m365/viva/commands/engage/engage-report-deviceusageuserdetail.js +23 -0
  125. package/dist/m365/viva/commands/engage/engage-report-groupsactivitycounts.js +23 -0
  126. package/dist/m365/viva/commands/engage/engage-report-groupsactivitydetail.js +23 -0
  127. package/dist/m365/viva/commands/engage/engage-report-groupsactivitygroupcounts.js +23 -0
  128. package/dist/m365/{yammer/commands/yammer-search.js → viva/commands/engage/engage-search.js} +23 -18
  129. package/dist/m365/{yammer/commands/user/user-get.js → viva/commands/engage/engage-user-get.js} +18 -13
  130. package/dist/m365/{yammer/commands/user/user-list.js → viva/commands/engage/engage-user-list.js} +18 -13
  131. package/dist/m365/{yammer/commands.js → viva/commands/engage/yammerCommands.js} +1 -1
  132. package/dist/m365/viva/commands.js +22 -1
  133. package/dist/utils/{aadAdministrativeUnit.js → entraAdministrativeUnit.js} +2 -2
  134. package/dist/utils/{aadDevice.js → entraDevice.js} +2 -2
  135. package/dist/utils/{aadGroup.js → entraGroup.js} +2 -2
  136. package/dist/utils/{aadUser.js → entraUser.js} +38 -2
  137. package/dist/utils/spo.js +24 -2
  138. package/dist/utils/urlUtil.js +31 -0
  139. package/dist/utils/validation.js +8 -0
  140. package/docs/docs/cmd/cli/cli-consent.mdx +9 -9
  141. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-add.mdx +5 -3
  142. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-remove.mdx +107 -0
  143. package/docs/docs/cmd/entra/app/app-add.mdx +2 -1
  144. package/docs/docs/cmd/entra/app/app-get.mdx +1 -0
  145. package/docs/docs/cmd/entra/app/app-list.mdx +1 -0
  146. package/docs/docs/cmd/entra/app/app-permission-add.mdx +3 -2
  147. package/docs/docs/cmd/entra/app/app-permission-list.mdx +105 -0
  148. package/docs/docs/cmd/entra/app/app-remove.mdx +1 -0
  149. package/docs/docs/cmd/entra/app/app-role-add.mdx +1 -0
  150. package/docs/docs/cmd/entra/app/app-role-list.mdx +1 -0
  151. package/docs/docs/cmd/entra/app/app-role-remove.mdx +1 -0
  152. package/docs/docs/cmd/entra/app/app-set.mdx +1 -0
  153. package/docs/docs/cmd/entra/{sp/sp-add.mdx → enterpriseapp/enterpriseapp-add.mdx} +16 -15
  154. package/docs/docs/cmd/entra/{sp/sp-get.mdx → enterpriseapp/enterpriseapp-get.mdx} +15 -14
  155. package/docs/docs/cmd/entra/{sp/sp-list.mdx → enterpriseapp/enterpriseapp-list.mdx} +22 -21
  156. package/docs/docs/cmd/entra/group/group-add.mdx +231 -0
  157. package/docs/docs/cmd/entra/group/group-user-add.mdx +62 -0
  158. package/docs/docs/cmd/entra/m365group/m365group-report-activitygroupcounts.mdx +1 -1
  159. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +3 -3
  160. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -1
  161. package/docs/docs/cmd/entra/user/user-registrationdetails-list.mdx +246 -0
  162. package/docs/docs/cmd/external/item/item-add.mdx +1 -1
  163. package/docs/docs/cmd/file/convert/convert-pdf.mdx +4 -0
  164. package/docs/docs/cmd/file/file-add.mdx +4 -0
  165. package/docs/docs/cmd/file/file-copy.mdx +68 -0
  166. package/docs/docs/cmd/file/file-list.mdx +100 -0
  167. package/docs/docs/cmd/setup.mdx +4 -0
  168. package/docs/docs/cmd/spo/list/list-webhook-set.mdx +1 -1
  169. package/docs/docs/cmd/spo/listitem/listitem-list.mdx +1 -1
  170. package/docs/docs/cmd/spo/theme/theme-set.mdx +14 -2
  171. package/docs/docs/cmd/{yammer/group/group-list.mdx → viva/engage/engage-group-list.mdx} +13 -13
  172. package/docs/docs/cmd/{yammer/group/group-user-add.mdx → viva/engage/engage-group-user-add.mdx} +7 -7
  173. package/docs/docs/cmd/{yammer/group/group-user-remove.mdx → viva/engage/engage-group-user-remove.mdx} +10 -10
  174. package/docs/docs/cmd/{yammer/message/message-add.mdx → viva/engage/engage-message-add.mdx} +12 -13
  175. package/docs/docs/cmd/{yammer/message/message-get.mdx → viva/engage/engage-message-get.mdx} +10 -10
  176. package/docs/docs/cmd/{yammer/message/message-like-set.mdx → viva/engage/engage-message-like-set.mdx} +10 -10
  177. package/docs/docs/cmd/{yammer/message/message-list.mdx → viva/engage/engage-message-list.mdx} +21 -21
  178. package/docs/docs/cmd/{yammer/message/message-remove.mdx → viva/engage/engage-message-remove.mdx} +10 -10
  179. package/docs/docs/cmd/{yammer/network/network-list.mdx → viva/engage/engage-network-list.mdx} +6 -6
  180. package/docs/docs/cmd/{yammer/report/report-activitycounts.mdx → viva/engage/engage-report-activitycounts.mdx} +9 -9
  181. package/docs/docs/cmd/{yammer/report/report-activityusercounts.mdx → viva/engage/engage-report-activityusercounts.mdx} +9 -9
  182. package/docs/docs/cmd/{yammer/report/report-activityuserdetail.mdx → viva/engage/engage-report-activityuserdetail.mdx} +11 -12
  183. package/docs/docs/cmd/{yammer/report/report-deviceusagedistributionusercounts.mdx → viva/engage/engage-report-deviceusagedistributionusercounts.mdx} +5 -5
  184. package/docs/docs/cmd/{yammer/report/report-deviceusageusercounts.mdx → viva/engage/engage-report-deviceusageusercounts.mdx} +5 -5
  185. package/docs/docs/cmd/{yammer/report/report-deviceusageuserdetail.mdx → viva/engage/engage-report-deviceusageuserdetail.mdx} +11 -11
  186. package/docs/docs/cmd/{yammer/report/report-groupsactivitycounts.mdx → viva/engage/engage-report-groupsactivitycounts.mdx} +9 -9
  187. package/docs/docs/cmd/{yammer/report/report-groupsactivitydetail.mdx → viva/engage/engage-report-groupsactivitydetail.mdx} +11 -11
  188. package/docs/docs/cmd/{yammer/report/report-groupsactivitygroupcounts.mdx → viva/engage/engage-report-groupsactivitygroupcounts.mdx} +5 -5
  189. package/docs/docs/cmd/{yammer/yammer-search.mdx → viva/engage/engage-search.mdx} +10 -10
  190. package/docs/docs/cmd/{yammer/user/user-get.mdx → viva/engage/engage-user-get.mdx} +8 -8
  191. package/docs/docs/cmd/{yammer/user/user-list.mdx → viva/engage/engage-user-list.mdx} +11 -11
  192. package/npm-shrinkwrap.json +228 -166
  193. package/package.json +20 -19
  194. package/dist/m365/base/AzmgmtCommand.js +0 -18
  195. package/dist/m365/base/AzmgmtItemsListCommand.js +0 -41
  196. package/dist/m365/yammer/commands/report/report-activitycounts.js +0 -15
  197. package/dist/m365/yammer/commands/report/report-activityusercounts.js +0 -15
  198. package/dist/m365/yammer/commands/report/report-activityuserdetail.js +0 -15
  199. package/dist/m365/yammer/commands/report/report-deviceusagedistributionusercounts.js +0 -15
  200. package/dist/m365/yammer/commands/report/report-deviceusageusercounts.js +0 -15
  201. package/dist/m365/yammer/commands/report/report-deviceusageuserdetail.js +0 -15
  202. package/dist/m365/yammer/commands/report/report-groupsactivitycounts.js +0 -15
  203. package/dist/m365/yammer/commands/report/report-groupsactivitydetail.js +0 -15
  204. package/dist/m365/yammer/commands/report/report-groupsactivitygroupcounts.js +0 -15
package/dist/Command.js CHANGED
@@ -379,7 +379,7 @@ class Command {
379
379
  if (cli.currentCommandName &&
380
380
  cli.currentCommandName.indexOf(deprecated) === 0) {
381
381
  const chalk = (await import('chalk')).default;
382
- await logger.logToStderr(chalk.yellow(`Command '${deprecated}' is deprecated. Please use '${recommended}' instead`));
382
+ await logger.logToStderr(chalk.yellow(`Command '${deprecated}' is deprecated. Please use '${recommended}' instead.`));
383
383
  }
384
384
  }
385
385
  async warn(logger, warning) {
@@ -1,5 +1,5 @@
1
1
  import { cli } from '../../../cli/cli.js';
2
- import aadAppGetCommand from '../../entra/commands/app/app-get.js';
2
+ import entraAppGetCommand from '../../entra/commands/app/app-get.js';
3
3
  import AppCommand from '../../base/AppCommand.js';
4
4
  import commands from '../commands.js';
5
5
  class AppGetCommand extends AppCommand {
@@ -17,7 +17,7 @@ class AppGetCommand extends AppCommand {
17
17
  verbose: args.options.verbose
18
18
  };
19
19
  try {
20
- const appGetOutput = await cli.executeCommandWithOutput(aadAppGetCommand, { options: { ...options, _: [] } });
20
+ const appGetOutput = await cli.executeCommandWithOutput(entraAppGetCommand, { options: { ...options, _: [] } });
21
21
  if (this.verbose) {
22
22
  await logger.logToStderr(appGetOutput.stderr);
23
23
  }
@@ -39,7 +39,7 @@ class AppCommand extends Command {
39
39
  }
40
40
  if (!this.m365rcJson.apps ||
41
41
  this.m365rcJson.apps.length === 0) {
42
- throw new CommandError(`No Azure AD apps found in ${m365rcJsonPath}`);
42
+ throw new CommandError(`No Entra apps found in ${m365rcJsonPath}`);
43
43
  }
44
44
  if (args.options.appId) {
45
45
  if (!this.m365rcJson.apps.some(app => app.appId === args.options.appId)) {
@@ -54,7 +54,7 @@ class AppCommand extends Command {
54
54
  }
55
55
  if (this.m365rcJson.apps.length > 1) {
56
56
  const resultAsKeyValuePair = formatting.convertArrayToHashTable('appIdIndex', this.m365rcJson.apps);
57
- const result = await cli.handleMultipleResultsFound(`Multiple Azure AD apps found in ${m365rcJsonPath}.`, resultAsKeyValuePair);
57
+ const result = await cli.handleMultipleResultsFound(`Multiple Entra apps found in ${m365rcJsonPath}.`, resultAsKeyValuePair);
58
58
  this.appId = this.m365rcJson.apps[result.appIdIndex].appId;
59
59
  await super.action(logger, args);
60
60
  }
@@ -1,5 +1,5 @@
1
1
  import Command, { CommandError } from "../../Command.js";
2
- export default class YammerCommand extends Command {
2
+ export default class VivaEngageCommand extends Command {
3
3
  get resource() {
4
4
  return 'https://www.yammer.com/api';
5
5
  }
@@ -15,4 +15,4 @@ export default class YammerCommand extends Command {
15
15
  }
16
16
  }
17
17
  }
18
- //# sourceMappingURL=YammerCommand.js.map
18
+ //# sourceMappingURL=VivaEngageCommand.js.map
@@ -25,6 +25,8 @@ class CliConsentCommand extends AnonymousCommand {
25
25
  let scope = '';
26
26
  switch (args.options.service) {
27
27
  case 'yammer':
28
+ await this.warn(logger, 'The yammer service is deprecated. Please use the VivaEngage service instead.');
29
+ case 'VivaEngage':
28
30
  scope = 'https://api.yammer.com/user_impersonation';
29
31
  break;
30
32
  }
@@ -44,12 +46,12 @@ _CliConsentCommand_instances = new WeakSet(), _CliConsentCommand_initTelemetry =
44
46
  }, _CliConsentCommand_initOptions = function _CliConsentCommand_initOptions() {
45
47
  this.options.unshift({
46
48
  option: '-s, --service <service>',
47
- autocomplete: ['yammer']
49
+ autocomplete: ['VivaEngage']
48
50
  });
49
51
  }, _CliConsentCommand_initValidators = function _CliConsentCommand_initValidators() {
50
52
  this.validators.push(async (args) => {
51
- if (args.options.service !== 'yammer') {
52
- return `${args.options.service} is not a valid value for the service option. Allowed values: yammer`;
53
+ if (args.options.service !== 'VivaEngage' && args.options.service !== 'yammer') {
54
+ return `${args.options.service} is not a valid value for the service option. Allowed values: VivaEngage`;
53
55
  }
54
56
  return true;
55
57
  });
@@ -7,6 +7,7 @@ export default {
7
7
  ADMINISTRATIVEUNIT_MEMBER_ADD: `${prefix} administrativeunit member add`,
8
8
  ADMINISTRATIVEUNIT_MEMBER_GET: `${prefix} administrativeunit member get`,
9
9
  ADMINISTRATIVEUNIT_MEMBER_LIST: `${prefix} administrativeunit member list`,
10
+ ADMINISTRATIVEUNIT_MEMBER_REMOVE: `${prefix} administrativeunit member remove`,
10
11
  ADMINISTRATIVEUNIT_ROLEASSIGNMENT_ADD: `${prefix} administrativeunit roleassignment add`,
11
12
  APP_ADD: `${prefix} app add`,
12
13
  APP_GET: `${prefix} app get`,
@@ -20,6 +21,7 @@ export default {
20
21
  APPROLEASSIGNMENT_ADD: `${prefix} approleassignment add`,
21
22
  APPROLEASSIGNMENT_LIST: `${prefix} approleassignment list`,
22
23
  APPROLEASSIGNMENT_REMOVE: `${prefix} approleassignment remove`,
24
+ GROUP_ADD: `${prefix} group add`,
23
25
  GROUP_GET: `${prefix} group get`,
24
26
  GROUP_LIST: `${prefix} group list`,
25
27
  GROUP_REMOVE: `${prefix} group remove`,
@@ -78,6 +80,7 @@ export default {
78
80
  USER_RECYCLEBINITEM_CLEAR: `${prefix} user recyclebinitem clear`,
79
81
  USER_RECYCLEBINITEM_LIST: `${prefix} user recyclebinitem list`,
80
82
  USER_RECYCLEBINITEM_REMOVE: `${prefix} user recyclebinitem remove`,
83
+ USER_REGISTRATIONDETAILS_LIST: `${prefix} user registrationdetails list`,
81
84
  USER_REMOVE: `${prefix} user remove`,
82
85
  USER_RECYCLEBINITEM_RESTORE: `${prefix} user recyclebinitem restore`,
83
86
  USER_SET: `${prefix} user set`,
@@ -8,7 +8,7 @@ import { validation } from "../../../../utils/validation.js";
8
8
  import request from "../../../../request.js";
9
9
  import GraphCommand from "../../../base/GraphCommand.js";
10
10
  import commands from "../../commands.js";
11
- import { aadAdministrativeUnit } from "../../../../utils/aadAdministrativeUnit.js";
11
+ import { entraAdministrativeUnit } from "../../../../utils/entraAdministrativeUnit.js";
12
12
  import aadCommands from "../../aadCommands.js";
13
13
  class EntraAdministrativeUnitGetCommand extends GraphCommand {
14
14
  get name() {
@@ -36,7 +36,7 @@ class EntraAdministrativeUnitGetCommand extends GraphCommand {
36
36
  administrativeUnit = await this.getAdministrativeUnitById(args.options.id);
37
37
  }
38
38
  else {
39
- administrativeUnit = await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.displayName);
39
+ administrativeUnit = await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.displayName);
40
40
  }
41
41
  await logger.log(administrativeUnit);
42
42
  }
@@ -4,14 +4,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _EntraAdministrativeUnitMemberAddCommand_instances, _EntraAdministrativeUnitMemberAddCommand_initTelemetry, _EntraAdministrativeUnitMemberAddCommand_initOptions, _EntraAdministrativeUnitMemberAddCommand_initValidators, _EntraAdministrativeUnitMemberAddCommand_initOptionSets;
7
- import { aadAdministrativeUnit } from "../../../../utils/aadAdministrativeUnit.js";
8
- import { aadGroup } from "../../../../utils/aadGroup.js";
9
- import { aadUser } from "../../../../utils/aadUser.js";
7
+ import { entraAdministrativeUnit } from "../../../../utils/entraAdministrativeUnit.js";
8
+ import { entraGroup } from "../../../../utils/entraGroup.js";
9
+ import { entraUser } from "../../../../utils/entraUser.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
13
  import request from "../../../../request.js";
14
- import { aadDevice } from "../../../../utils/aadDevice.js";
14
+ import { entraDevice } from "../../../../utils/entraDevice.js";
15
15
  import aadCommands from "../../aadCommands.js";
16
16
  class EntraAdministrativeUnitMemberAddCommand extends GraphCommand {
17
17
  get name() {
@@ -40,7 +40,7 @@ class EntraAdministrativeUnitMemberAddCommand extends GraphCommand {
40
40
  if (this.verbose) {
41
41
  await logger.logToStderr(`Retrieving Administrative Unit Id...`);
42
42
  }
43
- administrativeUnitId = (await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
43
+ administrativeUnitId = (await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
44
44
  }
45
45
  if (args.options.userId || args.options.userName) {
46
46
  memberType = 'users';
@@ -49,7 +49,7 @@ class EntraAdministrativeUnitMemberAddCommand extends GraphCommand {
49
49
  if (this.verbose) {
50
50
  await logger.logToStderr(`Retrieving User Id...`);
51
51
  }
52
- memberId = await aadUser.getUserIdByUpn(args.options.userName);
52
+ memberId = await entraUser.getUserIdByUpn(args.options.userName);
53
53
  }
54
54
  }
55
55
  else if (args.options.groupId || args.options.groupName) {
@@ -59,7 +59,7 @@ class EntraAdministrativeUnitMemberAddCommand extends GraphCommand {
59
59
  if (this.verbose) {
60
60
  await logger.logToStderr(`Retrieving Group Id...`);
61
61
  }
62
- memberId = await aadGroup.getGroupIdByDisplayName(args.options.groupName);
62
+ memberId = await entraGroup.getGroupIdByDisplayName(args.options.groupName);
63
63
  }
64
64
  }
65
65
  else if (args.options.deviceId || args.options.deviceName) {
@@ -69,7 +69,7 @@ class EntraAdministrativeUnitMemberAddCommand extends GraphCommand {
69
69
  if (this.verbose) {
70
70
  await logger.logToStderr(`Device with name ${args.options.deviceName} retrieved, returned id: ${memberId}`);
71
71
  }
72
- memberId = (await aadDevice.getDeviceByDisplayName(args.options.deviceName)).id;
72
+ memberId = (await entraDevice.getDeviceByDisplayName(args.options.deviceName)).id;
73
73
  }
74
74
  }
75
75
  const requestOptions = {
@@ -7,7 +7,7 @@ var _EntraAdministrativeUnitMemberGetCommand_instances, _EntraAdministrativeUnit
7
7
  import GraphCommand from '../../../base/GraphCommand.js';
8
8
  import commands from '../../commands.js';
9
9
  import { validation } from '../../../../utils/validation.js';
10
- import { aadAdministrativeUnit } from '../../../../utils/aadAdministrativeUnit.js';
10
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
11
11
  import request from '../../../../request.js';
12
12
  import aadCommands from '../../aadCommands.js';
13
13
  class EntraAdministrativeUnitMemberGetCommand extends GraphCommand {
@@ -35,7 +35,7 @@ class EntraAdministrativeUnitMemberGetCommand extends GraphCommand {
35
35
  if (this.verbose) {
36
36
  await logger.logToStderr(`Retrieving Administrative Unit Id...`);
37
37
  }
38
- administrativeUnitId = (await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
38
+ administrativeUnitId = (await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
39
39
  }
40
40
  const url = this.getRequestUrl(administrativeUnitId, args.options.id, args.options);
41
41
  const requestOptions = {
@@ -7,7 +7,7 @@ var _EntraAdministrativeUnitMemberListCommand_instances, _EntraAdministrativeUni
7
7
  import { odata } from '../../../../utils/odata.js';
8
8
  import GraphCommand from '../../../base/GraphCommand.js';
9
9
  import commands from '../../commands.js';
10
- import { aadAdministrativeUnit } from '../../../../utils/aadAdministrativeUnit.js';
10
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import aadCommands from '../../aadCommands.js';
13
13
  class EntraAdministrativeUnitMemberListCommand extends GraphCommand {
@@ -35,7 +35,7 @@ class EntraAdministrativeUnitMemberListCommand extends GraphCommand {
35
35
  let administrativeUnitId = args.options.administrativeUnitId;
36
36
  try {
37
37
  if (args.options.administrativeUnitName) {
38
- administrativeUnitId = (await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
38
+ administrativeUnitId = (await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
39
39
  }
40
40
  let results;
41
41
  const endpoint = this.getRequestUrl(administrativeUnitId, args.options);
@@ -0,0 +1,153 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _EntraAdministrativeUnitMemberRemoveCommand_instances, _EntraAdministrativeUnitMemberRemoveCommand_initTelemetry, _EntraAdministrativeUnitMemberRemoveCommand_initOptions, _EntraAdministrativeUnitMemberRemoveCommand_initValidators, _EntraAdministrativeUnitMemberRemoveCommand_initOptionSets;
7
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
8
+ import { entraDevice } from '../../../../utils/entraDevice.js';
9
+ import { entraGroup } from '../../../../utils/entraGroup.js';
10
+ import { entraUser } from '../../../../utils/entraUser.js';
11
+ import { validation } from '../../../../utils/validation.js';
12
+ import GraphCommand from '../../../base/GraphCommand.js';
13
+ import commands from '../../commands.js';
14
+ import request from '../../../../request.js';
15
+ import { cli } from '../../../../cli/cli.js';
16
+ class EntraAdministrativeUnitMemberRemoveCommand extends GraphCommand {
17
+ get name() {
18
+ return commands.ADMINISTRATIVEUNIT_MEMBER_REMOVE;
19
+ }
20
+ get description() {
21
+ return 'Remove a specific member (user, group, or device) from an administrative unit';
22
+ }
23
+ constructor() {
24
+ super();
25
+ _EntraAdministrativeUnitMemberRemoveCommand_instances.add(this);
26
+ __classPrivateFieldGet(this, _EntraAdministrativeUnitMemberRemoveCommand_instances, "m", _EntraAdministrativeUnitMemberRemoveCommand_initOptions).call(this);
27
+ __classPrivateFieldGet(this, _EntraAdministrativeUnitMemberRemoveCommand_instances, "m", _EntraAdministrativeUnitMemberRemoveCommand_initValidators).call(this);
28
+ __classPrivateFieldGet(this, _EntraAdministrativeUnitMemberRemoveCommand_instances, "m", _EntraAdministrativeUnitMemberRemoveCommand_initOptionSets).call(this);
29
+ __classPrivateFieldGet(this, _EntraAdministrativeUnitMemberRemoveCommand_instances, "m", _EntraAdministrativeUnitMemberRemoveCommand_initTelemetry).call(this);
30
+ }
31
+ async commandAction(logger, args) {
32
+ const removeAdministrativeUnitMember = async () => {
33
+ let administrativeUnitId = args.options.administrativeUnitId;
34
+ let memberId = args.options.id;
35
+ try {
36
+ if (args.options.administrativeUnitName) {
37
+ if (this.verbose) {
38
+ await logger.logToStderr(`Retrieving Administrative Unit Id...`);
39
+ }
40
+ administrativeUnitId = (await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
41
+ }
42
+ if (args.options.userId || args.options.userName) {
43
+ memberId = args.options.userId;
44
+ if (args.options.userName) {
45
+ if (this.verbose) {
46
+ await logger.logToStderr(`Retrieving User Id...`);
47
+ }
48
+ memberId = await entraUser.getUserIdByUpn(args.options.userName);
49
+ }
50
+ }
51
+ else if (args.options.groupId || args.options.groupName) {
52
+ memberId = args.options.groupId;
53
+ if (args.options.groupName) {
54
+ if (this.verbose) {
55
+ await logger.logToStderr(`Retrieving Group Id...`);
56
+ }
57
+ memberId = await entraGroup.getGroupIdByDisplayName(args.options.groupName);
58
+ }
59
+ }
60
+ else if (args.options.deviceId || args.options.deviceName) {
61
+ memberId = args.options.deviceId;
62
+ if (args.options.deviceName) {
63
+ if (this.verbose) {
64
+ await logger.logToStderr(`Retrieving Device Id`);
65
+ }
66
+ memberId = (await entraDevice.getDeviceByDisplayName(args.options.deviceName)).id;
67
+ }
68
+ }
69
+ const requestOptions = {
70
+ url: `${this.resource}/v1.0/directory/administrativeUnits/${administrativeUnitId}/members/${memberId}/$ref`,
71
+ headers: {
72
+ accept: 'application/json;odata.metadata=none'
73
+ }
74
+ };
75
+ await request.delete(requestOptions);
76
+ }
77
+ catch (err) {
78
+ this.handleRejectedODataJsonPromise(err);
79
+ }
80
+ };
81
+ if (args.options.force) {
82
+ await removeAdministrativeUnitMember();
83
+ }
84
+ else {
85
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove member '${args.options.id || args.options.userName || args.options.groupName || args.options.deviceName}' from administrative unit '${args.options.administrativeUnitId || args.options.administrativeUnitName}'?` });
86
+ if (result) {
87
+ await removeAdministrativeUnitMember();
88
+ }
89
+ }
90
+ }
91
+ }
92
+ _EntraAdministrativeUnitMemberRemoveCommand_instances = new WeakSet(), _EntraAdministrativeUnitMemberRemoveCommand_initTelemetry = function _EntraAdministrativeUnitMemberRemoveCommand_initTelemetry() {
93
+ this.telemetry.push((args) => {
94
+ Object.assign(this.telemetryProperties, {
95
+ id: typeof args.options.id !== 'undefined',
96
+ userId: typeof args.options.userId !== 'undefined',
97
+ userName: typeof args.options.userName !== 'undefined',
98
+ groupId: typeof args.options.groupId !== 'undefined',
99
+ groupName: typeof args.options.groupName !== 'undefined',
100
+ deviceId: typeof args.options.deviceId !== 'undefined',
101
+ deviceName: typeof args.options.deviceName !== 'undefined',
102
+ administrativeUnitId: typeof args.options.administrativeUnitId !== 'undefined',
103
+ administrativeUnitName: typeof args.options.administrativeUnitName !== 'undefined',
104
+ force: !!args.options.force
105
+ });
106
+ });
107
+ }, _EntraAdministrativeUnitMemberRemoveCommand_initOptions = function _EntraAdministrativeUnitMemberRemoveCommand_initOptions() {
108
+ this.options.unshift({
109
+ option: '-i, --id [id]'
110
+ }, {
111
+ option: "--userId [userId]"
112
+ }, {
113
+ option: "--userName [userName]"
114
+ }, {
115
+ option: "--groupId [groupId]"
116
+ }, {
117
+ option: "--groupName [groupName]"
118
+ }, {
119
+ option: "--deviceId [deviceId]"
120
+ }, {
121
+ option: "--deviceName [deviceName]"
122
+ }, {
123
+ option: '--administrativeUnitId [administrativeUnitId]'
124
+ }, {
125
+ option: '--administrativeUnitName [administrativeUnitName]'
126
+ }, {
127
+ option: '-f, --force'
128
+ });
129
+ }, _EntraAdministrativeUnitMemberRemoveCommand_initValidators = function _EntraAdministrativeUnitMemberRemoveCommand_initValidators() {
130
+ this.validators.push(async (args) => {
131
+ if (args.options.administrativeUnitId && !validation.isValidGuid(args.options.administrativeUnitId)) {
132
+ return `${args.options.administrativeUnitId} is not a valid GUID`;
133
+ }
134
+ if (args.options.id && !validation.isValidGuid(args.options.id)) {
135
+ return `${args.options.id} is not a valid GUID`;
136
+ }
137
+ if (args.options.userId && !validation.isValidGuid(args.options.userId)) {
138
+ return `${args.options.userId} is not a valid GUID`;
139
+ }
140
+ if (args.options.groupId && !validation.isValidGuid(args.options.groupId)) {
141
+ return `${args.options.groupId} is not a valid GUID`;
142
+ }
143
+ if (args.options.deviceId && !validation.isValidGuid(args.options.deviceId)) {
144
+ return `${args.options.deviceId} is not a valid GUID`;
145
+ }
146
+ return true;
147
+ });
148
+ }, _EntraAdministrativeUnitMemberRemoveCommand_initOptionSets = function _EntraAdministrativeUnitMemberRemoveCommand_initOptionSets() {
149
+ this.optionSets.push({ options: ['administrativeUnitId', 'administrativeUnitName'] });
150
+ this.optionSets.push({ options: ['id', 'userId', 'userName', 'groupId', 'groupName', 'deviceId', 'deviceName'] });
151
+ };
152
+ export default new EntraAdministrativeUnitMemberRemoveCommand();
153
+ //# sourceMappingURL=administrativeunit-member-remove.js.map
@@ -4,7 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _EntraAdministrativeUnitRemoveCommand_instances, _EntraAdministrativeUnitRemoveCommand_initTelemetry, _EntraAdministrativeUnitRemoveCommand_initOptions, _EntraAdministrativeUnitRemoveCommand_initOptionSets, _EntraAdministrativeUnitRemoveCommand_initValidators, _EntraAdministrativeUnitRemoveCommand_initTypes;
7
- import { aadAdministrativeUnit } from '../../../../utils/aadAdministrativeUnit.js';
7
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
8
8
  import { validation } from "../../../../utils/validation.js";
9
9
  import request from "../../../../request.js";
10
10
  import GraphCommand from "../../../base/GraphCommand.js";
@@ -35,7 +35,7 @@ class EntraAdministrativeUnitRemoveCommand extends GraphCommand {
35
35
  try {
36
36
  let administrativeUnitId = args.options.id;
37
37
  if (args.options.displayName) {
38
- const administrativeUnit = await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.displayName);
38
+ const administrativeUnit = await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.displayName);
39
39
  administrativeUnitId = administrativeUnit.id;
40
40
  }
41
41
  const requestOptions = {
@@ -4,8 +4,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _EntraAdministrativeUnitRoleAssignmentAddCommand_instances, _EntraAdministrativeUnitRoleAssignmentAddCommand_initTelemetry, _EntraAdministrativeUnitRoleAssignmentAddCommand_initOptions, _EntraAdministrativeUnitRoleAssignmentAddCommand_initValidators, _EntraAdministrativeUnitRoleAssignmentAddCommand_initOptionSets;
7
- import { aadAdministrativeUnit } from '../../../../utils/aadAdministrativeUnit.js';
8
- import { aadUser } from '../../../../utils/aadUser.js';
7
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
8
+ import { entraUser } from '../../../../utils/entraUser.js';
9
9
  import { roleAssignment } from '../../../../utils/roleAssignment.js';
10
10
  import { roleDefinition } from '../../../../utils/roleDefinition.js';
11
11
  import { validation } from '../../../../utils/validation.js';
@@ -33,7 +33,7 @@ class EntraAdministrativeUnitRoleAssignmentAddCommand extends GraphCommand {
33
33
  if (this.verbose) {
34
34
  await logger.logToStderr(`Retrieving administrative unit by its name '${args.options.administrativeUnitName}'`);
35
35
  }
36
- administrativeUnitId = (await aadAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
36
+ administrativeUnitId = (await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(args.options.administrativeUnitName)).id;
37
37
  }
38
38
  if (args.options.roleDefinitionName) {
39
39
  if (this.verbose) {
@@ -45,7 +45,7 @@ class EntraAdministrativeUnitRoleAssignmentAddCommand extends GraphCommand {
45
45
  if (this.verbose) {
46
46
  await logger.logToStderr(`Retrieving user by UPN '${args.options.userName}'`);
47
47
  }
48
- userId = await aadUser.getUserIdByUpn(args.options.userName);
48
+ userId = await entraUser.getUserIdByUpn(args.options.userName);
49
49
  }
50
50
  const unifiedRoleAssignment = await roleAssignment.createRoleAssignmentWithAdministrativeUnitScope(roleDefinitionId, userId, administrativeUnitId);
51
51
  await logger.log(unifiedRoleAssignment);
@@ -21,7 +21,7 @@ class EntraAppAddCommand extends GraphCommand {
21
21
  return 'Creates new Entra app registration';
22
22
  }
23
23
  alias() {
24
- return [aadCommands.APP_ADD];
24
+ return [aadCommands.APP_ADD, commands.APPREGISTRATION_ADD];
25
25
  }
26
26
  constructor() {
27
27
  super();
@@ -20,7 +20,7 @@ class EntraAppGetCommand extends GraphCommand {
20
20
  return 'Gets an Entra app registration';
21
21
  }
22
22
  alias() {
23
- return [aadCommands.APP_GET];
23
+ return [aadCommands.APP_GET, commands.APPREGISTRATION_GET];
24
24
  }
25
25
  constructor() {
26
26
  super();
@@ -10,7 +10,7 @@ class EntraAppListCommand extends GraphCommand {
10
10
  return 'Retrieves a list of Entra app registrations';
11
11
  }
12
12
  alias() {
13
- return [aadCommands.APP_LIST];
13
+ return [aadCommands.APP_LIST, commands.APPREGISTRATION_LIST];
14
14
  }
15
15
  defaultProperties() {
16
16
  return ['appId', 'id', 'displayName', "signInAudience"];
@@ -23,7 +23,7 @@ class EntraAppPermissionAddCommand extends GraphCommand {
23
23
  return 'Adds the specified application and/or delegated permissions to a specified Entra ID (Azure AD) app';
24
24
  }
25
25
  alias() {
26
- return [aadCommands.APP_PERMISSION_ADD];
26
+ return [aadCommands.APP_PERMISSION_ADD, commands.APPREGISTRATION_PERMISSION_ADD];
27
27
  }
28
28
  constructor() {
29
29
  super();
@@ -67,13 +67,9 @@ class EntraAppPermissionAddCommand extends GraphCommand {
67
67
  }
68
68
  }
69
69
  async getAppObject(options) {
70
- let apps;
71
- if (options.appObjectId) {
72
- apps = await odata.getAllItems(`${this.resource}/v1.0/applications/${options.appObjectId}?$select=id,appId,requiredResourceAccess`);
73
- }
74
- else {
75
- apps = await odata.getAllItems(`${this.resource}/v1.0/applications(appId='${options.appId}')?$select=id,appId,requiredResourceAccess`);
76
- }
70
+ const apps = options.appObjectId
71
+ ? await odata.getAllItems(`${this.resource}/v1.0/applications?$filter=id eq '${options.appObjectId}'&$select=id,appId,requiredResourceAccess`)
72
+ : await odata.getAllItems(`${this.resource}/v1.0/applications?$filter=appId eq '${options.appId}'&$select=id,appId,requiredResourceAccess`);
77
73
  if (apps.length === 0) {
78
74
  throw `App with ${options.appObjectId ? 'object id' : 'client id'} ${options.appObjectId ? options.appObjectId : options.appId} not found in Entra ID (Azure AD)`;
79
75
  }