@pnp/cli-microsoft365 7.0.0-beta.68abdfc → 7.0.0-beta.7e7b4f8

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 (114) hide show
  1. package/dist/Command.js +1 -1
  2. package/dist/cli/Cli.js +23 -8
  3. package/dist/m365/aad/commands/user/user-get.js +7 -1
  4. package/dist/m365/booking/commands/business/business-get.js +14 -15
  5. package/dist/m365/cli/commands/config/config-set.js +1 -1
  6. package/dist/m365/pa/commands/app/app-owner-set.js +115 -0
  7. package/dist/m365/pa/commands/app/app-permission-list.js +104 -0
  8. package/dist/m365/pa/commands.js +2 -0
  9. package/dist/m365/planner/commands/bucket/bucket-add.js +14 -10
  10. package/dist/m365/planner/commands/bucket/bucket-get.js +25 -19
  11. package/dist/m365/planner/commands/bucket/bucket-list.js +14 -10
  12. package/dist/m365/planner/commands/bucket/bucket-remove.js +26 -20
  13. package/dist/m365/planner/commands/bucket/bucket-set.js +26 -28
  14. package/dist/m365/purview/commands/retentionevent/retentionevent-remove.js +19 -17
  15. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-remove.js +19 -17
  16. package/dist/m365/search/commands/externalconnection/externalconnection-remove.js +35 -34
  17. package/dist/m365/spfx/commands/project/project-externalize/rules/DynamicRule.js +59 -51
  18. package/dist/m365/spo/commands/file/file-list.js +3 -14
  19. package/dist/m365/spo/commands/folder/folder-remove.js +30 -28
  20. package/dist/m365/spo/commands/list/list-retentionlabel-ensure.js +0 -4
  21. package/dist/m365/spo/commands/list/list-retentionlabel-get.js +0 -4
  22. package/dist/m365/spo/commands/list/list-roleassignment-add.js +9 -47
  23. package/dist/m365/spo/commands/page/page-remove.js +33 -31
  24. package/dist/m365/spo/commands/roledefinition/roledefinition-remove.js +25 -23
  25. package/dist/m365/spo/commands/site/site-apppermission-add.js +3 -3
  26. package/dist/m365/spo/commands/site/site-commsite-enable.js +9 -18
  27. package/dist/m365/spo/commands/site/site-set.js +10 -2
  28. package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +13 -16
  29. package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-set.js +80 -2
  30. package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-remove.js +48 -48
  31. package/dist/m365/spo/commands/theme/theme-get.js +1 -2
  32. package/dist/m365/spo/commands.js +0 -2
  33. package/dist/m365/teams/commands/chat/chat-get.js +4 -4
  34. package/dist/m365/teams/commands/chat/chat-member-add.js +117 -0
  35. package/dist/m365/teams/commands/chat/chat-message-send.js +4 -4
  36. package/dist/m365/teams/commands/team/team-app-list.js +1 -1
  37. package/dist/m365/teams/commands.js +1 -0
  38. package/dist/utils/spo.js +74 -0
  39. package/docs/docs/_clisettings.mdx +1 -1
  40. package/docs/docs/cmd/_global.mdx +1 -1
  41. package/docs/docs/cmd/aad/user/user-get.mdx +118 -25
  42. package/docs/docs/cmd/pa/app/app-owner-set.mdx +60 -0
  43. package/docs/docs/cmd/pa/app/app-permission-list.mdx +132 -0
  44. package/docs/docs/cmd/planner/bucket/bucket-add.mdx +21 -4
  45. package/docs/docs/cmd/planner/bucket/bucket-get.mdx +22 -5
  46. package/docs/docs/cmd/planner/bucket/bucket-list.mdx +21 -4
  47. package/docs/docs/cmd/planner/bucket/bucket-remove.mdx +21 -4
  48. package/docs/docs/cmd/planner/bucket/bucket-set.mdx +22 -5
  49. package/docs/docs/cmd/spo/file/file-list.mdx +6 -10
  50. package/docs/docs/cmd/spo/list/list-retentionlabel-ensure.mdx +0 -6
  51. package/docs/docs/cmd/spo/list/list-retentionlabel-get.mdx +0 -6
  52. package/docs/docs/cmd/spo/site/site-add.mdx +35 -0
  53. package/docs/docs/cmd/spo/site/site-appcatalog-add.mdx +5 -1
  54. package/docs/docs/cmd/spo/site/site-appcatalog-list.mdx +14 -0
  55. package/docs/docs/cmd/spo/site/site-appcatalog-remove.mdx +4 -0
  56. package/docs/docs/cmd/spo/site/site-apppermission-add.mdx +68 -0
  57. package/docs/docs/cmd/spo/site/site-apppermission-get.mdx +55 -0
  58. package/docs/docs/cmd/spo/site/site-apppermission-list.mdx +55 -0
  59. package/docs/docs/cmd/spo/site/site-apppermission-remove.mdx +4 -0
  60. package/docs/docs/cmd/spo/site/site-apppermission-set.mdx +66 -0
  61. package/docs/docs/cmd/spo/site/site-chrome-set.mdx +4 -0
  62. package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +11 -1
  63. package/docs/docs/cmd/spo/site/site-ensure.mdx +70 -0
  64. package/docs/docs/cmd/spo/site/site-get.mdx +179 -0
  65. package/docs/docs/cmd/spo/site/site-groupify.mdx +54 -0
  66. package/docs/docs/cmd/spo/site/site-hubsite-connect.mdx +4 -0
  67. package/docs/docs/cmd/spo/site/site-hubsite-disconnect.mdx +4 -0
  68. package/docs/docs/cmd/spo/site/site-hubsite-theme-sync.mdx +5 -1
  69. package/docs/docs/cmd/spo/site/site-inplacerecordsmanagement-set.mdx +4 -0
  70. package/docs/docs/cmd/spo/site/site-list.mdx +303 -0
  71. package/docs/docs/cmd/spo/site/site-recyclebinitem-list.mdx +80 -0
  72. package/docs/docs/cmd/spo/site/site-recyclebinitem-restore.mdx +4 -0
  73. package/docs/docs/cmd/spo/site/site-remove.mdx +4 -0
  74. package/docs/docs/cmd/spo/site/site-rename.mdx +92 -0
  75. package/docs/docs/cmd/spo/site/site-set.mdx +13 -0
  76. package/docs/docs/cmd/spo/sitedesign/sitedesign-add.mdx +116 -0
  77. package/docs/docs/cmd/spo/sitedesign/sitedesign-apply.mdx +125 -0
  78. package/docs/docs/cmd/spo/sitedesign/sitedesign-get.mdx +117 -0
  79. package/docs/docs/cmd/spo/sitedesign/sitedesign-list.mdx +94 -0
  80. package/docs/docs/cmd/spo/sitedesign/sitedesign-remove.mdx +4 -0
  81. package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-grant.mdx +4 -0
  82. package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-list.mdx +54 -0
  83. package/docs/docs/cmd/spo/sitedesign/sitedesign-rights-revoke.mdx +4 -0
  84. package/docs/docs/cmd/spo/sitedesign/sitedesign-run-list.mdx +66 -0
  85. package/docs/docs/cmd/spo/sitedesign/sitedesign-run-status-get.mdx +65 -0
  86. package/docs/docs/cmd/spo/sitedesign/sitedesign-set.mdx +117 -0
  87. package/docs/docs/cmd/spo/sitedesign/sitedesign-task-get.mdx +61 -0
  88. package/docs/docs/cmd/spo/sitedesign/sitedesign-task-list.mdx +60 -0
  89. package/docs/docs/cmd/spo/sitedesign/sitedesign-task-remove.mdx +4 -0
  90. package/docs/docs/cmd/spo/sitescript/sitescript-add.mdx +75 -0
  91. package/docs/docs/cmd/spo/sitescript/sitescript-get.mdx +62 -0
  92. package/docs/docs/cmd/spo/sitescript/sitescript-list.mdx +60 -0
  93. package/docs/docs/cmd/spo/sitescript/sitescript-remove.mdx +4 -0
  94. package/docs/docs/cmd/spo/sitescript/sitescript-set.mdx +63 -0
  95. package/docs/docs/cmd/spo/storageentity/storageentity-get.mdx +53 -0
  96. package/docs/docs/cmd/spo/storageentity/storageentity-list.mdx +54 -0
  97. package/docs/docs/cmd/spo/storageentity/storageentity-remove.mdx +4 -0
  98. package/docs/docs/cmd/spo/storageentity/storageentity-set.mdx +4 -0
  99. package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.mdx +4 -0
  100. package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.mdx +35 -0
  101. package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-set.mdx +12 -3
  102. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.mdx +67 -0
  103. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.mdx +4 -0
  104. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-restore.mdx +50 -0
  105. package/docs/docs/cmd/spo/tenant/tenant-settings-list.mdx +729 -0
  106. package/docs/docs/cmd/spo/tenant/tenant-settings-set.mdx +5 -0
  107. package/docs/docs/cmd/spo/theme/theme-apply.mdx +35 -0
  108. package/docs/docs/cmd/spo/theme/theme-get.mdx +74 -0
  109. package/docs/docs/cmd/spo/theme/theme-list.mdx +52 -0
  110. package/docs/docs/cmd/spo/theme/theme-remove.mdx +4 -0
  111. package/docs/docs/cmd/spo/theme/theme-set.mdx +4 -0
  112. package/docs/docs/cmd/teams/chat/chat-member-add.mdx +66 -0
  113. package/npm-shrinkwrap.json +212 -212
  114. package/package.json +10 -10
package/dist/Command.js CHANGED
@@ -40,7 +40,7 @@ class CommandErrorWithOutput {
40
40
  exports.CommandErrorWithOutput = CommandErrorWithOutput;
41
41
  class Command {
42
42
  get allowedOutputs() {
43
- return ['csv', 'json', 'md', 'text'];
43
+ return ['csv', 'json', 'md', 'text', 'none'];
44
44
  }
45
45
  constructor() {
46
46
  // These functions must be defined with # so that they're truly private
package/dist/cli/Cli.js CHANGED
@@ -107,7 +107,9 @@ class Cli {
107
107
  showHelp ||
108
108
  parsedArgs.h ||
109
109
  parsedArgs.help) {
110
- this.printHelp(this.getHelpMode(parsedArgs));
110
+ if (parsedArgs.output !== 'none') {
111
+ this.printHelp(this.getHelpMode(parsedArgs));
112
+ }
111
113
  return Promise.resolve();
112
114
  }
113
115
  const optionsWithoutShorts = Cli.removeShortOptions(this.optionsFromArgs);
@@ -144,11 +146,21 @@ class Cli {
144
146
  return __awaiter(this, void 0, void 0, function* () {
145
147
  const logger = {
146
148
  log: (message) => {
147
- const output = Cli.formatOutput(command, message, args.options);
148
- Cli.log(output);
149
+ if (args.options.output !== 'none') {
150
+ const output = Cli.formatOutput(command, message, args.options);
151
+ Cli.log(output);
152
+ }
153
+ },
154
+ logRaw: (message) => {
155
+ if (args.options.output !== 'none') {
156
+ Cli.log(message);
157
+ }
149
158
  },
150
- logRaw: (message) => Cli.log(message),
151
- logToStderr: (message) => Cli.error(message)
159
+ logToStderr: (message) => {
160
+ if (args.options.output !== 'none') {
161
+ Cli.error(message);
162
+ }
163
+ }
152
164
  };
153
165
  if (args.options.debug) {
154
166
  logger.logToStderr(`Executing command ${command.name} with options ${JSON.stringify(args)}`);
@@ -158,7 +170,7 @@ class Cli {
158
170
  const cli = Cli.getInstance();
159
171
  const parentCommandName = cli.currentCommandName;
160
172
  cli.currentCommandName = command.getCommandName(cli.currentCommandName);
161
- const showSpinner = cli.getSettingWithDefaultValue(settingsNames_1.settingsNames.showSpinner, true);
173
+ const showSpinner = cli.getSettingWithDefaultValue(settingsNames_1.settingsNames.showSpinner, true) && args.options.output !== 'none';
162
174
  // don't show spinner if running tests
163
175
  /* c8 ignore next 3 */
164
176
  if (showSpinner && typeof global.it === 'undefined') {
@@ -207,7 +219,7 @@ class Cli {
207
219
  logErr.push(message);
208
220
  }
209
221
  };
210
- if (args.options.debug) {
222
+ if (args.options.debug && args.options.output !== 'none') {
211
223
  const message = `Executing command ${command.name} with options ${JSON.stringify(args)}`;
212
224
  if (listener && listener.stderr) {
213
225
  listener.stderr(message);
@@ -730,8 +742,11 @@ class Cli {
730
742
  Cli.log();
731
743
  }
732
744
  closeWithError(error, args, showHelpIfEnabled = false) {
733
- const chalk = require('chalk');
734
745
  let exitCode = 1;
746
+ if (args.options.output === 'none') {
747
+ return process.exit(exitCode);
748
+ }
749
+ const chalk = require('chalk');
735
750
  let errorMessage = error instanceof Command_1.CommandError ? error.message : error;
736
751
  if ((!args.options.output || args.options.output === 'json') &&
737
752
  !this.getSettingWithDefaultValue(settingsNames_1.settingsNames.printErrorsAsPlainText, true)) {
@@ -50,6 +50,9 @@ class AadUserGetCommand extends GraphCommand_1.default {
50
50
  else if (args.options.email) {
51
51
  requestUrl += `?$filter=mail eq '${formatting_1.formatting.encodeQueryParameter(args.options.email)}'${properties}`;
52
52
  }
53
+ if (args.options.withManager) {
54
+ requestUrl += '&$expand=manager($select=displayName,userPrincipalName,id,mail)';
55
+ }
53
56
  const requestOptions = {
54
57
  url: requestUrl,
55
58
  headers: {
@@ -82,7 +85,8 @@ _AadUserGetCommand_instances = new WeakSet(), _AadUserGetCommand_initTelemetry =
82
85
  id: typeof args.options.id !== 'undefined',
83
86
  userName: typeof args.options.userName !== 'undefined',
84
87
  email: typeof args.options.email !== 'undefined',
85
- properties: args.options.properties
88
+ properties: args.options.properties,
89
+ withManager: typeof args.options.withManager !== 'undefined'
86
90
  });
87
91
  });
88
92
  }, _AadUserGetCommand_initOptions = function _AadUserGetCommand_initOptions() {
@@ -94,6 +98,8 @@ _AadUserGetCommand_instances = new WeakSet(), _AadUserGetCommand_initTelemetry =
94
98
  option: '--email [email]'
95
99
  }, {
96
100
  option: '-p, --properties [properties]'
101
+ }, {
102
+ option: '--withManager'
97
103
  });
98
104
  }, _AadUserGetCommand_initValidators = function _AadUserGetCommand_initValidators() {
99
105
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
@@ -56,26 +56,25 @@ class BookingBusinessGetCommand extends GraphCommand_1.default {
56
56
  });
57
57
  }
58
58
  getBusinessId(options) {
59
- if (options.id) {
60
- return Promise.resolve(options.id);
61
- }
62
- const requestOptions = {
63
- url: `${this.resource}/v1.0/solutions/bookingBusinesses`,
64
- headers: {
65
- accept: 'application/json;odata.metadata=none'
66
- },
67
- responseType: 'json'
68
- };
69
- return request_1.default
70
- .get(requestOptions)
71
- .then((response) => {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ if (options.id) {
61
+ return options.id;
62
+ }
63
+ const requestOptions = {
64
+ url: `${this.resource}/v1.0/solutions/bookingBusinesses`,
65
+ headers: {
66
+ accept: 'application/json;odata.metadata=none'
67
+ },
68
+ responseType: 'json'
69
+ };
70
+ const response = yield request_1.default.get(requestOptions);
72
71
  const name = options.name;
73
72
  const bookingBusinesses = response.value.filter(val => { var _a; return ((_a = val.displayName) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === name.toLocaleLowerCase(); });
74
73
  if (!bookingBusinesses.length) {
75
- return Promise.reject(`The specified business with name ${options.name} does not exist.`);
74
+ throw `The specified business with name ${options.name} does not exist.`;
76
75
  }
77
76
  if (bookingBusinesses.length > 1) {
78
- return Promise.reject(`Multiple businesses with name ${options.name} found. Please disambiguate: ${bookingBusinesses.map(x => x.id).join(', ')}`);
77
+ throw `Multiple businesses with name ${options.name} found. Please disambiguate: ${bookingBusinesses.map(x => x.id).join(', ')}`;
79
78
  }
80
79
  return bookingBusinesses[0].id;
81
80
  });
@@ -73,7 +73,7 @@ _CliConfigSetCommand_instances = new WeakSet(), _CliConfigSetCommand_initTelemet
73
73
  if (CliConfigSetCommand.optionNames.indexOf(args.options.key) < 0) {
74
74
  return `${args.options.key} is not a valid setting. Allowed values: ${CliConfigSetCommand.optionNames.join(', ')}`;
75
75
  }
76
- const allowedOutputs = ['text', 'json', 'csv', 'md'];
76
+ const allowedOutputs = ['text', 'json', 'csv', 'md', 'none'];
77
77
  if (args.options.key === settingsNames_1.settingsNames.output &&
78
78
  allowedOutputs.indexOf(args.options.value) === -1) {
79
79
  return `${args.options.value} is not a valid value for the option ${args.options.key}. Allowed values: ${allowedOutputs.join(', ')}`;
@@ -0,0 +1,115 @@
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 _PaAppOwnerSetCommand_instances, _PaAppOwnerSetCommand_initTelemetry, _PaAppOwnerSetCommand_initOptions, _PaAppOwnerSetCommand_initValidators, _PaAppOwnerSetCommand_initOptionSets;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const request_1 = require("../../../../request");
19
+ const aadUser_1 = require("../../../../utils/aadUser");
20
+ const validation_1 = require("../../../../utils/validation");
21
+ const PowerAppsCommand_1 = require("../../../base/PowerAppsCommand");
22
+ const commands_1 = require("../../commands");
23
+ class PaAppOwnerSetCommand extends PowerAppsCommand_1.default {
24
+ get name() {
25
+ return commands_1.default.APP_OWNER_SET;
26
+ }
27
+ get description() {
28
+ return 'Sets a new owner for a Power Apps app';
29
+ }
30
+ constructor() {
31
+ super();
32
+ _PaAppOwnerSetCommand_instances.add(this);
33
+ __classPrivateFieldGet(this, _PaAppOwnerSetCommand_instances, "m", _PaAppOwnerSetCommand_initTelemetry).call(this);
34
+ __classPrivateFieldGet(this, _PaAppOwnerSetCommand_instances, "m", _PaAppOwnerSetCommand_initOptions).call(this);
35
+ __classPrivateFieldGet(this, _PaAppOwnerSetCommand_instances, "m", _PaAppOwnerSetCommand_initValidators).call(this);
36
+ __classPrivateFieldGet(this, _PaAppOwnerSetCommand_instances, "m", _PaAppOwnerSetCommand_initOptionSets).call(this);
37
+ }
38
+ commandAction(logger, args) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ if (this.verbose) {
41
+ logger.logToStderr(`Setting new owner ${args.options.userId || args.options.userName} for Power Apps app ${args.options.appName}...`);
42
+ }
43
+ try {
44
+ const userId = yield this.getUserId(args.options);
45
+ const requestOptions = {
46
+ url: `${this.resource}/providers/Microsoft.PowerApps/scopes/admin/environments/${args.options.environmentName}/apps/${args.options.appName}/modifyAppOwner?api-version=2022-11-01`,
47
+ headers: {
48
+ accept: 'application/json',
49
+ 'Content-Type': 'application/json'
50
+ },
51
+ responseType: 'json',
52
+ data: {
53
+ roleForOldAppOwner: args.options.roleForOldAppOwner,
54
+ newAppOwner: userId
55
+ }
56
+ };
57
+ yield request_1.default.post(requestOptions);
58
+ }
59
+ catch (err) {
60
+ this.handleRejectedODataJsonPromise(err);
61
+ }
62
+ });
63
+ }
64
+ getUserId(options) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ if (options.userId) {
67
+ return options.userId;
68
+ }
69
+ return aadUser_1.aadUser.getUserIdByUpn(options.userName);
70
+ });
71
+ }
72
+ }
73
+ _PaAppOwnerSetCommand_instances = new WeakSet(), _PaAppOwnerSetCommand_initTelemetry = function _PaAppOwnerSetCommand_initTelemetry() {
74
+ this.telemetry.push((args) => {
75
+ Object.assign(this.telemetryProperties, {
76
+ userId: typeof args.options.userId !== 'undefined',
77
+ userName: typeof args.options.userName !== 'undefined',
78
+ roleForOldAppOwner: typeof args.options.roleForOldAppOwner !== 'undefined'
79
+ });
80
+ });
81
+ }, _PaAppOwnerSetCommand_initOptions = function _PaAppOwnerSetCommand_initOptions() {
82
+ this.options.unshift({
83
+ option: '-e, --environmentName <environmentName>'
84
+ }, {
85
+ option: '--appName <appName>'
86
+ }, {
87
+ option: '--userId [userId]'
88
+ }, {
89
+ option: '--userName [userName]'
90
+ }, {
91
+ option: '--roleForOldAppOwner [roleForOldAppOwner]',
92
+ autocomplete: PaAppOwnerSetCommand.roleForOldAppOwner
93
+ });
94
+ }, _PaAppOwnerSetCommand_initValidators = function _PaAppOwnerSetCommand_initValidators() {
95
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
96
+ if (!validation_1.validation.isValidGuid(args.options.appName)) {
97
+ return `${args.options.appName} is not a valid GUID for appName`;
98
+ }
99
+ if (args.options.userId && !validation_1.validation.isValidGuid(args.options.userId)) {
100
+ return `${args.options.userId} is not a valid GUID for userId`;
101
+ }
102
+ if (args.options.userName && !validation_1.validation.isValidUserPrincipalName(args.options.userName)) {
103
+ return `${args.options.userName} is not a valid UPN for userName`;
104
+ }
105
+ if (args.options.roleForOldAppOwner && PaAppOwnerSetCommand.roleForOldAppOwner.indexOf(args.options.roleForOldAppOwner) < 0) {
106
+ return `${args.options.roleForOldAppOwner} is not a valid roleForOldAppOwner. Allowed values are: ${PaAppOwnerSetCommand.roleForOldAppOwner.join(', ')}`;
107
+ }
108
+ return true;
109
+ }));
110
+ }, _PaAppOwnerSetCommand_initOptionSets = function _PaAppOwnerSetCommand_initOptionSets() {
111
+ this.optionSets.push({ options: ['userId', 'userName'] });
112
+ };
113
+ PaAppOwnerSetCommand.roleForOldAppOwner = ['CanView', 'CanEdit'];
114
+ module.exports = new PaAppOwnerSetCommand();
115
+ //# sourceMappingURL=app-owner-set.js.map
@@ -0,0 +1,104 @@
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 _PaAppPermissionListCommand_instances, _PaAppPermissionListCommand_initTelemetry, _PaAppPermissionListCommand_initOptions, _PaAppPermissionListCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const formatting_1 = require("../../../../utils/formatting");
19
+ const odata_1 = require("../../../../utils/odata");
20
+ const validation_1 = require("../../../../utils/validation");
21
+ const PowerAppsCommand_1 = require("../../../base/PowerAppsCommand");
22
+ const commands_1 = require("../../commands");
23
+ class PaAppPermissionListCommand extends PowerAppsCommand_1.default {
24
+ get name() {
25
+ return commands_1.default.APP_PERMISSION_LIST;
26
+ }
27
+ get description() {
28
+ return 'Lists all permissions of a Power Apps app';
29
+ }
30
+ defaultProperties() {
31
+ return ['roleName', 'principalId', 'principalType'];
32
+ }
33
+ constructor() {
34
+ super();
35
+ _PaAppPermissionListCommand_instances.add(this);
36
+ this.allowedRoleNames = ['Owner', 'CanEdit', 'CanView'];
37
+ __classPrivateFieldGet(this, _PaAppPermissionListCommand_instances, "m", _PaAppPermissionListCommand_initTelemetry).call(this);
38
+ __classPrivateFieldGet(this, _PaAppPermissionListCommand_instances, "m", _PaAppPermissionListCommand_initOptions).call(this);
39
+ __classPrivateFieldGet(this, _PaAppPermissionListCommand_instances, "m", _PaAppPermissionListCommand_initValidators).call(this);
40
+ }
41
+ commandAction(logger, args) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ if (this.verbose) {
44
+ logger.logToStderr(`Retrieving permissions for app ${args.options.appName}${args.options.roleName !== undefined ? ` with role name ${args.options.roleName}` : ''}`);
45
+ }
46
+ const url = `${this.resource}/providers/Microsoft.PowerApps${args.options.asAdmin ? '/scopes/admin' : ''}${args.options.environmentName ? '/environments/' + formatting_1.formatting.encodeQueryParameter(args.options.environmentName) : ''}/apps/${args.options.appName}/permissions?api-version=2022-11-01`;
47
+ try {
48
+ let permissions = yield odata_1.odata.getAllItems(url);
49
+ if (args.options.roleName) {
50
+ permissions = permissions.filter(permission => permission.properties.roleName === args.options.roleName);
51
+ }
52
+ if (args.options.output !== 'json') {
53
+ permissions.forEach(permission => {
54
+ permission.roleName = permission.properties.roleName;
55
+ permission.principalId = permission.properties.principal.id;
56
+ permission.principalType = permission.properties.principal.type;
57
+ });
58
+ }
59
+ logger.log(permissions);
60
+ }
61
+ catch (err) {
62
+ this.handleRejectedODataJsonPromise(err);
63
+ }
64
+ });
65
+ }
66
+ }
67
+ _PaAppPermissionListCommand_instances = new WeakSet(), _PaAppPermissionListCommand_initTelemetry = function _PaAppPermissionListCommand_initTelemetry() {
68
+ this.telemetry.push((args) => {
69
+ Object.assign(this.telemetryProperties, {
70
+ asAdmin: !!args.options.asAdmin,
71
+ environmentName: typeof args.options.environmentName !== 'undefined',
72
+ roleName: typeof args.options.roleName !== 'undefined'
73
+ });
74
+ });
75
+ }, _PaAppPermissionListCommand_initOptions = function _PaAppPermissionListCommand_initOptions() {
76
+ this.options.unshift({
77
+ option: '--appName <appName>'
78
+ }, {
79
+ option: '--asAdmin'
80
+ }, {
81
+ option: '-e, --environmentName [environmentName]'
82
+ }, {
83
+ option: '--roleName [roleName]',
84
+ autocomplete: this.allowedRoleNames
85
+ });
86
+ }, _PaAppPermissionListCommand_initValidators = function _PaAppPermissionListCommand_initValidators() {
87
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
88
+ if (!validation_1.validation.isValidGuid(args.options.appName)) {
89
+ return `${args.options.appName} is not a valid GUID for appName.`;
90
+ }
91
+ if (args.options.roleName && !this.allowedRoleNames.includes(args.options.roleName)) {
92
+ return `${args.options.roleName} is not a valid roleName. Allowed values are ${this.allowedRoleNames.join(',')}`;
93
+ }
94
+ if (args.options.asAdmin && !args.options.environmentName) {
95
+ return 'Specifying the environmentName is required when using asAdmin';
96
+ }
97
+ if (!args.options.asAdmin && args.options.environmentName) {
98
+ return 'Specifying environmentName is only allowed when using asAdmin';
99
+ }
100
+ return true;
101
+ }));
102
+ };
103
+ module.exports = new PaAppPermissionListCommand();
104
+ //# sourceMappingURL=app-permission-list.js.map
@@ -7,6 +7,8 @@ exports.default = {
7
7
  APP_LIST: `${prefix} app list`,
8
8
  APP_REMOVE: `${prefix} app remove`,
9
9
  APP_CONSENT_SET: `${prefix} app consent set`,
10
+ APP_OWNER_SET: `${prefix} app owner set`,
11
+ APP_PERMISSION_LIST: `${prefix} app permission list`,
10
12
  CONNECTOR_EXPORT: `${prefix} connector export`,
11
13
  CONNECTOR_LIST: `${prefix} connector list`,
12
14
  ENVIRONMENT_GET: `${prefix} environment get`,
@@ -68,9 +68,13 @@ class PlannerBucketAddCommand extends GraphCommand_1.default {
68
68
  if (args.options.planId) {
69
69
  return args.options.planId;
70
70
  }
71
- const groupId = yield this.getGroupId(args);
72
- const plan = yield planner_1.planner.getPlanByTitle(args.options.planTitle, groupId);
73
- return plan.id;
71
+ if (args.options.planTitle) {
72
+ const groupId = yield this.getGroupId(args);
73
+ const plan = yield planner_1.planner.getPlanByTitle(args.options.planTitle, groupId);
74
+ return plan.id;
75
+ }
76
+ const plans = yield planner_1.planner.getPlansByRosterId(args.options.rosterId);
77
+ return plans[0].id;
74
78
  });
75
79
  }
76
80
  getGroupId(args) {
@@ -88,6 +92,7 @@ _PlannerBucketAddCommand_instances = new WeakSet(), _PlannerBucketAddCommand_ini
88
92
  Object.assign(this.telemetryProperties, {
89
93
  planId: typeof args.options.planId !== 'undefined',
90
94
  planTitle: typeof args.options.planTitle !== 'undefined',
95
+ rosterId: typeof args.options.rosterId !== 'undefined',
91
96
  ownerGroupId: typeof args.options.ownerGroupId !== 'undefined',
92
97
  ownerGroupName: typeof args.options.ownerGroupName !== 'undefined',
93
98
  orderHint: typeof args.options.orderHint !== 'undefined'
@@ -100,6 +105,8 @@ _PlannerBucketAddCommand_instances = new WeakSet(), _PlannerBucketAddCommand_ini
100
105
  option: "--planId [planId]"
101
106
  }, {
102
107
  option: "--planTitle [planTitle]"
108
+ }, {
109
+ option: '--rosterId [rosterId]'
103
110
  }, {
104
111
  option: "--ownerGroupId [ownerGroupId]"
105
112
  }, {
@@ -109,19 +116,16 @@ _PlannerBucketAddCommand_instances = new WeakSet(), _PlannerBucketAddCommand_ini
109
116
  });
110
117
  }, _PlannerBucketAddCommand_initValidators = function _PlannerBucketAddCommand_initValidators() {
111
118
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
112
- if (args.options.planTitle && !args.options.ownerGroupId && !args.options.ownerGroupName) {
113
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle';
114
- }
115
- if (args.options.planTitle && args.options.ownerGroupId && args.options.ownerGroupName) {
116
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle but not both';
117
- }
118
119
  if (args.options.ownerGroupId && !validation_1.validation.isValidGuid(args.options.ownerGroupId)) {
119
120
  return `${args.options.ownerGroupId} is not a valid GUID`;
120
121
  }
121
122
  return true;
122
123
  }));
123
124
  }, _PlannerBucketAddCommand_initOptionSets = function _PlannerBucketAddCommand_initOptionSets() {
124
- this.optionSets.push({ options: ['planId', 'planTitle'] });
125
+ this.optionSets.push({ options: ['planId', 'planTitle', 'rosterId'] }, {
126
+ options: ['ownerGroupId', 'ownerGroupName'],
127
+ runsWhen: (args) => args.options.planTitle !== undefined
128
+ });
125
129
  };
126
130
  module.exports = new PlannerBucketAddCommand();
127
131
  //# sourceMappingURL=bucket-add.js.map
@@ -75,13 +75,17 @@ class PlannerBucketGetCommand extends GraphCommand_1.default {
75
75
  }
76
76
  getPlanId(args) {
77
77
  return __awaiter(this, void 0, void 0, function* () {
78
- const { planId, planTitle } = args.options;
78
+ const { planId, planTitle, rosterId } = args.options;
79
79
  if (planId) {
80
80
  return planId;
81
81
  }
82
- const groupId = yield this.getGroupId(args);
83
- const plan = yield planner_1.planner.getPlanByTitle(planTitle, groupId);
84
- return plan.id;
82
+ if (planTitle) {
83
+ const groupId = yield this.getGroupId(args);
84
+ const plan = yield planner_1.planner.getPlanByTitle(planTitle, groupId);
85
+ return plan.id;
86
+ }
87
+ const plans = yield planner_1.planner.getPlansByRosterId(rosterId);
88
+ return plans[0].id;
85
89
  });
86
90
  }
87
91
  getBucketById(id) {
@@ -114,6 +118,7 @@ _PlannerBucketGetCommand_instances = new WeakSet(), _PlannerBucketGetCommand_ini
114
118
  name: typeof args.options.name !== 'undefined',
115
119
  planId: typeof args.options.planId !== 'undefined',
116
120
  planTitle: typeof args.options.planTitle !== 'undefined',
121
+ rosterId: typeof args.options.rosterId !== 'undefined',
117
122
  ownerGroupId: typeof args.options.ownerGroupId !== 'undefined',
118
123
  ownerGroupName: typeof args.options.ownerGroupName !== 'undefined'
119
124
  });
@@ -127,6 +132,8 @@ _PlannerBucketGetCommand_instances = new WeakSet(), _PlannerBucketGetCommand_ini
127
132
  option: '--planId [planId]'
128
133
  }, {
129
134
  option: "--planTitle [planTitle]"
135
+ }, {
136
+ option: '--rosterId [rosterId]'
130
137
  }, {
131
138
  option: '--ownerGroupId [ownerGroupId]'
132
139
  }, {
@@ -135,24 +142,12 @@ _PlannerBucketGetCommand_instances = new WeakSet(), _PlannerBucketGetCommand_ini
135
142
  }, _PlannerBucketGetCommand_initValidators = function _PlannerBucketGetCommand_initValidators() {
136
143
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
137
144
  if (args.options.id) {
138
- if (args.options.planId || args.options.planTitle || args.options.ownerGroupId || args.options.ownerGroupName) {
139
- return 'Don\'t specify planId, planTitle, ownerGroupId or ownerGroupName when using id';
145
+ if (args.options.planId || args.options.planTitle || args.options.rosterId || args.options.ownerGroupId || args.options.ownerGroupName) {
146
+ return 'Don\'t specify planId, planTitle, rosterId, ownerGroupId or ownerGroupName when using id';
140
147
  }
141
148
  }
142
149
  if (args.options.name) {
143
- if (!args.options.planId && !args.options.planTitle) {
144
- return 'Specify either planId or planTitle when using name';
145
- }
146
- if (args.options.planId && args.options.planTitle) {
147
- return 'Specify either planId or planTitle when using name but not both';
148
- }
149
150
  if (args.options.planTitle) {
150
- if (!args.options.ownerGroupId && !args.options.ownerGroupName) {
151
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle';
152
- }
153
- if (args.options.ownerGroupId && args.options.ownerGroupName) {
154
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle but not both';
155
- }
156
151
  if (args.options.ownerGroupId && !validation_1.validation.isValidGuid(args.options.ownerGroupId)) {
157
152
  return `${args.options.ownerGroupId} is not a valid GUID`;
158
153
  }
@@ -162,11 +157,22 @@ _PlannerBucketGetCommand_instances = new WeakSet(), _PlannerBucketGetCommand_ini
162
157
  return 'Don\'t specify ownerGroupId or ownerGroupName when using planId';
163
158
  }
164
159
  }
160
+ if (args.options.rosterId) {
161
+ if (args.options.ownerGroupId || args.options.ownerGroupName) {
162
+ return 'Don\'t specify ownerGroupId or ownerGroupName when using rosterId';
163
+ }
164
+ }
165
165
  }
166
166
  return true;
167
167
  }));
168
168
  }, _PlannerBucketGetCommand_initOptionSets = function _PlannerBucketGetCommand_initOptionSets() {
169
- this.optionSets.push({ options: ['id', 'name'] });
169
+ this.optionSets.push({ options: ['id', 'name'] }, {
170
+ options: ['planId', 'planTitle', 'rosterId'],
171
+ runsWhen: (args) => args.options.name !== undefined
172
+ }, {
173
+ options: ['ownerGroupId', 'ownerGroupName'],
174
+ runsWhen: (args) => args.options.planTitle !== undefined
175
+ });
170
176
  };
171
177
  module.exports = new PlannerBucketGetCommand();
172
178
  //# sourceMappingURL=bucket-get.js.map
@@ -56,9 +56,13 @@ class PlannerBucketListCommand extends GraphCommand_1.default {
56
56
  if (args.options.planId) {
57
57
  return args.options.planId;
58
58
  }
59
- const groupId = yield this.getGroupId(args);
60
- const plan = yield planner_1.planner.getPlanByTitle(args.options.planTitle, groupId);
61
- return plan.id;
59
+ if (args.options.planTitle) {
60
+ const groupId = yield this.getGroupId(args);
61
+ const plan = yield planner_1.planner.getPlanByTitle(args.options.planTitle, groupId);
62
+ return plan.id;
63
+ }
64
+ const plans = yield planner_1.planner.getPlansByRosterId(args.options.rosterId);
65
+ return plans[0].id;
62
66
  });
63
67
  }
64
68
  getGroupId(args) {
@@ -76,6 +80,7 @@ _PlannerBucketListCommand_instances = new WeakSet(), _PlannerBucketListCommand_i
76
80
  Object.assign(this.telemetryProperties, {
77
81
  planId: typeof args.options.planId !== 'undefined',
78
82
  planTitle: typeof args.options.planTitle !== 'undefined',
83
+ rosterId: typeof args.options.rosterId !== 'undefined',
79
84
  ownerGroupId: typeof args.options.ownerGroupId !== 'undefined',
80
85
  ownerGroupName: typeof args.options.ownerGroupName !== 'undefined'
81
86
  });
@@ -85,6 +90,8 @@ _PlannerBucketListCommand_instances = new WeakSet(), _PlannerBucketListCommand_i
85
90
  option: '--planId [planId]'
86
91
  }, {
87
92
  option: "--planTitle [planTitle]"
93
+ }, {
94
+ option: '--rosterId [rosterId]'
88
95
  }, {
89
96
  option: '--ownerGroupId [ownerGroupId]'
90
97
  }, {
@@ -92,19 +99,16 @@ _PlannerBucketListCommand_instances = new WeakSet(), _PlannerBucketListCommand_i
92
99
  });
93
100
  }, _PlannerBucketListCommand_initValidators = function _PlannerBucketListCommand_initValidators() {
94
101
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
95
- if (args.options.planTitle && !args.options.ownerGroupId && !args.options.ownerGroupName) {
96
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle';
97
- }
98
- if (args.options.planTitle && args.options.ownerGroupId && args.options.ownerGroupName) {
99
- return 'Specify either ownerGroupId or ownerGroupName when using planTitle but not both';
100
- }
101
102
  if (args.options.ownerGroupId && !validation_1.validation.isValidGuid(args.options.ownerGroupId)) {
102
103
  return `${args.options.ownerGroupId} is not a valid GUID`;
103
104
  }
104
105
  return true;
105
106
  }));
106
107
  }, _PlannerBucketListCommand_initOptionSets = function _PlannerBucketListCommand_initOptionSets() {
107
- this.optionSets.push({ options: ['planId', 'planTitle'] });
108
+ this.optionSets.push({ options: ['planId', 'planTitle', 'rosterId'] }, {
109
+ options: ['ownerGroupId', 'ownerGroupName'],
110
+ runsWhen: (args) => args.options.planTitle !== undefined
111
+ });
108
112
  };
109
113
  module.exports = new PlannerBucketListCommand();
110
114
  //# sourceMappingURL=bucket-list.js.map