@pnp/cli-microsoft365 10.5.0 → 10.6.0-beta.195c8d5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +3 -1
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- package/dist/Auth.js +2 -1
- package/dist/Command.js +14 -26
- package/dist/auth/MsalNetworkClient.js +32 -0
- package/dist/config.js +2 -0
- package/dist/m365/adaptivecard/commands/adaptivecard-send.js +2 -1
- package/dist/m365/app/commands/app-get.js +3 -13
- package/dist/m365/app/commands/permission/permission-list.js +4 -14
- package/dist/m365/base/SpoCommand.js +2 -1
- package/dist/m365/commands/request.js +3 -12
- package/dist/m365/commands/setup.js +2 -0
- package/dist/m365/entra/commands/administrativeunit/administrativeunit-add.js +10 -5
- package/dist/m365/entra/commands/app/app-add.js +5 -0
- package/dist/m365/entra/commands/app/app-get.js +27 -21
- package/dist/m365/entra/commands/app/app-permission-list.js +28 -22
- package/dist/m365/entra/commands/app/app-remove.js +22 -19
- package/dist/m365/entra/commands/app/app-role-add.js +22 -19
- package/dist/m365/entra/commands/app/app-role-list.js +22 -19
- package/dist/m365/entra/commands/app/app-role-remove.js +39 -36
- package/dist/m365/entra/commands/app/app-set.js +45 -19
- package/dist/m365/entra/commands/group/group-add.js +1 -0
- package/dist/m365/entra/commands/group/group-set.js +12 -6
- package/dist/m365/entra/commands/policy/policy-list.js +46 -3
- package/dist/m365/entra/commands/user/user-add.js +1 -0
- package/dist/m365/entra/commands/user/user-list.js +2 -1
- package/dist/m365/external/commands/item/item-add.js +2 -1
- package/dist/m365/flow/commands/flow-list.js +1 -1
- package/dist/m365/graph/commands/openextension/openextension-add.js +73 -0
- package/dist/m365/graph/commands/openextension/openextension-get.js +57 -0
- package/dist/m365/graph/commands/openextension/openextension-list.js +62 -0
- package/dist/m365/graph/commands/openextension/openextension-remove.js +68 -0
- package/dist/m365/graph/commands.js +4 -0
- package/dist/m365/pp/commands/card/card-clone.js +12 -16
- package/dist/m365/pp/commands/card/card-get.js +13 -19
- package/dist/m365/pp/commands/card/card-remove.js +13 -16
- package/dist/m365/pp/commands/solution/solution-get.js +5 -11
- package/dist/m365/pp/commands/solution/solution-publish.js +6 -16
- package/dist/m365/pp/commands/solution/solution-remove.js +4 -13
- package/dist/m365/spfx/commands/project/project-doctor/doctor-1.21.0.js +25 -0
- package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002029_DEVDEP_microsoft_rush_stack_compiler_5_3.js +13 -0
- package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.21.0.js +63 -0
- package/dist/m365/spfx/commands/project/project-upgrade.js +2 -1
- package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
- package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +12 -47
- package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +13 -31
- package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +12 -43
- package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +8 -27
- package/dist/m365/spo/commands/web/web-roleassignment-add.js +22 -47
- package/dist/m365/spo/commands/web/web-roleassignment-remove.js +17 -32
- package/dist/m365/tenant/commands/people/people-profilecardproperty-add.js +4 -3
- package/dist/m365/tenant/commands/people/people-profilecardproperty-set.js +4 -3
- package/dist/m365/todo/commands/list/list-remove.js +1 -1
- package/dist/m365/util/commands/accesstoken/accesstoken-get.js +13 -3
- package/dist/utils/accessToken.js +8 -0
- package/dist/utils/entraApp.js +3 -1
- package/dist/utils/optionsUtils.js +28 -0
- package/dist/utils/powerPlatform.js +51 -1
- package/dist/utils/prompt.js +9 -2
- package/dist/utils/spo.js +32 -3
- package/docs/docs/cmd/entra/policy/policy-list.mdx +1 -1
- package/docs/docs/cmd/graph/directoryextension/directoryextension-get.mdx +2 -3
- package/docs/docs/cmd/graph/openextension/openextension-add.mdx +120 -0
- package/docs/docs/cmd/graph/openextension/openextension-get.mdx +111 -0
- package/docs/docs/cmd/graph/openextension/openextension-list.mdx +129 -0
- package/docs/docs/cmd/graph/openextension/openextension-remove.mdx +59 -0
- package/docs/docs/cmd/spfx/project/project-upgrade.mdx +1 -4
- package/docs/docs/cmd/util/accesstoken/accesstoken-get.mdx +72 -0
- package/npm-shrinkwrap.json +517 -481
- package/package.json +15 -15
package/dist/Auth.js
CHANGED
|
@@ -2,6 +2,7 @@ import { AzureCloudInstance } from '@azure/msal-common';
|
|
|
2
2
|
import assert from 'assert';
|
|
3
3
|
import { CommandError } from './Command.js';
|
|
4
4
|
import { FileTokenStorage } from './auth/FileTokenStorage.js';
|
|
5
|
+
import { MsalNetworkClient } from './auth/MsalNetworkClient.js';
|
|
5
6
|
import { msalCachePlugin } from './auth/msalCachePlugin.js';
|
|
6
7
|
import { cli } from './cli/cli.js';
|
|
7
8
|
import request from './request.js';
|
|
@@ -274,7 +275,7 @@ export class Auth {
|
|
|
274
275
|
piiLoggingEnabled: false,
|
|
275
276
|
logLevel: debug ? LogLevel.Verbose : LogLevel.Error
|
|
276
277
|
},
|
|
277
|
-
|
|
278
|
+
networkClient: new MsalNetworkClient()
|
|
278
279
|
}
|
|
279
280
|
};
|
|
280
281
|
}
|
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;
|
|
@@ -239,6 +240,11 @@ class Command {
|
|
|
239
240
|
return commandName;
|
|
240
241
|
}
|
|
241
242
|
handleRejectedODataPromise(res) {
|
|
243
|
+
/* c8 ignore next 4 */
|
|
244
|
+
if (this.debug && typeof global.it === 'undefined') {
|
|
245
|
+
const error = new Error();
|
|
246
|
+
cli.error(error.stack).then(() => { }).catch(() => { });
|
|
247
|
+
}
|
|
242
248
|
if (res.error) {
|
|
243
249
|
try {
|
|
244
250
|
const err = JSON.parse(res.error);
|
|
@@ -275,6 +281,11 @@ class Command {
|
|
|
275
281
|
}
|
|
276
282
|
}
|
|
277
283
|
handleRejectedODataJsonPromise(response) {
|
|
284
|
+
/* c8 ignore next 4 */
|
|
285
|
+
if (this.debug && typeof global.it === 'undefined') {
|
|
286
|
+
const error = new Error();
|
|
287
|
+
cli.error(error.stack).then(() => { }).catch(() => { });
|
|
288
|
+
}
|
|
278
289
|
if (response.error &&
|
|
279
290
|
response.error['odata.error'] &&
|
|
280
291
|
response.error['odata.error'].message) {
|
|
@@ -337,39 +348,16 @@ class Command {
|
|
|
337
348
|
}
|
|
338
349
|
await telemetry.trackEvent(this.getUsedCommandName(), this.getTelemetryProperties(args));
|
|
339
350
|
}
|
|
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
351
|
trackUnknownOptions(telemetryProps, options) {
|
|
361
|
-
const unknownOptions =
|
|
352
|
+
const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
|
|
362
353
|
const unknownOptionsNames = Object.getOwnPropertyNames(unknownOptions);
|
|
363
354
|
unknownOptionsNames.forEach(o => {
|
|
364
355
|
telemetryProps[o] = true;
|
|
365
356
|
});
|
|
366
357
|
}
|
|
367
358
|
addUnknownOptionsToPayload(payload, options) {
|
|
368
|
-
const unknownOptions =
|
|
369
|
-
|
|
370
|
-
unknownOptionsNames.forEach(o => {
|
|
371
|
-
payload[o] = unknownOptions[o];
|
|
372
|
-
});
|
|
359
|
+
const unknownOptions = optionsUtils.getUnknownOptions(options, this.options);
|
|
360
|
+
optionsUtils.addUnknownOptionsToPayload(payload, unknownOptions);
|
|
373
361
|
}
|
|
374
362
|
loadValuesFromAccessToken(args) {
|
|
375
363
|
if (!auth.connection.accessTokens[auth.defaultResource]) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import request from '../request.js';
|
|
2
|
+
export class MsalNetworkClient {
|
|
3
|
+
sendGetRequestAsync(url, options) {
|
|
4
|
+
return this.sendRequestAsync(url, 'GET', options);
|
|
5
|
+
}
|
|
6
|
+
sendPostRequestAsync(url, options) {
|
|
7
|
+
return this.sendRequestAsync(url, 'POST', options);
|
|
8
|
+
}
|
|
9
|
+
async sendRequestAsync(url, method, options = {}) {
|
|
10
|
+
const requestOptions = {
|
|
11
|
+
url: url,
|
|
12
|
+
method: method,
|
|
13
|
+
headers: {
|
|
14
|
+
'x-anonymous': true,
|
|
15
|
+
...options.headers
|
|
16
|
+
},
|
|
17
|
+
data: options.body,
|
|
18
|
+
fullResponse: true
|
|
19
|
+
};
|
|
20
|
+
const res = await request.execute(requestOptions);
|
|
21
|
+
const headersObj = {};
|
|
22
|
+
for (const [key, value] of Object.entries(res.headers)) {
|
|
23
|
+
headersObj[key] = typeof value === 'string' ? value : String(value);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
headers: headersObj,
|
|
27
|
+
body: JSON.parse(res.data),
|
|
28
|
+
status: res.status
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=MsalNetworkClient.js.map
|
package/dist/config.js
CHANGED
|
@@ -29,9 +29,11 @@ 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',
|
|
36
|
+
'https://graph.microsoft.com/Policy.Read.PermissionGrant',
|
|
35
37
|
'https://graph.microsoft.com/RecordsManagement.ReadWrite.All',
|
|
36
38
|
'https://graph.microsoft.com/Reports.Read.All',
|
|
37
39
|
'https://graph.microsoft.com/ReportSettings.ReadWrite.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 =
|
|
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,7 +1,6 @@
|
|
|
1
|
-
import { cli } from '../../../cli/cli.js';
|
|
2
|
-
import entraAppGetCommand from '../../entra/commands/app/app-get.js';
|
|
3
1
|
import AppCommand from '../../base/AppCommand.js';
|
|
4
2
|
import commands from '../commands.js';
|
|
3
|
+
import { entraApp } from '../../../utils/entraApp.js';
|
|
5
4
|
class AppGetCommand extends AppCommand {
|
|
6
5
|
get name() {
|
|
7
6
|
return commands.GET;
|
|
@@ -10,18 +9,9 @@ class AppGetCommand extends AppCommand {
|
|
|
10
9
|
return 'Retrieves information about the current Microsoft Entra app';
|
|
11
10
|
}
|
|
12
11
|
async commandAction(logger, args) {
|
|
13
|
-
const options = {
|
|
14
|
-
appId: this.appId,
|
|
15
|
-
output: 'json',
|
|
16
|
-
debug: args.options.debug,
|
|
17
|
-
verbose: args.options.verbose
|
|
18
|
-
};
|
|
19
12
|
try {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
await logger.logToStderr(appGetOutput.stderr);
|
|
23
|
-
}
|
|
24
|
-
await logger.log(JSON.parse(appGetOutput.stdout));
|
|
13
|
+
const app = await entraApp.getAppRegistrationByAppId(args.options.appId);
|
|
14
|
+
await logger.log(app);
|
|
25
15
|
}
|
|
26
16
|
catch (err) {
|
|
27
17
|
this.handleRejectedODataJsonPromise(err);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { cli } from '../../../../cli/cli.js';
|
|
2
1
|
import request from '../../../../request.js';
|
|
3
|
-
import appGetCommand from '../../../entra/commands/app/app-get.js';
|
|
4
2
|
import AppCommand from '../../../base/AppCommand.js';
|
|
5
3
|
import commands from '../../commands.js';
|
|
4
|
+
import { entraApp } from '../../../../utils/entraApp.js';
|
|
6
5
|
var GetServicePrincipal;
|
|
7
6
|
(function (GetServicePrincipal) {
|
|
8
7
|
GetServicePrincipal[GetServicePrincipal["withPermissions"] = 0] = "withPermissions";
|
|
@@ -178,19 +177,10 @@ class AppPermissionListCommand extends AppCommand {
|
|
|
178
177
|
}
|
|
179
178
|
async getAppRegistration(appId, logger) {
|
|
180
179
|
if (this.verbose) {
|
|
181
|
-
await logger.logToStderr(`Retrieving
|
|
180
|
+
await logger.logToStderr(`Retrieving the Entra application registration with appId '${appId}'`);
|
|
182
181
|
}
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
output: 'json',
|
|
186
|
-
debug: this.debug,
|
|
187
|
-
verbose: this.verbose
|
|
188
|
-
};
|
|
189
|
-
const output = await cli.executeCommandWithOutput(appGetCommand, { options: { ...options, _: [] } });
|
|
190
|
-
if (this.debug) {
|
|
191
|
-
await logger.logToStderr(output.stderr);
|
|
192
|
-
}
|
|
193
|
-
return JSON.parse(output.stdout);
|
|
182
|
+
const app = await entraApp.getAppRegistrationByAppId(appId);
|
|
183
|
+
return app;
|
|
194
184
|
}
|
|
195
185
|
async getAppRegPermissions(appId, logger) {
|
|
196
186
|
const application = await this.getAppRegistration(appId, logger);
|
|
@@ -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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
@@ -11,6 +11,7 @@ import { validation } from '../../../../utils/validation.js';
|
|
|
11
11
|
import GraphCommand from '../../../base/GraphCommand.js';
|
|
12
12
|
import commands from '../../commands.js';
|
|
13
13
|
import { cli } from '../../../../cli/cli.js';
|
|
14
|
+
import { entraApp } from '../../../../utils/entraApp.js';
|
|
14
15
|
class EntraAppGetCommand extends GraphCommand {
|
|
15
16
|
get name() {
|
|
16
17
|
return commands.APP_GET;
|
|
@@ -28,7 +29,7 @@ class EntraAppGetCommand extends GraphCommand {
|
|
|
28
29
|
}
|
|
29
30
|
async commandAction(logger, args) {
|
|
30
31
|
try {
|
|
31
|
-
const appObjectId = await this.getAppObjectId(args);
|
|
32
|
+
const appObjectId = await this.getAppObjectId(args, logger);
|
|
32
33
|
const appInfo = await this.getAppInfo(appObjectId, args.options.properties);
|
|
33
34
|
const res = await this.saveAppInfo(args, appInfo, logger);
|
|
34
35
|
await logger.log(res);
|
|
@@ -37,32 +38,37 @@ class EntraAppGetCommand extends GraphCommand {
|
|
|
37
38
|
this.handleRejectedODataJsonPromise(err);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
async getAppObjectId(args) {
|
|
41
|
+
async getAppObjectId(args, logger) {
|
|
41
42
|
if (args.options.objectId) {
|
|
42
43
|
return args.options.objectId;
|
|
43
44
|
}
|
|
44
45
|
const { appId, name } = args.options;
|
|
45
|
-
|
|
46
|
-
`
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
accept: 'application/json;odata.metadata=none'
|
|
52
|
-
},
|
|
53
|
-
responseType: 'json'
|
|
54
|
-
};
|
|
55
|
-
const res = await request.get(requestOptions);
|
|
56
|
-
if (res.value.length === 1) {
|
|
57
|
-
return res.value[0].id;
|
|
46
|
+
if (this.verbose) {
|
|
47
|
+
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : name}...`);
|
|
48
|
+
}
|
|
49
|
+
if (appId) {
|
|
50
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ["id"]);
|
|
51
|
+
return app.id;
|
|
58
52
|
}
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
53
|
+
else {
|
|
54
|
+
const requestOptions = {
|
|
55
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'&$select=id`,
|
|
56
|
+
headers: {
|
|
57
|
+
accept: 'application/json;odata.metadata=none'
|
|
58
|
+
},
|
|
59
|
+
responseType: 'json'
|
|
60
|
+
};
|
|
61
|
+
const res = await request.get(requestOptions);
|
|
62
|
+
if (res.value.length === 1) {
|
|
63
|
+
return res.value[0].id;
|
|
64
|
+
}
|
|
65
|
+
if (res.value.length === 0) {
|
|
66
|
+
throw `No Microsoft Entra application registration with name ${name} found`;
|
|
67
|
+
}
|
|
68
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
69
|
+
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${name}' found.`, resultAsKeyValuePair);
|
|
70
|
+
return result.id;
|
|
62
71
|
}
|
|
63
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
64
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${name}' found.`, resultAsKeyValuePair);
|
|
65
|
-
return result.id;
|
|
66
72
|
}
|
|
67
73
|
async getAppInfo(appObjectId, properties) {
|
|
68
74
|
const queryParameters = [];
|
|
@@ -10,6 +10,7 @@ import request from "../../../../request.js";
|
|
|
10
10
|
import { validation } from "../../../../utils/validation.js";
|
|
11
11
|
import { formatting } from "../../../../utils/formatting.js";
|
|
12
12
|
import { cli } from "../../../../cli/cli.js";
|
|
13
|
+
import { entraApp } from "../../../../utils/entraApp.js";
|
|
13
14
|
class EntraAppPermissionListCommand extends GraphCommand {
|
|
14
15
|
get name() {
|
|
15
16
|
return commands.APP_PERMISSION_LIST;
|
|
@@ -28,7 +29,7 @@ class EntraAppPermissionListCommand extends GraphCommand {
|
|
|
28
29
|
}
|
|
29
30
|
async commandAction(logger, args) {
|
|
30
31
|
try {
|
|
31
|
-
const appObjectId = await this.getAppObjectId(args.options);
|
|
32
|
+
const appObjectId = await this.getAppObjectId(args.options, logger);
|
|
32
33
|
const type = args.options.type ?? 'all';
|
|
33
34
|
const permissions = await this.getAppRegPermissions(appObjectId, type, logger);
|
|
34
35
|
await logger.log(permissions);
|
|
@@ -37,32 +38,37 @@ class EntraAppPermissionListCommand extends GraphCommand {
|
|
|
37
38
|
this.handleRejectedODataJsonPromise(err);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
async getAppObjectId(options) {
|
|
41
|
+
async getAppObjectId(options, logger) {
|
|
41
42
|
if (options.appObjectId) {
|
|
42
43
|
return options.appObjectId;
|
|
43
44
|
}
|
|
44
45
|
const { appId, appName } = options;
|
|
45
|
-
|
|
46
|
-
`
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
46
|
+
if (this.verbose) {
|
|
47
|
+
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
|
|
48
|
+
}
|
|
49
|
+
if (appId) {
|
|
50
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ["id"]);
|
|
51
|
+
return app.id;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const requestOptions = {
|
|
55
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
|
|
56
|
+
headers: {
|
|
57
|
+
accept: 'application/json;odata.metadata=none'
|
|
58
|
+
},
|
|
59
|
+
responseType: 'json'
|
|
60
|
+
};
|
|
61
|
+
const res = await request.get(requestOptions);
|
|
62
|
+
if (res.value.length === 1) {
|
|
63
|
+
return res.value[0].id;
|
|
64
|
+
}
|
|
65
|
+
if (res.value.length === 0) {
|
|
66
|
+
throw `No Microsoft Entra application registration with name ${appName} found`;
|
|
67
|
+
}
|
|
68
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
69
|
+
const result = await cli.handleMultipleResultsFound(`Multiple Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
70
|
+
return result.id;
|
|
62
71
|
}
|
|
63
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
64
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
65
|
-
return result.id;
|
|
66
72
|
}
|
|
67
73
|
async getAppRegPermissions(appObjectId, permissionType, logger) {
|
|
68
74
|
const requestOptions = {
|
|
@@ -6,6 +6,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
6
6
|
var _EntraAppRemoveCommand_instances, _EntraAppRemoveCommand_initTelemetry, _EntraAppRemoveCommand_initOptions, _EntraAppRemoveCommand_initValidators, _EntraAppRemoveCommand_initOptionSets;
|
|
7
7
|
import { cli } from '../../../../cli/cli.js';
|
|
8
8
|
import request from '../../../../request.js';
|
|
9
|
+
import { entraApp } from '../../../../utils/entraApp.js';
|
|
9
10
|
import { formatting } from '../../../../utils/formatting.js';
|
|
10
11
|
import { validation } from '../../../../utils/validation.js';
|
|
11
12
|
import GraphCommand from '../../../base/GraphCommand.js';
|
|
@@ -63,27 +64,29 @@ class EntraAppRemoveCommand extends GraphCommand {
|
|
|
63
64
|
if (this.verbose) {
|
|
64
65
|
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : name}...`);
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const requestOptions = {
|
|
70
|
-
url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
|
|
71
|
-
headers: {
|
|
72
|
-
accept: 'application/json;odata.metadata=none'
|
|
73
|
-
},
|
|
74
|
-
responseType: 'json'
|
|
75
|
-
};
|
|
76
|
-
const res = await request.get(requestOptions);
|
|
77
|
-
if (res.value.length === 1) {
|
|
78
|
-
return res.value[0].id;
|
|
67
|
+
if (appId) {
|
|
68
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
|
|
69
|
+
return app.id;
|
|
79
70
|
}
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
71
|
+
else {
|
|
72
|
+
const requestOptions = {
|
|
73
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'&$select=id`,
|
|
74
|
+
headers: {
|
|
75
|
+
accept: 'application/json;odata.metadata=none'
|
|
76
|
+
},
|
|
77
|
+
responseType: 'json'
|
|
78
|
+
};
|
|
79
|
+
const res = await request.get(requestOptions);
|
|
80
|
+
if (res.value.length === 1) {
|
|
81
|
+
return res.value[0].id;
|
|
82
|
+
}
|
|
83
|
+
if (res.value.length === 0) {
|
|
84
|
+
throw `No Microsoft Entra application registration with name ${name} found`;
|
|
85
|
+
}
|
|
86
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
87
|
+
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
|
|
88
|
+
return result.id;
|
|
83
89
|
}
|
|
84
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
85
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
|
|
86
|
-
return result.id;
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
_EntraAppRemoveCommand_instances = new WeakSet(), _EntraAppRemoveCommand_initTelemetry = function _EntraAppRemoveCommand_initTelemetry() {
|
|
@@ -10,6 +10,7 @@ import { formatting } from '../../../../utils/formatting.js';
|
|
|
10
10
|
import GraphCommand from '../../../base/GraphCommand.js';
|
|
11
11
|
import commands from '../../commands.js';
|
|
12
12
|
import { cli } from '../../../../cli/cli.js';
|
|
13
|
+
import { entraApp } from '../../../../utils/entraApp.js';
|
|
13
14
|
class EntraAppRoleAddCommand extends GraphCommand {
|
|
14
15
|
get name() {
|
|
15
16
|
return commands.APP_ROLE_ADD;
|
|
@@ -87,27 +88,29 @@ class EntraAppRoleAddCommand extends GraphCommand {
|
|
|
87
88
|
if (this.verbose) {
|
|
88
89
|
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const requestOptions = {
|
|
94
|
-
url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
|
|
95
|
-
headers: {
|
|
96
|
-
accept: 'application/json;odata.metadata=none'
|
|
97
|
-
},
|
|
98
|
-
responseType: 'json'
|
|
99
|
-
};
|
|
100
|
-
const res = await request.get(requestOptions);
|
|
101
|
-
if (res.value.length === 1) {
|
|
102
|
-
return res.value[0].id;
|
|
91
|
+
if (appId) {
|
|
92
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
|
|
93
|
+
return app.id;
|
|
103
94
|
}
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
95
|
+
else {
|
|
96
|
+
const requestOptions = {
|
|
97
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
|
|
98
|
+
headers: {
|
|
99
|
+
accept: 'application/json;odata.metadata=none'
|
|
100
|
+
},
|
|
101
|
+
responseType: 'json'
|
|
102
|
+
};
|
|
103
|
+
const res = await request.get(requestOptions);
|
|
104
|
+
if (res.value.length === 1) {
|
|
105
|
+
return res.value[0].id;
|
|
106
|
+
}
|
|
107
|
+
if (res.value.length === 0) {
|
|
108
|
+
throw `No Microsoft Entra application registration with name ${appName} found`;
|
|
109
|
+
}
|
|
110
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
111
|
+
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
112
|
+
return result.id;
|
|
107
113
|
}
|
|
108
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
109
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
110
|
-
return result.id;
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
_a = EntraAppRoleAddCommand, _EntraAppRoleAddCommand_instances = new WeakSet(), _EntraAppRoleAddCommand_initTelemetry = function _EntraAppRoleAddCommand_initTelemetry() {
|