@pnp/cli-microsoft365 10.6.0-beta.36bb898 → 10.6.0-beta.3facb8f

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 (34) hide show
  1. package/.eslintrc.cjs +3 -1
  2. package/allCommands.json +1 -1
  3. package/allCommandsFull.json +1 -1
  4. package/dist/Command.js +4 -26
  5. package/dist/config.js +1 -0
  6. package/dist/m365/adaptivecard/commands/adaptivecard-send.js +2 -1
  7. package/dist/m365/base/SpoCommand.js +2 -1
  8. package/dist/m365/commands/request.js +3 -12
  9. package/dist/m365/commands/setup.js +2 -0
  10. package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +10 -5
  11. package/dist/m365/entra/commands/app/app-add.js +5 -0
  12. package/dist/m365/entra/commands/app/app-set.js +23 -0
  13. package/dist/m365/entra/commands/group/group-add.js +1 -0
  14. package/dist/m365/entra/commands/group/group-set.js +12 -6
  15. package/dist/m365/entra/commands/user/user-add.js +1 -0
  16. package/dist/m365/entra/commands/user/user-list.js +2 -1
  17. package/dist/m365/external/commands/item/item-add.js +2 -1
  18. package/dist/m365/graph/commands/openextension/openextension-add.js +73 -0
  19. package/dist/m365/graph/commands.js +1 -0
  20. package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +12 -47
  21. package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +13 -31
  22. package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +12 -43
  23. package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +8 -27
  24. package/dist/m365/spo/commands/web/web-roleassignment-add.js +22 -47
  25. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +17 -32
  26. package/dist/m365/tenant/commands/people/people-profilecardproperty-add.js +4 -3
  27. package/dist/m365/tenant/commands/people/people-profilecardproperty-set.js +4 -3
  28. package/dist/m365/todo/commands/list/list-remove.js +1 -1
  29. package/dist/utils/entraApp.js +3 -1
  30. package/dist/utils/optionsUtils.js +28 -0
  31. package/dist/utils/spo.js +32 -3
  32. package/docs/docs/cmd/graph/directoryextension/directoryextension-get.mdx +2 -3
  33. package/docs/docs/cmd/graph/openextension/openextension-add.mdx +120 -0
  34. package/package.json +1 -1
package/dist/Command.js CHANGED
@@ -15,6 +15,7 @@ import { accessToken } from './utils/accessToken.js';
15
15
  import { md } from './utils/md.js';
16
16
  import { prompt } from './utils/prompt.js';
17
17
  import { zod } from './utils/zod.js';
18
+ import { optionsUtils } from './utils/optionsUtils.js';
18
19
  export class CommandError {
19
20
  constructor(message, code) {
20
21
  this.message = message;
@@ -337,39 +338,16 @@ class Command {
337
338
  }
338
339
  await telemetry.trackEvent(this.getUsedCommandName(), this.getTelemetryProperties(args));
339
340
  }
340
- getUnknownOptions(options) {
341
- const unknownOptions = JSON.parse(JSON.stringify(options));
342
- // remove minimist catch-all option
343
- delete unknownOptions._;
344
- const knownOptions = this.options;
345
- const longOptionRegex = /--([^\s]+)/;
346
- const shortOptionRegex = /-([a-z])\b/;
347
- knownOptions.forEach(o => {
348
- const longOptionName = longOptionRegex.exec(o.option)[1];
349
- delete unknownOptions[longOptionName];
350
- // short names are optional so we need to check if the current command has
351
- // one before continuing
352
- const shortOptionMatch = shortOptionRegex.exec(o.option);
353
- if (shortOptionMatch) {
354
- const shortOptionName = shortOptionMatch[1];
355
- delete unknownOptions[shortOptionName];
356
- }
357
- });
358
- return unknownOptions;
359
- }
360
341
  trackUnknownOptions(telemetryProps, options) {
361
- const unknownOptions = this.getUnknownOptions(options);
342
+ const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
362
343
  const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
363
344
  unknownOptionsNames.forEach(o => {
364
345
  telemetryProps[o] = true;
365
346
  });
366
347
  }
367
348
  addUnknownOptionsToPayload(payload, options) {
368
- const unknownOptions = this.getUnknownOptions(options);
369
- const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
370
- unknownOptionsNames.forEach(o => {
371
- payload[o] = unknownOptions[o];
372
- });
349
+ const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
350
+ optionsUtils.addUnknownOptionsToPayload(payload, unknownOptions);
373
351
  }
374
352
  loadValuesFromAccessToken(args) {
375
353
  if (!auth.connection.accessTokens[auth.defaultResource]) {
package/dist/config.js CHANGED
@@ -29,6 +29,7 @@ export default {
29
29
  'https://graph.microsoft.com/OnlineMeetingArtifact.Read.All',
30
30
  'https://graph.microsoft.com/OnlineMeetings.ReadWrite',
31
31
  'https://graph.microsoft.com/OnlineMeetingTranscript.Read.All',
32
+ 'https://graph.microsoft.com/Organization.ReadWrite.All',
32
33
  'https://graph.microsoft.com/PeopleSettings.ReadWrite.All',
33
34
  'https://graph.microsoft.com/Place.Read.All',
34
35
  'https://graph.microsoft.com/Policy.Read.All',
@@ -7,6 +7,7 @@ var _AdaptiveCardSendCommand_instances, _AdaptiveCardSendCommand_initTelemetry,
7
7
  import request from '../../../request.js';
8
8
  import AnonymousCommand from '../../base/AnonymousCommand.js';
9
9
  import commands from '../commands.js';
10
+ import { optionsUtils } from '../../../utils/optionsUtils.js';
10
11
  class AdaptiveCardSendCommand extends AnonymousCommand {
11
12
  get name() {
12
13
  return commands.SEND;
@@ -26,7 +27,7 @@ class AdaptiveCardSendCommand extends AnonymousCommand {
26
27
  return true;
27
28
  }
28
29
  async commandAction(logger, args) {
29
- const unknownOptions = this.getUnknownOptions(args.options);
30
+ const unknownOptions = optionsUtils.getUnknownOptions(args.options, this.options);
30
31
  const unknownOptionNames = Object.getOwnPropertyNames(unknownOptions);
31
32
  const card = await this.getCard(args, unknownOptionNames, unknownOptions);
32
33
  const requestOptions = {
@@ -1,6 +1,7 @@
1
1
  import { createRequire } from 'module';
2
2
  import auth, { AuthType } from '../../Auth.js';
3
3
  import Command, { CommandError } from '../../Command.js';
4
+ import { optionsUtils } from '../../utils/optionsUtils.js';
4
5
  const require = createRequire(import.meta.url);
5
6
  const csomDefs = require('../../../csom.json');
6
7
  export default class SpoCommand extends Command {
@@ -70,7 +71,7 @@ export default class SpoCommand extends Command {
70
71
  }
71
72
  }
72
73
  validateUnknownCsomOptions(options, csomObject, csomPropertyType) {
73
- const unknownOptions = this.getUnknownOptions(options);
74
+ const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
74
75
  const optionNames = Object.getOwnPropertyNames(unknownOptions);
75
76
  if (optionNames.length === 0) {
76
77
  return true;
@@ -36,11 +36,7 @@ class RequestCommand extends Command {
36
36
  const url = this.resolveUrlTokens(args.options.url);
37
37
  const method = (args.options.method || 'get').toUpperCase();
38
38
  const headers = {};
39
- const unknownOptions = this.getUnknownOptions(args.options);
40
- const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
41
- unknownOptionsNames.forEach(o => {
42
- headers[o] = unknownOptions[o];
43
- });
39
+ this.addUnknownOptionsToPayload(headers, args.options);
44
40
  if (!headers.accept) {
45
41
  headers.accept = 'application/json';
46
42
  }
@@ -105,19 +101,14 @@ class RequestCommand extends Command {
105
101
  }
106
102
  _RequestCommand_instances = new WeakSet(), _RequestCommand_initTelemetry = function _RequestCommand_initTelemetry() {
107
103
  this.telemetry.push((args) => {
108
- const properties = {
104
+ Object.assign(this.telemetryProperties, {
109
105
  method: args.options.method || 'get',
110
106
  resource: typeof args.options.resource !== 'undefined',
111
107
  accept: args.options.accept || 'application/json',
112
108
  body: typeof args.options.body !== 'undefined',
113
109
  filePath: typeof args.options.filePath !== 'undefined'
114
- };
115
- const unknownOptions = this.getUnknownOptions(args.options);
116
- const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
117
- unknownOptionsNames.forEach(o => {
118
- properties[o] = typeof unknownOptions[o] !== 'undefined';
119
110
  });
120
- Object.assign(this.telemetryProperties, properties);
111
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
121
112
  });
122
113
  }, _RequestCommand_initOptions = function _RequestCommand_initOptions() {
123
114
  this.options.unshift({
@@ -18,6 +18,7 @@ import { validation } from '../../utils/validation.js';
18
18
  import AnonymousCommand from '../base/AnonymousCommand.js';
19
19
  import commands from './commands.js';
20
20
  import { interactivePreset, powerShellPreset, scriptingPreset } from './setupPresets.js';
21
+ import { optionsUtils } from '../../utils/optionsUtils.js';
21
22
  export var CliUsageMode;
22
23
  (function (CliUsageMode) {
23
24
  CliUsageMode["Interactively"] = "interactively";
@@ -227,6 +228,7 @@ class SetupCommand extends AnonymousCommand {
227
228
  });
228
229
  const appInfo = await entraApp.createAppRegistration({
229
230
  options,
231
+ unknownOptions: optionsUtils.getUnknownOptions(options, this.options),
230
232
  apis,
231
233
  logger,
232
234
  verbose: this.verbose,
@@ -14,6 +14,9 @@ class EntraAdministrativeUnitAddCommand extends GraphCommand {
14
14
  get description() {
15
15
  return 'Creates an administrative unit';
16
16
  }
17
+ allowUnknownOptions() {
18
+ return true;
19
+ }
17
20
  constructor() {
18
21
  super();
19
22
  _EntraAdministrativeUnitAddCommand_instances.add(this);
@@ -21,17 +24,19 @@ class EntraAdministrativeUnitAddCommand extends GraphCommand {
21
24
  __classPrivateFieldGet(this, _EntraAdministrativeUnitAddCommand_instances, "m", _EntraAdministrativeUnitAddCommand_initOptions).call(this);
22
25
  }
23
26
  async commandAction(logger, args) {
27
+ const requestBody = {
28
+ description: args.options.description,
29
+ displayName: args.options.displayName,
30
+ visibility: args.options.hiddenMembership ? 'HiddenMembership' : null
31
+ };
32
+ this.addUnknownOptionsToPayload(requestBody, args.options);
24
33
  const requestOptions = {
25
34
  url: `${this.resource}/v1.0/directory/administrativeUnits`,
26
35
  headers: {
27
36
  accept: 'application/json;odata.metadata=none'
28
37
  },
29
38
  responseType: 'json',
30
- data: {
31
- description: args.options.description,
32
- displayName: args.options.displayName,
33
- visibility: args.options.hiddenMembership ? 'HiddenMembership' : null
34
- }
39
+ data: requestBody
35
40
  };
36
41
  try {
37
42
  const administrativeUnit = await request.post(requestOptions);
@@ -12,6 +12,7 @@ import { accessToken } from '../../../../utils/accessToken.js';
12
12
  import { entraApp } from '../../../../utils/entraApp.js';
13
13
  import GraphCommand from '../../../base/GraphCommand.js';
14
14
  import commands from '../../commands.js';
15
+ import { optionsUtils } from '../../../../utils/optionsUtils.js';
15
16
  class EntraAppAddCommand extends GraphCommand {
16
17
  get name() {
17
18
  return commands.APP_ADD;
@@ -19,6 +20,9 @@ class EntraAppAddCommand extends GraphCommand {
19
20
  get description() {
20
21
  return 'Creates new Entra app registration';
21
22
  }
23
+ allowUnknownOptions() {
24
+ return true;
25
+ }
22
26
  constructor() {
23
27
  super();
24
28
  _EntraAppAddCommand_instances.add(this);
@@ -43,6 +47,7 @@ class EntraAppAddCommand extends GraphCommand {
43
47
  });
44
48
  let appInfo = await entraApp.createAppRegistration({
45
49
  options: args.options,
50
+ unknownOptions: optionsUtils.getUnknownOptions(args.options, this.options),
46
51
  apis,
47
52
  logger,
48
53
  verbose: this.verbose,
@@ -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 { optionsUtils } from '../../../../utils/optionsUtils.js';
13
14
  class EntraAppSetCommand extends GraphCommand {
14
15
  get name() {
15
16
  return commands.APP_SET;
@@ -17,6 +18,9 @@ class EntraAppSetCommand extends GraphCommand {
17
18
  get description() {
18
19
  return 'Updates Entra app registration';
19
20
  }
21
+ allowUnknownOptions() {
22
+ return true;
23
+ }
20
24
  constructor() {
21
25
  super();
22
26
  _EntraAppSetCommand_instances.add(this);
@@ -29,6 +33,7 @@ class EntraAppSetCommand extends GraphCommand {
29
33
  async commandAction(logger, args) {
30
34
  try {
31
35
  let objectId = await this.getAppObjectId(args, logger);
36
+ objectId = await this.updateUnknownOptions(args, objectId);
32
37
  objectId = await this.configureUri(args, objectId, logger);
33
38
  objectId = await this.configureRedirectUris(args, objectId, logger);
34
39
  objectId = await this.updateAllowPublicClientFlows(args, objectId, logger);
@@ -68,6 +73,23 @@ class EntraAppSetCommand extends GraphCommand {
68
73
  const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
69
74
  return result.id;
70
75
  }
76
+ async updateUnknownOptions(args, objectId) {
77
+ const unknownOptions = optionsUtils.getUnknownOptions(args.options, this.options);
78
+ if (Object.keys(unknownOptions).length > 0) {
79
+ const requestBody = {};
80
+ optionsUtils.addUnknownOptionsToPayload(requestBody, unknownOptions);
81
+ const requestOptions = {
82
+ url: `${this.resource}/v1.0/myorganization/applications/${objectId}`,
83
+ headers: {
84
+ 'content-type': 'application/json;odata.metadata=none'
85
+ },
86
+ responseType: 'json',
87
+ data: requestBody
88
+ };
89
+ await request.patch(requestOptions);
90
+ }
91
+ return objectId;
92
+ }
71
93
  async updateAllowPublicClientFlows(args, objectId, logger) {
72
94
  if (args.options.allowPublicClientFlows === undefined) {
73
95
  return objectId;
@@ -270,6 +292,7 @@ _a = EntraAppSetCommand, _EntraAppSetCommand_instances = new WeakSet(), _EntraAp
270
292
  certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined',
271
293
  allowPublicClientFlows: typeof args.options.allowPublicClientFlows !== 'undefined'
272
294
  });
295
+ this.trackUnknownOptions(this.telemetryProperties, args.options);
273
296
  });
274
297
  }, _EntraAppSetCommand_initOptions = function _EntraAppSetCommand_initOptions() {
275
298
  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({
@@ -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({
@@ -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({
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { zod } from '../../../../utils/zod.js';
4
+ import { validation } from '../../../../utils/validation.js';
5
+ import GraphCommand from '../../../base/GraphCommand.js';
6
+ import commands from '../../commands.js';
7
+ import request from '../../../../request.js';
8
+ import { optionsUtils } from '../../../../utils/optionsUtils.js';
9
+ const options = globalOptionsZod
10
+ .extend({
11
+ name: zod.alias('n', z.string()),
12
+ resourceId: zod.alias('i', z.string()),
13
+ resourceType: zod.alias('t', z.enum(['user', 'group', 'device', 'organization']))
14
+ })
15
+ .and(z.any());
16
+ class GraphOpenExtensionAddCommand extends GraphCommand {
17
+ get name() {
18
+ return commands.OPENEXTENSION_ADD;
19
+ }
20
+ get description() {
21
+ return 'Adds an open extension to a resource';
22
+ }
23
+ get schema() {
24
+ return options;
25
+ }
26
+ getRefinedSchema(schema) {
27
+ return schema
28
+ .refine(options => options.resourceType !== 'group' && options.resourceType !== 'device' && options.resourceType !== 'organization' || (options.resourceId && validation.isValidGuid(options.resourceId)), options => ({
29
+ message: `The '${options.resourceId}' must be a valid GUID`,
30
+ path: ['resourceId']
31
+ }))
32
+ .refine(options => options.resourceType !== 'user' || (options.resourceId && (validation.isValidGuid(options.resourceId) || validation.isValidUserPrincipalName(options.resourceId))), options => ({
33
+ message: `The '${options.resourceId}' must be a valid GUID or user principal name`,
34
+ path: ['resourceId']
35
+ }));
36
+ }
37
+ async commandAction(logger, args) {
38
+ try {
39
+ const requestBody = {};
40
+ requestBody["extensionName"] = args.options.name;
41
+ const unknownOptions = optionsUtils.getUnknownOptions(args.options, this.options);
42
+ const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
43
+ unknownOptionsNames.forEach(async (o) => {
44
+ try {
45
+ const jsonObject = JSON.parse(unknownOptions[o]);
46
+ requestBody[o] = jsonObject;
47
+ }
48
+ catch {
49
+ requestBody[o] = unknownOptions[o];
50
+ }
51
+ });
52
+ const requestOptions = {
53
+ url: `${this.resource}/v1.0/${args.options.resourceType}${args.options.resourceType === 'organization' ? '' : 's'}/${args.options.resourceId}/extensions`,
54
+ headers: {
55
+ accept: 'application/json;odata.metadata=none',
56
+ 'content-type': 'application/json'
57
+ },
58
+ data: requestBody,
59
+ responseType: 'json'
60
+ };
61
+ if (args.options.verbose) {
62
+ await logger.logToStderr(`Adding open extension to the ${args.options.resourceType} with id '${args.options.resourceId}'...`);
63
+ }
64
+ const res = await request.post(requestOptions);
65
+ await logger.log(res);
66
+ }
67
+ catch (err) {
68
+ this.handleRejectedODataJsonPromise(err);
69
+ }
70
+ }
71
+ }
72
+ export default new GraphOpenExtensionAddCommand();
73
+ //# sourceMappingURL=openextension-add.js.map
@@ -4,6 +4,7 @@ export default {
4
4
  DIRECTORYEXTENSION_ADD: `${prefix} directoryextension add`,
5
5
  DIRECTORYEXTENSION_GET: `${prefix} directoryextension get`,
6
6
  DIRECTORYEXTENSION_REMOVE: `${prefix} directoryextension remove`,
7
+ OPENEXTENSION_ADD: `${prefix} openextension add`,
7
8
  SCHEMAEXTENSION_ADD: `${prefix} schemaextension add`,
8
9
  SCHEMAEXTENSION_GET: `${prefix} schemaextension get`,
9
10
  SCHEMAEXTENSION_LIST: `${prefix} schemaextension list`,
@@ -4,16 +4,12 @@ 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 _SpoFolderRoleAssignmentAddCommand_instances, _SpoFolderRoleAssignmentAddCommand_initTelemetry, _SpoFolderRoleAssignmentAddCommand_initOptions, _SpoFolderRoleAssignmentAddCommand_initValidators, _SpoFolderRoleAssignmentAddCommand_initTypes;
7
- import { cli } from '../../../../cli/cli.js';
8
7
  import request from '../../../../request.js';
9
8
  import { formatting } from '../../../../utils/formatting.js';
10
9
  import { urlUtil } from '../../../../utils/urlUtil.js';
11
10
  import { validation } from '../../../../utils/validation.js';
12
11
  import SpoCommand from '../../../base/SpoCommand.js';
13
12
  import commands from '../../commands.js';
14
- import spoGroupGetCommand from '../group/group-get.js';
15
- import spoRoleDefinitionFolderCommand from '../roledefinition/roledefinition-list.js';
16
- import spoUserGetCommand from '../user/user-get.js';
17
13
  import { entraGroup } from '../../../../utils/entraGroup.js';
18
14
  import { spo } from '../../../../utils/spo.js';
19
15
  class SpoFolderRoleAssignmentAddCommand extends SpoCommand {
@@ -38,7 +34,6 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand {
38
34
  const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.folderUrl);
39
35
  const roleFolderUrl = urlUtil.getWebRelativePath(args.options.webUrl, args.options.folderUrl);
40
36
  try {
41
- //await this.getFolderUrl(args.options);
42
37
  let requestUrl = `${args.options.webUrl}/_api/web/`;
43
38
  if (roleFolderUrl.split('/').length === 2) {
44
39
  requestUrl += `GetList('${formatting.encodeQueryParameter(serverRelativeUrl)}')`;
@@ -46,13 +41,13 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand {
46
41
  else {
47
42
  requestUrl += `GetFolderByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')/ListItemAllFields`;
48
43
  }
49
- const roleDefinitionId = await this.getRoleDefinitionId(args.options);
44
+ const roleDefinitionId = await this.getRoleDefinitionId(args.options, logger);
50
45
  let principalId = args.options.principalId;
51
46
  if (args.options.upn) {
52
- principalId = await this.getUserPrincipalId(args.options);
47
+ principalId = await this.getUserPrincipalId(args.options, logger);
53
48
  }
54
49
  else if (args.options.groupName) {
55
- principalId = await this.getGroupPrincipalId(args.options);
50
+ principalId = await this.getGroupPrincipalId(args.options, logger);
56
51
  }
57
52
  else if (args.options.entraGroupId || args.options.entraGroupName) {
58
53
  if (this.verbose) {
@@ -82,50 +77,20 @@ class SpoFolderRoleAssignmentAddCommand extends SpoCommand {
82
77
  };
83
78
  return request.post(requestOptions);
84
79
  }
85
- async getRoleDefinitionId(options) {
80
+ async getRoleDefinitionId(options, logger) {
86
81
  if (!options.roleDefinitionName) {
87
82
  return options.roleDefinitionId;
88
83
  }
89
- const roleDefinitionFolderCommandOptions = {
90
- webUrl: options.webUrl,
91
- output: 'json',
92
- debug: this.debug,
93
- verbose: this.verbose
94
- };
95
- const output = await cli.executeCommandWithOutput(spoRoleDefinitionFolderCommand, { options: { ...roleDefinitionFolderCommandOptions, _: [] } });
96
- const getRoleDefinitionFolderOutput = JSON.parse(output.stdout);
97
- const roleDefinition = getRoleDefinitionFolderOutput.find((role) => role.Name === options.roleDefinitionName);
98
- if (roleDefinition) {
99
- return roleDefinition.Id;
100
- }
101
- else {
102
- throw Error(`The specified role definition name '${options.roleDefinitionName}' does not exist.`);
103
- }
84
+ const roleDefintion = await spo.getRoleDefintionByName(options.webUrl, options.roleDefinitionName, logger, this.verbose);
85
+ return roleDefintion.Id;
104
86
  }
105
- async getGroupPrincipalId(options) {
106
- const groupGetCommandOptions = {
107
- webUrl: options.webUrl,
108
- name: options.groupName,
109
- output: 'json',
110
- debug: this.debug,
111
- verbose: this.verbose
112
- };
113
- const output = await cli.executeCommandWithOutput(spoGroupGetCommand, { options: { ...groupGetCommandOptions, _: [] } });
114
- const getGroupOutput = JSON.parse(output.stdout);
115
- return getGroupOutput.Id;
87
+ async getGroupPrincipalId(options, logger) {
88
+ const group = await spo.getGroupByName(options.webUrl, options.groupName, logger, this.verbose);
89
+ return group.Id;
116
90
  }
117
- async getUserPrincipalId(options) {
118
- const userGetCommandOptions = {
119
- webUrl: options.webUrl,
120
- email: options.upn,
121
- id: undefined,
122
- output: 'json',
123
- debug: this.debug,
124
- verbose: this.verbose
125
- };
126
- const output = await cli.executeCommandWithOutput(spoUserGetCommand, { options: { ...userGetCommandOptions, _: [] } });
127
- const getUserOutput = JSON.parse(output.stdout);
128
- return getUserOutput.Id;
91
+ async getUserPrincipalId(options, logger) {
92
+ const user = await spo.getUserByEmail(options.webUrl, options.upn, logger, this.verbose);
93
+ return user.Id;
129
94
  }
130
95
  }
131
96
  _SpoFolderRoleAssignmentAddCommand_instances = new WeakSet(), _SpoFolderRoleAssignmentAddCommand_initTelemetry = function _SpoFolderRoleAssignmentAddCommand_initTelemetry() {
@@ -11,8 +11,6 @@ import { urlUtil } from '../../../../utils/urlUtil.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import SpoCommand from '../../../base/SpoCommand.js';
13
13
  import commands from '../../commands.js';
14
- import spoGroupGetCommand from '../group/group-get.js';
15
- import spoUserGetCommand from '../user/user-get.js';
16
14
  import { entraGroup } from '../../../../utils/entraGroup.js';
17
15
  import { spo } from '../../../../utils/spo.js';
18
16
  class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
@@ -38,11 +36,12 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
38
36
  const serverRelativeUrl = urlUtil.getServerRelativePath(args.options.webUrl, args.options.folderUrl);
39
37
  const requestUrl = `${args.options.webUrl}/_api/web/GetFolderByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(serverRelativeUrl)}')/ListItemAllFields`;
40
38
  try {
39
+ let principalId = args.options.principalId;
41
40
  if (args.options.upn) {
42
- args.options.principalId = await this.getUserPrincipalId(args.options);
41
+ principalId = await this.getUserPrincipalId(args.options, logger);
43
42
  }
44
43
  else if (args.options.groupName) {
45
- args.options.principalId = await this.getGroupPrincipalId(args.options);
44
+ principalId = await this.getGroupPrincipalId(args.options, logger);
46
45
  }
47
46
  else if (args.options.entraGroupId || args.options.entraGroupName) {
48
47
  if (this.verbose) {
@@ -52,9 +51,9 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
52
51
  ? await entraGroup.getGroupById(args.options.entraGroupId)
53
52
  : await entraGroup.getGroupByDisplayName(args.options.entraGroupName);
54
53
  const siteUser = await spo.ensureEntraGroup(args.options.webUrl, group);
55
- args.options.principalId = siteUser.Id;
54
+ principalId = siteUser.Id;
56
55
  }
57
- await this.removeRoleAssignment(requestUrl, logger, args.options);
56
+ await this.removeRoleAssignment(requestUrl, principalId);
58
57
  }
59
58
  catch (err) {
60
59
  this.handleRejectedODataJsonPromise(err);
@@ -70,9 +69,9 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
70
69
  }
71
70
  }
72
71
  }
73
- async removeRoleAssignment(requestUrl, logger, options) {
72
+ async removeRoleAssignment(requestUrl, principalId) {
74
73
  const requestOptions = {
75
- url: `${requestUrl}/roleassignments/removeroleassignment(principalid='${options.principalId}')`,
74
+ url: `${requestUrl}/roleassignments/removeroleassignment(principalid='${principalId}')`,
76
75
  method: 'POST',
77
76
  headers: {
78
77
  'accept': 'application/json;odata=nometadata',
@@ -82,30 +81,13 @@ class SpoFolderRoleAssignmentRemoveCommand extends SpoCommand {
82
81
  };
83
82
  return request.post(requestOptions);
84
83
  }
85
- async getGroupPrincipalId(options) {
86
- const groupGetCommandOptions = {
87
- webUrl: options.webUrl,
88
- name: options.groupName,
89
- output: 'json',
90
- debug: this.debug,
91
- verbose: this.verbose
92
- };
93
- const output = await cli.executeCommandWithOutput(spoGroupGetCommand, { options: { ...groupGetCommandOptions, _: [] } });
94
- const getGroupOutput = JSON.parse(output.stdout);
95
- return getGroupOutput.Id;
84
+ async getGroupPrincipalId(options, logger) {
85
+ const group = await spo.getGroupByName(options.webUrl, options.groupName, logger, this.verbose);
86
+ return group.Id;
96
87
  }
97
- async getUserPrincipalId(options) {
98
- const userGetCommandOptions = {
99
- webUrl: options.webUrl,
100
- email: options.upn,
101
- id: undefined,
102
- output: 'json',
103
- debug: this.debug,
104
- verbose: this.verbose
105
- };
106
- const output = await cli.executeCommandWithOutput(spoUserGetCommand, { options: { ...userGetCommandOptions, _: [] } });
107
- const getUserOutput = JSON.parse(output.stdout);
108
- return getUserOutput.Id;
88
+ async getUserPrincipalId(options, logger) {
89
+ const user = await spo.getUserByEmail(options.webUrl, options.upn, logger, this.verbose);
90
+ return user.Id;
109
91
  }
110
92
  }
111
93
  _SpoFolderRoleAssignmentRemoveCommand_instances = new WeakSet(), _SpoFolderRoleAssignmentRemoveCommand_initTelemetry = function _SpoFolderRoleAssignmentRemoveCommand_initTelemetry() {