@pnp/cli-microsoft365 10.6.0-beta.36bb898 → 10.6.0-beta.38233e7
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 +4 -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/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/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 +0 -3
- package/docs/docs/cmd/util/accesstoken/accesstoken-get.mdx +72 -0
- package/npm-shrinkwrap.json +515 -479
- package/package.json +14 -14
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;
|
|
@@ -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 =
|
|
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 =
|
|
369
|
-
|
|
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]) {
|
|
@@ -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() {
|