@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
|
@@ -10,6 +10,7 @@ import { odata } from '../../../../utils/odata.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 EntraAppRoleListCommand extends GraphCommand {
|
|
14
15
|
get name() {
|
|
15
16
|
return commands.APP_ROLE_LIST;
|
|
@@ -45,27 +46,29 @@ class EntraAppRoleListCommand extends GraphCommand {
|
|
|
45
46
|
if (this.verbose) {
|
|
46
47
|
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const requestOptions = {
|
|
52
|
-
url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
|
|
53
|
-
headers: {
|
|
54
|
-
accept: 'application/json;odata.metadata=none'
|
|
55
|
-
},
|
|
56
|
-
responseType: 'json'
|
|
57
|
-
};
|
|
58
|
-
const res = await request.get(requestOptions);
|
|
59
|
-
if (res.value.length === 1) {
|
|
60
|
-
return res.value[0].id;
|
|
49
|
+
if (appId) {
|
|
50
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ["id"]);
|
|
51
|
+
return app.id;
|
|
61
52
|
}
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
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 Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
70
|
+
return result.id;
|
|
65
71
|
}
|
|
66
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
67
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair);
|
|
68
|
-
return result.id;
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
_EntraAppRoleListCommand_instances = new WeakSet(), _EntraAppRoleListCommand_initTelemetry = function _EntraAppRoleListCommand_initTelemetry() {
|
|
@@ -10,6 +10,7 @@ import { formatting } from "../../../../utils/formatting.js";
|
|
|
10
10
|
import { validation } from '../../../../utils/validation.js';
|
|
11
11
|
import GraphCommand from '../../../base/GraphCommand.js';
|
|
12
12
|
import commands from '../../commands.js';
|
|
13
|
+
import { entraApp } from "../../../../utils/entraApp.js";
|
|
13
14
|
class EntraAppRoleRemoveCommand extends GraphCommand {
|
|
14
15
|
get name() {
|
|
15
16
|
return commands.APP_ROLE_REMOVE;
|
|
@@ -46,15 +47,15 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
|
|
|
46
47
|
}
|
|
47
48
|
async processAppRoleDelete(logger, args) {
|
|
48
49
|
const appObjectId = await this.getAppObjectId(args, logger);
|
|
49
|
-
const
|
|
50
|
+
const app = await this.getEntraApp(appObjectId, logger);
|
|
50
51
|
const appRoleDeleteIdentifierNameValue = args.options.name ? `name '${args.options.name}'` : (args.options.claim ? `claim '${args.options.claim}'` : `id '${args.options.id}'`);
|
|
51
52
|
if (this.verbose) {
|
|
52
|
-
await logger.logToStderr(`Deleting role with ${appRoleDeleteIdentifierNameValue} from Microsoft Entra app ${
|
|
53
|
+
await logger.logToStderr(`Deleting role with ${appRoleDeleteIdentifierNameValue} from Microsoft Entra app ${app.id}...`);
|
|
53
54
|
}
|
|
54
55
|
// Find the role search criteria provided by the user.
|
|
55
56
|
const appRoleDeleteIdentifierProperty = args.options.name ? `displayName` : (args.options.claim ? `value` : `id`);
|
|
56
57
|
const appRoleDeleteIdentifierValue = args.options.name ? args.options.name : (args.options.claim ? args.options.claim : args.options.id);
|
|
57
|
-
const appRoleToDelete =
|
|
58
|
+
const appRoleToDelete = app.appRoles.filter((role) => role[appRoleDeleteIdentifierProperty] === appRoleDeleteIdentifierValue);
|
|
58
59
|
if (args.options.name &&
|
|
59
60
|
appRoleToDelete !== undefined &&
|
|
60
61
|
appRoleToDelete.length > 1) {
|
|
@@ -66,38 +67,38 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
|
|
|
66
67
|
}
|
|
67
68
|
const roleToDelete = appRoleToDelete[0];
|
|
68
69
|
if (roleToDelete.isEnabled) {
|
|
69
|
-
await this.disableAppRole(logger,
|
|
70
|
-
await this.deleteAppRole(logger,
|
|
70
|
+
await this.disableAppRole(logger, app, roleToDelete.id);
|
|
71
|
+
await this.deleteAppRole(logger, app, roleToDelete.id);
|
|
71
72
|
}
|
|
72
73
|
else {
|
|
73
|
-
await this.deleteAppRole(logger,
|
|
74
|
+
await this.deleteAppRole(logger, app, roleToDelete.id);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
|
-
async disableAppRole(logger,
|
|
77
|
-
const roleIndex =
|
|
77
|
+
async disableAppRole(logger, app, roleId) {
|
|
78
|
+
const roleIndex = app.appRoles.findIndex((role) => role.id === roleId);
|
|
78
79
|
if (this.verbose) {
|
|
79
80
|
await logger.logToStderr(`Disabling the app role`);
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
+
app.appRoles[roleIndex].isEnabled = false;
|
|
82
83
|
const requestOptions = {
|
|
83
|
-
url: `${this.resource}/v1.0/myorganization/applications/${
|
|
84
|
+
url: `${this.resource}/v1.0/myorganization/applications/${app.id}`,
|
|
84
85
|
headers: {
|
|
85
86
|
accept: 'application/json;odata.metadata=none'
|
|
86
87
|
},
|
|
87
88
|
responseType: 'json',
|
|
88
89
|
data: {
|
|
89
|
-
appRoles:
|
|
90
|
+
appRoles: app.appRoles
|
|
90
91
|
}
|
|
91
92
|
};
|
|
92
93
|
return request.patch(requestOptions);
|
|
93
94
|
}
|
|
94
|
-
async deleteAppRole(logger,
|
|
95
|
+
async deleteAppRole(logger, app, roleId) {
|
|
95
96
|
if (this.verbose) {
|
|
96
97
|
await logger.logToStderr(`Deleting the app role.`);
|
|
97
98
|
}
|
|
98
|
-
const updatedAppRoles =
|
|
99
|
+
const updatedAppRoles = app.appRoles.filter((role) => role.id !== roleId);
|
|
99
100
|
const requestOptions = {
|
|
100
|
-
url: `${this.resource}/v1.0/myorganization/applications/${
|
|
101
|
+
url: `${this.resource}/v1.0/myorganization/applications/${app.id}`,
|
|
101
102
|
headers: {
|
|
102
103
|
accept: 'application/json;odata.metadata=none'
|
|
103
104
|
},
|
|
@@ -108,12 +109,12 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
|
|
|
108
109
|
};
|
|
109
110
|
return request.patch(requestOptions);
|
|
110
111
|
}
|
|
111
|
-
async
|
|
112
|
+
async getEntraApp(appObjectId, logger) {
|
|
112
113
|
if (this.verbose) {
|
|
113
|
-
await logger.logToStderr(`Retrieving app roles information for the Microsoft Entra app ${
|
|
114
|
+
await logger.logToStderr(`Retrieving app roles information for the Microsoft Entra app ${appObjectId}...`);
|
|
114
115
|
}
|
|
115
116
|
const requestOptions = {
|
|
116
|
-
url: `${this.resource}/v1.0/myorganization/applications/${
|
|
117
|
+
url: `${this.resource}/v1.0/myorganization/applications/${appObjectId}?$select=id,appRoles`,
|
|
117
118
|
headers: {
|
|
118
119
|
accept: 'application/json;odata.metadata=none'
|
|
119
120
|
},
|
|
@@ -129,27 +130,29 @@ class EntraAppRoleRemoveCommand extends GraphCommand {
|
|
|
129
130
|
if (this.verbose) {
|
|
130
131
|
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : appName}...`);
|
|
131
132
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const requestOptions = {
|
|
136
|
-
url: `${this.resource}/v1.0/myorganization/applications?$filter=${filter}&$select=id`,
|
|
137
|
-
headers: {
|
|
138
|
-
accept: 'application/json;odata.metadata=none'
|
|
139
|
-
},
|
|
140
|
-
responseType: 'json'
|
|
141
|
-
};
|
|
142
|
-
const res = await request.get(requestOptions);
|
|
143
|
-
if (res.value.length === 1) {
|
|
144
|
-
return res.value[0].id;
|
|
133
|
+
if (appId) {
|
|
134
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
|
|
135
|
+
return app.id;
|
|
145
136
|
}
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
137
|
+
else {
|
|
138
|
+
const requestOptions = {
|
|
139
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(appName)}'&$select=id`,
|
|
140
|
+
headers: {
|
|
141
|
+
accept: 'application/json;odata.metadata=none'
|
|
142
|
+
},
|
|
143
|
+
responseType: 'json'
|
|
144
|
+
};
|
|
145
|
+
const res = await request.get(requestOptions);
|
|
146
|
+
if (res.value.length === 1) {
|
|
147
|
+
return res.value[0].id;
|
|
148
|
+
}
|
|
149
|
+
if (res.value.length === 0) {
|
|
150
|
+
throw `No Microsoft Entra application registration with name ${appName} found`;
|
|
151
|
+
}
|
|
152
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
153
|
+
const result = (await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair));
|
|
154
|
+
return result.id;
|
|
149
155
|
}
|
|
150
|
-
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
151
|
-
const result = (await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registrations with name '${appName}' found.`, resultAsKeyValuePair));
|
|
152
|
-
return result.id;
|
|
153
156
|
}
|
|
154
157
|
}
|
|
155
158
|
_EntraAppRoleRemoveCommand_instances = new WeakSet(), _EntraAppRoleRemoveCommand_initTelemetry = function _EntraAppRoleRemoveCommand_initTelemetry() {
|
|
@@ -10,6 +10,8 @@ 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';
|
|
14
|
+
import { entraApp } from '../../../../utils/entraApp.js';
|
|
13
15
|
class EntraAppSetCommand extends GraphCommand {
|
|
14
16
|
get name() {
|
|
15
17
|
return commands.APP_SET;
|
|
@@ -17,6 +19,9 @@ class EntraAppSetCommand extends GraphCommand {
|
|
|
17
19
|
get description() {
|
|
18
20
|
return 'Updates Entra app registration';
|
|
19
21
|
}
|
|
22
|
+
allowUnknownOptions() {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
20
25
|
constructor() {
|
|
21
26
|
super();
|
|
22
27
|
_EntraAppSetCommand_instances.add(this);
|
|
@@ -29,6 +34,7 @@ class EntraAppSetCommand extends GraphCommand {
|
|
|
29
34
|
async commandAction(logger, args) {
|
|
30
35
|
try {
|
|
31
36
|
let objectId = await this.getAppObjectId(args, logger);
|
|
37
|
+
objectId = await this.updateUnknownOptions(args, objectId);
|
|
32
38
|
objectId = await this.configureUri(args, objectId, logger);
|
|
33
39
|
objectId = await this.configureRedirectUris(args, objectId, logger);
|
|
34
40
|
objectId = await this.updateAllowPublicClientFlows(args, objectId, logger);
|
|
@@ -46,27 +52,46 @@ class EntraAppSetCommand extends GraphCommand {
|
|
|
46
52
|
if (this.verbose) {
|
|
47
53
|
await logger.logToStderr(`Retrieving information about Microsoft Entra app ${appId ? appId : name}...`);
|
|
48
54
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
if (appId) {
|
|
56
|
+
const app = await entraApp.getAppRegistrationByAppId(appId, ['id']);
|
|
57
|
+
return app.id;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const requestOptions = {
|
|
61
|
+
url: `${this.resource}/v1.0/myorganization/applications?$filter=displayName eq '${formatting.encodeQueryParameter(name)}'&$select=id`,
|
|
62
|
+
headers: {
|
|
63
|
+
accept: 'application/json;odata.metadata=none'
|
|
64
|
+
},
|
|
65
|
+
responseType: 'json'
|
|
66
|
+
};
|
|
67
|
+
const res = await request.get(requestOptions);
|
|
68
|
+
if (res.value.length === 1) {
|
|
69
|
+
return res.value[0].id;
|
|
70
|
+
}
|
|
71
|
+
if (res.value.length === 0) {
|
|
72
|
+
throw `No Microsoft Entra application registration with name ${name} found`;
|
|
73
|
+
}
|
|
74
|
+
const resultAsKeyValuePair = formatting.convertArrayToHashTable('id', res.value);
|
|
75
|
+
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
|
|
76
|
+
return result.id;
|
|
62
77
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
78
|
+
}
|
|
79
|
+
async updateUnknownOptions(args, objectId) {
|
|
80
|
+
const unknownOptions = optionsUtils.getUnknownOptions(args.options, this.options);
|
|
81
|
+
if (Object.keys(unknownOptions).length > 0) {
|
|
82
|
+
const requestBody = {};
|
|
83
|
+
optionsUtils.addUnknownOptionsToPayload(requestBody, unknownOptions);
|
|
84
|
+
const requestOptions = {
|
|
85
|
+
url: `${this.resource}/v1.0/myorganization/applications/${objectId}`,
|
|
86
|
+
headers: {
|
|
87
|
+
'content-type': 'application/json;odata.metadata=none'
|
|
88
|
+
},
|
|
89
|
+
responseType: 'json',
|
|
90
|
+
data: requestBody
|
|
91
|
+
};
|
|
92
|
+
await request.patch(requestOptions);
|
|
66
93
|
}
|
|
67
|
-
|
|
68
|
-
const result = await cli.handleMultipleResultsFound(`Multiple Microsoft Entra application registration with name '${name}' found.`, resultAsKeyValuePair);
|
|
69
|
-
return result.id;
|
|
94
|
+
return objectId;
|
|
70
95
|
}
|
|
71
96
|
async updateAllowPublicClientFlows(args, objectId, logger) {
|
|
72
97
|
if (args.options.allowPublicClientFlows === undefined) {
|
|
@@ -270,6 +295,7 @@ _a = EntraAppSetCommand, _EntraAppSetCommand_instances = new WeakSet(), _EntraAp
|
|
|
270
295
|
certificateDisplayName: typeof args.options.certificateDisplayName !== 'undefined',
|
|
271
296
|
allowPublicClientFlows: typeof args.options.allowPublicClientFlows !== 'undefined'
|
|
272
297
|
});
|
|
298
|
+
this.trackUnknownOptions(this.telemetryProperties, args.options);
|
|
273
299
|
});
|
|
274
300
|
}, _EntraAppSetCommand_initOptions = function _EntraAppSetCommand_initOptions() {
|
|
275
301
|
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({
|
|
@@ -9,10 +9,22 @@ import GraphCommand from '../../../base/GraphCommand.js';
|
|
|
9
9
|
import commands from '../../commands.js';
|
|
10
10
|
const policyEndPoints = {
|
|
11
11
|
activitybasedtimeout: "activityBasedTimeoutPolicies",
|
|
12
|
+
adminconsentrequest: "adminConsentRequestPolicy",
|
|
13
|
+
appManagement: "appManagementPolicies",
|
|
14
|
+
authenticationflows: "authenticationFlowsPolicy",
|
|
15
|
+
authenticationmethods: "authenticationMethodsPolicy",
|
|
16
|
+
authenticationstrength: "authenticationStrengthPolicies",
|
|
12
17
|
authorization: "authorizationPolicy",
|
|
13
18
|
claimsmapping: "claimsMappingPolicies",
|
|
19
|
+
conditionalaccess: "conditionalAccessPolicies",
|
|
20
|
+
crosstenantaccess: "crossTenantAccessPolicy",
|
|
21
|
+
defaultappmanagement: "defaultAppManagementPolicy",
|
|
22
|
+
deviceregistration: "deviceRegistrationPolicy",
|
|
23
|
+
featurerolloutpolicy: "featureRolloutPolicies",
|
|
14
24
|
homerealmdiscovery: "homeRealmDiscoveryPolicies",
|
|
15
25
|
identitysecuritydefaultsenforcement: "identitySecurityDefaultsEnforcementPolicy",
|
|
26
|
+
permissiongrant: "permissionGrantPolicies",
|
|
27
|
+
rolemanagement: "roleManagementPolicies",
|
|
16
28
|
tokenissuance: "tokenIssuancePolicies",
|
|
17
29
|
tokenlifetime: "tokenLifetimePolicies"
|
|
18
30
|
};
|
|
@@ -56,15 +68,26 @@ class EntraPolicyListCommand extends GraphCommand {
|
|
|
56
68
|
}
|
|
57
69
|
async getPolicies(policyType) {
|
|
58
70
|
const endpoint = policyEndPoints[policyType];
|
|
71
|
+
let requestUrl = `${this.resource}/v1.0/policies/${endpoint}`;
|
|
72
|
+
if (endpoint === policyEndPoints.rolemanagement) {
|
|
73
|
+
// roleManagementPolicies endpoint requires $filter query parameter
|
|
74
|
+
requestUrl += `?$filter=scopeId eq '/' and scopeType eq 'DirectoryRole'`;
|
|
75
|
+
}
|
|
59
76
|
const requestOptions = {
|
|
60
|
-
url:
|
|
77
|
+
url: requestUrl,
|
|
61
78
|
headers: {
|
|
62
79
|
accept: 'application/json;odata.metadata=none'
|
|
63
80
|
},
|
|
64
81
|
responseType: 'json'
|
|
65
82
|
};
|
|
66
83
|
const response = await request.get(requestOptions);
|
|
67
|
-
if (endpoint === policyEndPoints.
|
|
84
|
+
if (endpoint === policyEndPoints.adminconsentrequest ||
|
|
85
|
+
endpoint === policyEndPoints.authenticationflows ||
|
|
86
|
+
endpoint === policyEndPoints.authenticationmethods ||
|
|
87
|
+
endpoint === policyEndPoints.authorization ||
|
|
88
|
+
endpoint === policyEndPoints.crosstenantaccess ||
|
|
89
|
+
endpoint === policyEndPoints.defaultappmanagement ||
|
|
90
|
+
endpoint === policyEndPoints.deviceregistration ||
|
|
68
91
|
endpoint === policyEndPoints.identitysecuritydefaultsenforcement) {
|
|
69
92
|
return response;
|
|
70
93
|
}
|
|
@@ -95,6 +118,26 @@ _a = EntraPolicyListCommand, _EntraPolicyListCommand_instances = new WeakSet(),
|
|
|
95
118
|
return true;
|
|
96
119
|
});
|
|
97
120
|
};
|
|
98
|
-
EntraPolicyListCommand.supportedPolicyTypes = [
|
|
121
|
+
EntraPolicyListCommand.supportedPolicyTypes = [
|
|
122
|
+
'activityBasedTimeout',
|
|
123
|
+
'adminConsentRequest',
|
|
124
|
+
'appManagement',
|
|
125
|
+
'authenticationFlows',
|
|
126
|
+
'authenticationMethods',
|
|
127
|
+
'authenticationStrength',
|
|
128
|
+
'authorization',
|
|
129
|
+
'claimsMapping',
|
|
130
|
+
'conditionalAccess',
|
|
131
|
+
'crossTenantAccess',
|
|
132
|
+
'defaultAppManagement',
|
|
133
|
+
'deviceRegistration',
|
|
134
|
+
'featureRolloutPolicy',
|
|
135
|
+
'homeRealmDiscovery',
|
|
136
|
+
'identitySecurityDefaultsEnforcement',
|
|
137
|
+
'permissionGrant',
|
|
138
|
+
'roleManagement',
|
|
139
|
+
'tokenIssuance',
|
|
140
|
+
'tokenLifetime'
|
|
141
|
+
];
|
|
99
142
|
export default new EntraPolicyListCommand();
|
|
100
143
|
//# sourceMappingURL=policy-list.js.map
|
|
@@ -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 =
|
|
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
|
|
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({
|
|
@@ -29,7 +29,7 @@ class FlowListCommand extends PowerAutomateCommand {
|
|
|
29
29
|
}
|
|
30
30
|
async commandAction(logger, args) {
|
|
31
31
|
if (this.verbose) {
|
|
32
|
-
await logger.logToStderr(`Getting Power Automate flows${args.options.asAdmin
|
|
32
|
+
await logger.logToStderr(`Getting Power Automate flows${args.options.asAdmin ? ' as admin' : ''} in environment '${args.options.environmentName}'...`);
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
35
35
|
const { environmentName, asAdmin, sharingStatus, includeSolutions } = args.options;
|
|
@@ -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
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
const options = globalOptionsZod
|
|
9
|
+
.extend({
|
|
10
|
+
resourceId: zod.alias('i', z.string()),
|
|
11
|
+
resourceType: zod.alias('t', z.enum(['user', 'group', 'device', 'organization'])),
|
|
12
|
+
name: zod.alias('n', z.string())
|
|
13
|
+
})
|
|
14
|
+
.strict();
|
|
15
|
+
class GraphOpenExtensionGetCommand extends GraphCommand {
|
|
16
|
+
get name() {
|
|
17
|
+
return commands.OPENEXTENSION_GET;
|
|
18
|
+
}
|
|
19
|
+
get description() {
|
|
20
|
+
return 'Retrieves a specific open extension for a resource';
|
|
21
|
+
}
|
|
22
|
+
get schema() {
|
|
23
|
+
return options;
|
|
24
|
+
}
|
|
25
|
+
getRefinedSchema(schema) {
|
|
26
|
+
return schema
|
|
27
|
+
.refine(options => options.resourceType !== 'group' && options.resourceType !== 'device' && options.resourceType !== 'organization' || (options.resourceId && validation.isValidGuid(options.resourceId)), options => ({
|
|
28
|
+
message: `The '${options.resourceId}' must be a valid GUID`,
|
|
29
|
+
path: ['resourceId']
|
|
30
|
+
}))
|
|
31
|
+
.refine(options => options.resourceType !== 'user' || (options.resourceId && (validation.isValidGuid(options.resourceId) || validation.isValidUserPrincipalName(options.resourceId))), options => ({
|
|
32
|
+
message: `The '${options.resourceId}' must be a valid GUID or user principal name`,
|
|
33
|
+
path: ['resourceId']
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
async commandAction(logger, args) {
|
|
37
|
+
try {
|
|
38
|
+
if (this.verbose) {
|
|
39
|
+
await logger.logToStderr(`Retrieving open extension for resource ${args.options.resourceId}...`);
|
|
40
|
+
}
|
|
41
|
+
const requestOptions = {
|
|
42
|
+
url: `${this.resource}/v1.0/${args.options.resourceType}${args.options.resourceType === 'organization' ? '' : 's'}/${args.options.resourceId}/extensions/${args.options.name}`,
|
|
43
|
+
headers: {
|
|
44
|
+
accept: 'application/json;odata.metadata=none'
|
|
45
|
+
},
|
|
46
|
+
responseType: 'json'
|
|
47
|
+
};
|
|
48
|
+
const res = await request.get(requestOptions);
|
|
49
|
+
await logger.log(res);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
this.handleRejectedODataJsonPromise(err);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export default new GraphOpenExtensionGetCommand();
|
|
57
|
+
//# sourceMappingURL=openextension-get.js.map
|