@pnp/cli-microsoft365 10.3.0-beta.cd20f0c → 10.3.0-beta.df85113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/README.md +11 -6
  3. package/allCommands.json +1 -1
  4. package/allCommandsFull.json +1 -1
  5. package/dist/config.js +2 -1
  6. package/dist/m365/commands/login.js +6 -6
  7. package/dist/m365/entra/commands/app/app-add.js +3 -0
  8. package/dist/m365/entra/commands/approleassignment/approleassignment-remove.js +1 -1
  9. package/dist/m365/entra/commands/group/group-list.js +3 -2
  10. package/dist/m365/entra/commands/pim/pim-role-assignment-remove.js +186 -0
  11. package/dist/m365/entra/commands/roledefinition/roledefinition-add.js +58 -0
  12. package/dist/m365/entra/commands/roledefinition/roledefinition-set.js +84 -0
  13. package/dist/m365/entra/commands/rolepermission/rolepermission-list.js +42 -0
  14. package/dist/m365/entra/commands.js +4 -0
  15. package/dist/m365/exo/commands/approleassignment/approleassignment-add.js +235 -0
  16. package/dist/m365/exo/commands.js +5 -0
  17. package/dist/m365/outlook/commands/mailbox/mailbox-settings-set.js +163 -0
  18. package/dist/m365/outlook/commands.js +1 -0
  19. package/dist/m365/pp/commands/website/website-get.js +60 -0
  20. package/dist/m365/pp/commands.js +2 -1
  21. package/dist/m365/spe/commands/container/container-activate.js +50 -0
  22. package/dist/m365/spe/commands.js +1 -0
  23. package/dist/m365/spo/commands/file/file-roleassignment-add.js +26 -2
  24. package/dist/m365/spo/commands/file/file-roleassignment-remove.js +26 -2
  25. package/dist/m365/spo/commands/folder/folder-roleassignment-add.js +27 -24
  26. package/dist/m365/spo/commands/folder/folder-roleassignment-remove.js +24 -7
  27. package/dist/m365/spo/commands/list/list-defaultvalue-clear.js +184 -0
  28. package/dist/m365/spo/commands/list/list-defaultvalue-list.js +140 -0
  29. package/dist/m365/spo/commands/list/list-defaultvalue-remove.js +181 -0
  30. package/dist/m365/spo/commands/list/list-defaultvalue-set.js +210 -0
  31. package/dist/m365/spo/commands/listitem/listitem-roleassignment-add.js +25 -7
  32. package/dist/m365/spo/commands/listitem/listitem-roleassignment-remove.js +22 -5
  33. package/dist/m365/spo/commands/web/web-roleassignment-add.js +22 -5
  34. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +22 -5
  35. package/dist/m365/spo/commands.js +4 -0
  36. package/dist/m365/tenant/commands/people/people-pronouns-set.js +46 -0
  37. package/dist/m365/tenant/commands/report/report-settings-set.js +47 -0
  38. package/dist/m365/tenant/commands.js +2 -0
  39. package/dist/utils/customAppScope.js +29 -0
  40. package/dist/utils/entraServicePrincipal.js +46 -0
  41. package/dist/utils/powerPlatform.js +38 -0
  42. package/dist/utils/roleDefinition.js +23 -0
  43. package/dist/utils/validation.js +4 -0
  44. package/docs/docs/cmd/entra/app/app-add.mdx +1 -1
  45. package/docs/docs/cmd/entra/pim/pim-role-assignment-remove.mdx +197 -0
  46. package/docs/docs/cmd/entra/roledefinition/roledefinition-add.mdx +131 -0
  47. package/docs/docs/cmd/entra/roledefinition/roledefinition-set.mdx +64 -0
  48. package/docs/docs/cmd/entra/rolepermission/rolepermission-list.mdx +162 -0
  49. package/docs/docs/cmd/exo/approleassignment/approleassignment-add.mdx +170 -0
  50. package/docs/docs/cmd/outlook/mailbox/mailbox-settings-set.mdx +166 -0
  51. package/docs/docs/cmd/pp/website/website-get.mdx +153 -0
  52. package/docs/docs/cmd/spe/container/container-activate.mdx +34 -0
  53. package/docs/docs/cmd/spo/file/file-roleassignment-add.mdx +21 -4
  54. package/docs/docs/cmd/spo/file/file-roleassignment-remove.mdx +21 -3
  55. package/docs/docs/cmd/spo/folder/folder-roleassignment-add.mdx +15 -3
  56. package/docs/docs/cmd/spo/folder/folder-roleassignment-remove.mdx +15 -3
  57. package/docs/docs/cmd/spo/list/list-defaultvalue-clear.mdx +62 -0
  58. package/docs/docs/cmd/spo/list/list-defaultvalue-list.mdx +110 -0
  59. package/docs/docs/cmd/spo/list/list-defaultvalue-remove.mdx +62 -0
  60. package/docs/docs/cmd/spo/list/list-defaultvalue-set.mdx +112 -0
  61. package/docs/docs/cmd/spo/listitem/listitem-roleassignment-add.mdx +15 -3
  62. package/docs/docs/cmd/spo/listitem/listitem-roleassignment-remove.mdx +17 -5
  63. package/docs/docs/cmd/spo/web/web-roleassignment-add.mdx +15 -3
  64. package/docs/docs/cmd/spo/web/web-roleassignment-remove.mdx +15 -3
  65. package/docs/docs/cmd/tenant/people/people-pronouns-set.mdx +82 -0
  66. package/docs/docs/cmd/tenant/report/report-settings-set.mdx +32 -0
  67. package/npm-shrinkwrap.json +54 -74
  68. package/package.json +9 -9
@@ -0,0 +1,235 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { roleDefinition } from '../../../../utils/roleDefinition.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 { entraUser } from '../../../../utils/entraUser.js';
9
+ import { entraGroup } from '../../../../utils/entraGroup.js';
10
+ import { entraAdministrativeUnit } from '../../../../utils/entraAdministrativeUnit.js';
11
+ import { entraServicePrincipal } from '../../../../utils/entraServicePrincipal.js';
12
+ import { zod } from '../../../../utils/zod.js';
13
+ import { customAppScope } from '../../../../utils/customAppScope.js';
14
+ const options = globalOptionsZod
15
+ .extend({
16
+ roleDefinitionId: z.string().optional(),
17
+ roleDefinitionName: z.string().optional(),
18
+ principalId: z.string().optional(),
19
+ principalName: z.string().optional(),
20
+ scope: zod.alias('s', z.enum(['tenant', 'user', 'group', 'administrativeUnit', 'custom'])),
21
+ userId: z.string().optional(),
22
+ userName: z.string().optional(),
23
+ groupId: z.string().optional(),
24
+ groupName: z.string().optional(),
25
+ administrativeUnitId: z.string().optional(),
26
+ administrativeUnitName: z.string().optional(),
27
+ customAppScopeId: z.string().optional(),
28
+ customAppScopeName: z.string().optional()
29
+ })
30
+ .strict();
31
+ class ExoAppRoleAssignmentAddCommand extends GraphCommand {
32
+ get name() {
33
+ return commands.APPROLEASSIGNMENT_ADD;
34
+ }
35
+ get description() {
36
+ return `Grant permissions to an application that's accessing data in Exchange Online and specify which mailboxes an app can access.`;
37
+ }
38
+ get schema() {
39
+ return options;
40
+ }
41
+ getRefinedSchema(schema) {
42
+ return schema
43
+ .refine(options => !options.roleDefinitionId !== !options.roleDefinitionName, {
44
+ message: 'Specify either roleDefinitionId or roleDefinitionName, but not both'
45
+ })
46
+ .refine(options => options.roleDefinitionId || options.roleDefinitionName, {
47
+ message: 'Specify either roleDefinitionId or roleDefinitionName'
48
+ })
49
+ .refine(options => (!options.roleDefinitionId && !options.roleDefinitionName) || options.roleDefinitionName || (options.roleDefinitionId && validation.isValidGuid(options.roleDefinitionId)), options => ({
50
+ message: `The '${options.roleDefinitionId}' must be a valid GUID`,
51
+ path: ['roleDefinitionId']
52
+ }))
53
+ .refine(options => !options.principalId !== !options.principalName, {
54
+ message: 'Specify either principalId or principalName, but not both'
55
+ })
56
+ .refine(options => options.principalId || options.principalName, {
57
+ message: 'Specify either principalId or principalName'
58
+ })
59
+ .refine(options => (!options.principalId && !options.principalName) || options.principalName || (options.principalId && validation.isValidGuid(options.principalId)), options => ({
60
+ message: `The '${options.principalId}' must be a valid GUID`,
61
+ path: ['principalId']
62
+ }))
63
+ .refine(options => options.scope !== 'tenant' || Object.values([options.userId, options.userName, options.groupId, options.groupName, options.administrativeUnitId, options.administrativeUnitName, options.customAppScopeId, options.customAppScopeName]).filter(v => typeof v !== 'undefined').length === 0, {
64
+ message: "When the scope is set to 'tenant' then do not specify neither userId, userName, groupId, groupName, administrativeUnitId, administrativeUnitName, customAppScopeId nor customAppScopeName",
65
+ path: ['scope']
66
+ })
67
+ .refine(options => options.scope !== 'user' || Object.values([options.groupId, options.groupName, options.administrativeUnitId, options.administrativeUnitName, options.customAppScopeId, options.customAppScopeName]).filter(v => typeof v !== 'undefined').length === 0, {
68
+ message: "When the scope is set to 'user' then do not specify groupId, groupName, administrativeUnitId, administrativeUnitName, customAppScopeId nor customAppScopeName",
69
+ path: ['scope']
70
+ })
71
+ .refine(options => options.scope !== 'user' || (!options.userId !== !options.userName), {
72
+ message: "When the scope is set to 'user' specify either userId or userName, but not both",
73
+ path: ['scope']
74
+ })
75
+ .refine(options => options.scope !== 'user' || (options.userId || options.userName), {
76
+ message: "When the scope is set to 'user' specify either userId or userName",
77
+ path: ['scope']
78
+ })
79
+ .refine(options => options.scope !== 'user' || (!options.userId && !options.userName) || options.userName || (options.userId && validation.isValidGuid(options.userId)), options => ({
80
+ message: `The '${options.userId}' must be a valid GUID`,
81
+ path: ['userId']
82
+ }))
83
+ .refine(options => options.scope !== 'user' || (!options.userId && !options.userName) || options.userId || (options.userName && validation.isValidUserPrincipalName(options.userName)), options => ({
84
+ message: `The '${options.userId}' must be a valid GUID`,
85
+ path: ['userName']
86
+ }))
87
+ .refine(options => options.scope !== 'group' || Object.values([options.userId, options.userName, options.administrativeUnitId, options.administrativeUnitName, options.customAppScopeId, options.customAppScopeName]).filter(v => typeof v !== 'undefined').length === 0, {
88
+ message: "When the scope is set to 'group' then do not specify userId, userName, administrativeUnitId, administrativeUnitName, customAppScopeId nor customAppScopeName",
89
+ path: ['scope']
90
+ })
91
+ .refine(options => options.scope !== 'group' || (!options.groupId !== !options.groupName), {
92
+ message: "When the scope is set to 'group' specify either groupId or groupName, but not both",
93
+ path: ['scope']
94
+ })
95
+ .refine(options => options.scope !== 'group' || (options.groupId || options.groupName), {
96
+ message: "When the scope is set to 'group' specify either groupId or groupName",
97
+ path: ['scope']
98
+ })
99
+ .refine(options => options.scope !== 'group' || (!options.groupId && !options.groupName) || options.groupName || (options.groupId && validation.isValidGuid(options.groupId)), options => ({
100
+ message: `The '${options.groupId}' must be a valid GUID`,
101
+ path: ['groupId']
102
+ }))
103
+ .refine(options => options.scope !== 'administrativeUnit' || Object.values([options.userId, options.userName, options.groupId, options.groupName, options.customAppScopeId, options.customAppScopeName]).filter(v => typeof v !== 'undefined').length === 0, {
104
+ message: "When the scope is set to 'administrativeUnit' then do not specify userId, userName, groupId, groupName, customAppScopeId nor customAppScopeName",
105
+ path: ['scope']
106
+ })
107
+ .refine(options => options.scope !== 'administrativeUnit' || (!options.administrativeUnitId !== !options.administrativeUnitName), {
108
+ message: "When the scope is set to 'administrativeUnit' specify either administrativeUnitId or administrativeUnitName, but not both",
109
+ path: ['scope']
110
+ })
111
+ .refine(options => options.scope !== 'administrativeUnit' || (options.administrativeUnitId || options.administrativeUnitName), {
112
+ message: "When the scope is set to 'administrativeUnit' specify either administrativeUnitId or administrativeUnitName",
113
+ path: ['scope']
114
+ })
115
+ .refine(options => options.scope !== 'administrativeUnit' || (!options.administrativeUnitId && !options.administrativeUnitName) || options.administrativeUnitName || (options.administrativeUnitId && validation.isValidGuid(options.administrativeUnitId)), options => ({
116
+ message: `The '${options.administrativeUnitId}' must be a valid GUID`,
117
+ path: ['administrativeUnitId']
118
+ }))
119
+ .refine(options => options.scope !== 'custom' || Object.values([options.userId, options.userName, options.groupId, options.groupName, options.administrativeUnitId, options.administrativeUnitName]).filter(v => typeof v !== 'undefined').length === 0, {
120
+ message: "When the scope is set to 'custom' then do not specify userId, userName, groupId, groupName, administrativeUnitId nor administrativeUnitName",
121
+ path: ['scope']
122
+ })
123
+ .refine(options => options.scope !== 'custom' || (!options.customAppScopeId !== !options.customAppScopeName), {
124
+ message: "When the scope is set to 'custom' specify either customAppScopeId or customAppScopeName, but not both",
125
+ path: ['scope']
126
+ })
127
+ .refine(options => options.scope !== 'custom' || (options.customAppScopeId || options.customAppScopeName), {
128
+ message: "When the scope is set to 'custom' specify either customAppScopeId or customAppScopeName",
129
+ path: ['scope']
130
+ })
131
+ .refine(options => options.scope !== 'custom' || (!options.customAppScopeId && !options.customAppScopeName) || options.customAppScopeName || (options.customAppScopeId && validation.isValidGuid(options.customAppScopeId)), options => ({
132
+ message: `The '${options.customAppScopeId}' must be a valid GUID`,
133
+ path: ['customAppScopeId']
134
+ }));
135
+ }
136
+ async commandAction(logger, args) {
137
+ try {
138
+ const roleDefinitionId = await this.getRoleDefinitionId(args.options, logger);
139
+ const data = {
140
+ roleDefinitionId: roleDefinitionId,
141
+ principalId: await this.getPrincipalId(args.options, logger),
142
+ directoryScopeId: await this.getDirectoryScopeId(args.options),
143
+ appScopeId: await this.getAppScopeId(args.options, logger)
144
+ };
145
+ const requestOptions = {
146
+ url: `${this.resource}/beta/roleManagement/exchange/roleAssignments`,
147
+ headers: {
148
+ accept: 'application/json;odata.metadata=none'
149
+ },
150
+ responseType: 'json',
151
+ data: data
152
+ };
153
+ const response = await request.post(requestOptions);
154
+ await logger.log(response);
155
+ }
156
+ catch (err) {
157
+ this.handleRejectedODataJsonPromise(err);
158
+ }
159
+ }
160
+ async getRoleDefinitionId(options, logger) {
161
+ if (options.roleDefinitionId) {
162
+ return options.roleDefinitionId;
163
+ }
164
+ if (this.verbose) {
165
+ await logger.logToStderr(`Retrieving role definition by its name '${options.roleDefinitionName}'`);
166
+ }
167
+ const role = await roleDefinition.getExchangeRoleDefinitionByDisplayName(options.roleDefinitionName);
168
+ return role.id;
169
+ }
170
+ async getPrincipalId(options, logger) {
171
+ if (options.principalId) {
172
+ return `/ServicePrincipals/${options.principalId}`;
173
+ }
174
+ if (this.verbose) {
175
+ await logger.logToStderr(`Retrieving service principal by its name '${options.principalName}'`);
176
+ }
177
+ const principal = await entraServicePrincipal.getServicePrincipalByAppName(options.principalName, 'id');
178
+ return `/ServicePrincipals/${principal.id}`;
179
+ }
180
+ async getDirectoryScopeId(options) {
181
+ if (options.scope === 'custom') {
182
+ return null;
183
+ }
184
+ let prefix = '/';
185
+ let resourceId = '';
186
+ switch (options.scope) {
187
+ case 'tenant':
188
+ break;
189
+ case 'user':
190
+ prefix = '/users/';
191
+ if (options.userId) {
192
+ resourceId = options.userId;
193
+ }
194
+ else if (options.userName) {
195
+ resourceId = await entraUser.getUserIdByUpn(options.userName);
196
+ }
197
+ break;
198
+ case 'group':
199
+ prefix = '/groups/';
200
+ if (options.groupId) {
201
+ resourceId = options.groupId;
202
+ }
203
+ else if (options.groupName) {
204
+ resourceId = await entraGroup.getGroupIdByDisplayName(options.groupName);
205
+ }
206
+ break;
207
+ case 'administrativeUnit':
208
+ prefix = '/administrativeUnits/';
209
+ if (options.administrativeUnitId) {
210
+ resourceId = options.administrativeUnitId;
211
+ }
212
+ else if (options.administrativeUnitName) {
213
+ const administrativeUnit = await entraAdministrativeUnit.getAdministrativeUnitByDisplayName(options.administrativeUnitName);
214
+ resourceId = administrativeUnit.id;
215
+ }
216
+ break;
217
+ }
218
+ return `${prefix}${resourceId}`;
219
+ }
220
+ async getAppScopeId(options, logger) {
221
+ if (options.scope !== 'custom') {
222
+ return null;
223
+ }
224
+ if (options.customAppScopeId) {
225
+ return options.customAppScopeId;
226
+ }
227
+ if (this.verbose) {
228
+ await logger.logToStderr(`Retrieving custom application scope by its name '${options.customAppScopeName}'`);
229
+ }
230
+ const applicationScopeId = (await customAppScope.getCustomAppScopeByDisplayName(options.customAppScopeName, 'id')).id;
231
+ return applicationScopeId;
232
+ }
233
+ }
234
+ export default new ExoAppRoleAssignmentAddCommand();
235
+ //# sourceMappingURL=approleassignment-add.js.map
@@ -0,0 +1,5 @@
1
+ const prefix = 'exo';
2
+ export default {
3
+ APPROLEASSIGNMENT_ADD: `${prefix} approleassignment add`
4
+ };
5
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1,163 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { zod } from '../../../../utils/zod.js';
4
+ import GraphCommand from '../../../base/GraphCommand.js';
5
+ import commands from '../../commands.js';
6
+ import { validation } from '../../../../utils/validation.js';
7
+ import request from '../../../../request.js';
8
+ import { accessToken } from '../../../../utils/accessToken.js';
9
+ import auth from '../../../../Auth.js';
10
+ const options = globalOptionsZod
11
+ .extend({
12
+ userId: zod.alias('i', z.string().refine(id => validation.isValidGuid(id), id => ({
13
+ message: `'${id}' is not a valid GUID.`
14
+ })).optional()),
15
+ userName: zod.alias('n', z.string().refine(name => validation.isValidUserPrincipalName(name), name => ({
16
+ message: `'${name}' is not a valid UPN.`
17
+ })).optional()),
18
+ dateFormat: z.string().optional(),
19
+ timeFormat: z.string().optional(),
20
+ timeZone: z.string().optional(),
21
+ language: z.string().optional(),
22
+ delegateMeetingMessageDeliveryOptions: z.enum(['sendToDelegateAndInformationToPrincipal', 'sendToDelegateAndPrincipal', 'sendToDelegateOnly']).optional(),
23
+ workingDays: z.string().transform((value) => value.split(',')).pipe(z.enum(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']).array()).optional(),
24
+ workingHoursStartTime: z.string().optional(),
25
+ workingHoursEndTime: z.string().optional(),
26
+ workingHoursTimeZone: z.string().optional(),
27
+ autoReplyExternalAudience: z.enum(['none', 'all', 'contactsOnly']).optional(),
28
+ autoReplyExternalMessage: z.string().optional(),
29
+ autoReplyInternalMessage: z.string().optional(),
30
+ autoReplyStartDateTime: z.string().optional(),
31
+ autoReplyStartTimeZone: z.string().optional(),
32
+ autoReplyEndDateTime: z.string().optional(),
33
+ autoReplyEndTimeZone: z.string().optional(),
34
+ autoReplyStatus: z.enum(['disabled', 'scheduled', 'alwaysEnabled']).optional()
35
+ })
36
+ .strict();
37
+ class OutlookMailboxSettingsSetCommand extends GraphCommand {
38
+ get name() {
39
+ return commands.MAILBOX_SETTINGS_SET;
40
+ }
41
+ get description() {
42
+ return 'Updates user mailbox settings';
43
+ }
44
+ get schema() {
45
+ return options;
46
+ }
47
+ getRefinedSchema(schema) {
48
+ return schema
49
+ .refine(options => [options.workingDays, options.workingHoursStartTime, options.workingHoursEndTime, options.workingHoursTimeZone,
50
+ options.autoReplyStatus, options.autoReplyExternalAudience, options.autoReplyExternalMessage, options.autoReplyInternalMessage,
51
+ options.autoReplyStartDateTime, options.autoReplyStartTimeZone, options.autoReplyEndDateTime, options.autoReplyEndTimeZone,
52
+ options.timeFormat, options.timeZone, options.dateFormat, options.delegateMeetingMessageDeliveryOptions, options.language].filter(o => o !== undefined).length > 0, {
53
+ message: 'Specify at least one of the following options: workingDays, workingHoursStartTime, workingHoursEndTime, workingHoursTimeZone, autoReplyStatus, autoReplyExternalAudience, autoReplyExternalMessage, autoReplyInternalMessage, autoReplyStartDateTime, autoReplyStartTimeZone, autoReplyEndDateTime, autoReplyEndTimeZone, timeFormat, timeZone, dateFormat, delegateMeetingMessageDeliveryOptions, or language'
54
+ });
55
+ }
56
+ async commandAction(logger, args) {
57
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[auth.defaultResource].accessToken);
58
+ let requestUrl = `${this.resource}/v1.0/me/mailboxSettings`;
59
+ if (isAppOnlyAccessToken) {
60
+ if (args.options.userId && args.options.userName) {
61
+ throw 'When running with application permissions either userId or userName is required, but not both';
62
+ }
63
+ const userIdentifier = args.options.userId ?? args.options.userName;
64
+ if (this.verbose) {
65
+ await logger.logToStderr(`Updating mailbox settings for user ${userIdentifier}...`);
66
+ }
67
+ requestUrl = `${this.resource}/v1.0/users('${userIdentifier}')/mailboxSettings`;
68
+ }
69
+ else {
70
+ if (args.options.userId || args.options.userName) {
71
+ throw 'You can update mailbox settings of other users only if CLI is authenticated in app-only mode';
72
+ }
73
+ }
74
+ const requestOptions = {
75
+ url: requestUrl,
76
+ headers: {
77
+ accept: 'application/json;odata.metadata=none'
78
+ },
79
+ responseType: 'json',
80
+ data: this.createRequestBody(args)
81
+ };
82
+ try {
83
+ const result = await request.patch(requestOptions);
84
+ await logger.log(result);
85
+ }
86
+ catch (err) {
87
+ this.handleRejectedODataJsonPromise(err);
88
+ }
89
+ }
90
+ createRequestBody(args) {
91
+ const data = {};
92
+ if (args.options.dateFormat) {
93
+ data.dateFormat = args.options.dateFormat;
94
+ }
95
+ if (args.options.timeFormat) {
96
+ data.timeFormat = args.options.timeFormat;
97
+ }
98
+ if (args.options.timeZone) {
99
+ data.timeZone = args.options.timeZone;
100
+ }
101
+ if (args.options.delegateMeetingMessageDeliveryOptions) {
102
+ data.delegateMeetingMessageDeliveryOptions = args.options.delegateMeetingMessageDeliveryOptions;
103
+ }
104
+ if (args.options.language) {
105
+ data.language = {
106
+ locale: args.options.language
107
+ };
108
+ }
109
+ if (args.options.workingDays || args.options.workingHoursStartTime || args.options.workingHoursEndTime || args.options.workingHoursTimeZone) {
110
+ data['workingHours'] = {};
111
+ }
112
+ if (args.options.workingDays) {
113
+ data.workingHours.daysOfWeek = args.options.workingDays;
114
+ }
115
+ if (args.options.workingHoursStartTime) {
116
+ data.workingHours.startTime = args.options.workingHoursStartTime;
117
+ }
118
+ if (args.options.workingHoursEndTime) {
119
+ data.workingHours.endTime = args.options.workingHoursEndTime;
120
+ }
121
+ if (args.options.workingHoursTimeZone) {
122
+ data.workingHours.timeZone = {
123
+ name: args.options.workingHoursTimeZone
124
+ };
125
+ }
126
+ if (args.options.autoReplyStatus || args.options.autoReplyExternalAudience || args.options.autoReplyExternalMessage || args.options.autoReplyInternalMessage || args.options.autoReplyStartDateTime || args.options.autoReplyStartTimeZone || args.options.autoReplyEndDateTime || args.options.autoReplyEndTimeZone) {
127
+ data['automaticRepliesSetting'] = {};
128
+ }
129
+ if (args.options.autoReplyStatus) {
130
+ data.automaticRepliesSetting['status'] = args.options.autoReplyStatus;
131
+ }
132
+ if (args.options.autoReplyExternalAudience) {
133
+ data.automaticRepliesSetting['externalAudience'] = args.options.autoReplyExternalAudience;
134
+ }
135
+ if (args.options.autoReplyExternalMessage) {
136
+ data.automaticRepliesSetting['externalReplyMessage'] = args.options.autoReplyExternalMessage;
137
+ }
138
+ if (args.options.autoReplyInternalMessage) {
139
+ data.automaticRepliesSetting['internalReplyMessage'] = args.options.autoReplyInternalMessage;
140
+ }
141
+ if (args.options.autoReplyStartDateTime || args.options.autoReplyStartTimeZone) {
142
+ data.automaticRepliesSetting['scheduledStartDateTime'] = {};
143
+ }
144
+ if (args.options.autoReplyStartDateTime) {
145
+ data.automaticRepliesSetting['scheduledStartDateTime']['dateTime'] = args.options.autoReplyStartDateTime;
146
+ }
147
+ if (args.options.autoReplyStartTimeZone) {
148
+ data.automaticRepliesSetting['scheduledStartDateTime']['timeZone'] = args.options.autoReplyStartTimeZone;
149
+ }
150
+ if (args.options.autoReplyEndDateTime || args.options.autoReplyEndTimeZone) {
151
+ data.automaticRepliesSetting['scheduledEndDateTime'] = {};
152
+ }
153
+ if (args.options.autoReplyEndDateTime) {
154
+ data.automaticRepliesSetting['scheduledEndDateTime']['dateTime'] = args.options.autoReplyEndDateTime;
155
+ }
156
+ if (args.options.autoReplyEndTimeZone) {
157
+ data.automaticRepliesSetting['scheduledEndDateTime']['timeZone'] = args.options.autoReplyEndTimeZone;
158
+ }
159
+ return data;
160
+ }
161
+ }
162
+ export default new OutlookMailboxSettingsSetCommand();
163
+ //# sourceMappingURL=mailbox-settings-set.js.map
@@ -1,6 +1,7 @@
1
1
  const prefix = 'outlook';
2
2
  export default {
3
3
  MAIL_SEND: `${prefix} mail send`,
4
+ MAILBOX_SETTINGS_SET: `${prefix} mailbox settings set`,
4
5
  MESSAGE_GET: `${prefix} message get`,
5
6
  MESSAGE_LIST: `${prefix} message list`,
6
7
  MESSAGE_MOVE: `${prefix} message move`,
@@ -0,0 +1,60 @@
1
+ import { globalOptionsZod } from '../../../../Command.js';
2
+ import { powerPlatform } from '../../../../utils/powerPlatform.js';
3
+ import { validation } from '../../../../utils/validation.js';
4
+ import { zod } from '../../../../utils/zod.js';
5
+ import PowerPlatformCommand from '../../../base/PowerPlatformCommand.js';
6
+ import commands from '../../commands.js';
7
+ import { z } from 'zod';
8
+ const options = globalOptionsZod
9
+ .extend({
10
+ url: zod.alias('u', z.string().optional()
11
+ .refine(url => url === undefined || validation.isValidPowerPagesUrl(url) === true, url => ({
12
+ message: `'${url}' is not a valid Power Pages URL.`
13
+ }))),
14
+ id: zod.alias('i', z.string().uuid().optional()),
15
+ name: zod.alias('n', z.string().optional()),
16
+ environmentName: zod.alias('e', z.string())
17
+ }).strict();
18
+ class PpWebSiteGetCommand extends PowerPlatformCommand {
19
+ get name() {
20
+ return commands.WEBSITE_GET;
21
+ }
22
+ get description() {
23
+ return 'Gets information about the specified Power Pages website.';
24
+ }
25
+ defaultProperties() {
26
+ return ['id', 'name', 'websiteUrl', 'tenantId', 'subdomain', 'type', 'status', 'siteVisibility'];
27
+ }
28
+ get schema() {
29
+ return options;
30
+ }
31
+ getRefinedSchema(schema) {
32
+ return schema
33
+ .refine(options => [options.url, options.id, options.name].filter(x => x !== undefined).length === 1, {
34
+ message: `Specify either url, id or name, but not multiple.`
35
+ });
36
+ }
37
+ async commandAction(logger, args) {
38
+ if (this.verbose) {
39
+ await logger.logToStderr(`Retrieving the website...`);
40
+ }
41
+ try {
42
+ let item = null;
43
+ if (args.options.id) {
44
+ item = await powerPlatform.getWebsiteById(args.options.environmentName, args.options.id);
45
+ }
46
+ else if (args.options.name) {
47
+ item = await powerPlatform.getWebsiteByName(args.options.environmentName, args.options.name);
48
+ }
49
+ else if (args.options.url) {
50
+ item = await powerPlatform.getWebsiteByUrl(args.options.environmentName, args.options.url);
51
+ }
52
+ await logger.log(item);
53
+ }
54
+ catch (err) {
55
+ this.handleRejectedODataJsonPromise(err);
56
+ }
57
+ }
58
+ }
59
+ export default new PpWebSiteGetCommand();
60
+ //# sourceMappingURL=website-get.js.map
@@ -33,6 +33,7 @@ export default {
33
33
  SOLUTION_PUBLISHER_LIST: `${prefix} solution publisher list`,
34
34
  SOLUTION_PUBLISHER_REMOVE: `${prefix} solution publisher remove`,
35
35
  TENANT_SETTINGS_LIST: `${prefix} tenant settings list`,
36
- TENANT_SETTINGS_SET: `${prefix} tenant settings set`
36
+ TENANT_SETTINGS_SET: `${prefix} tenant settings set`,
37
+ WEBSITE_GET: `${prefix} website get`
37
38
  };
38
39
  //# sourceMappingURL=commands.js.map
@@ -0,0 +1,50 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _SpeContainerActivateCommand_instances, _SpeContainerActivateCommand_initOptions, _SpeContainerActivateCommand_initTypes;
7
+ import GraphCommand from '../../../base/GraphCommand.js';
8
+ import commands from '../../commands.js';
9
+ import request from '../../../../request.js';
10
+ import { formatting } from '../../../../utils/formatting.js';
11
+ class SpeContainerActivateCommand extends GraphCommand {
12
+ get name() {
13
+ return commands.CONTAINER_ACTIVATE;
14
+ }
15
+ get description() {
16
+ return 'Activates a container';
17
+ }
18
+ constructor() {
19
+ super();
20
+ _SpeContainerActivateCommand_instances.add(this);
21
+ __classPrivateFieldGet(this, _SpeContainerActivateCommand_instances, "m", _SpeContainerActivateCommand_initOptions).call(this);
22
+ __classPrivateFieldGet(this, _SpeContainerActivateCommand_instances, "m", _SpeContainerActivateCommand_initTypes).call(this);
23
+ }
24
+ async commandAction(logger, args) {
25
+ if (this.verbose) {
26
+ await logger.logToStderr(`Activating a container with id '${args.options.id}'...`);
27
+ }
28
+ try {
29
+ const requestOptions = {
30
+ url: `${this.resource}/v1.0/storage/fileStorage/containers/${formatting.encodeQueryParameter(args.options.id)}/activate`,
31
+ headers: {
32
+ 'content-type': 'application/json;odata=nometadata',
33
+ 'accept': 'application/json;odata.metadata=none'
34
+ },
35
+ responseType: 'json'
36
+ };
37
+ await request.post(requestOptions);
38
+ }
39
+ catch (err) {
40
+ this.handleRejectedODataJsonPromise(err);
41
+ }
42
+ }
43
+ }
44
+ _SpeContainerActivateCommand_instances = new WeakSet(), _SpeContainerActivateCommand_initOptions = function _SpeContainerActivateCommand_initOptions() {
45
+ this.options.unshift({ option: '-i, --id <id>' });
46
+ }, _SpeContainerActivateCommand_initTypes = function _SpeContainerActivateCommand_initTypes() {
47
+ this.types.string.push('id');
48
+ };
49
+ export default new SpeContainerActivateCommand();
50
+ //# sourceMappingURL=container-activate.js.map
@@ -1,5 +1,6 @@
1
1
  const prefix = 'spe';
2
2
  export default {
3
+ CONTAINER_ACTIVATE: `${prefix} container activate`,
3
4
  CONTAINER_GET: `${prefix} container get`,
4
5
  CONTAINER_LIST: `${prefix} container list`,
5
6
  CONTAINERTYPE_ADD: `${prefix} containertype add`,
@@ -11,6 +11,7 @@ import { urlUtil } from '../../../../utils/urlUtil.js';
11
11
  import { validation } from '../../../../utils/validation.js';
12
12
  import SpoCommand from '../../../base/SpoCommand.js';
13
13
  import commands from '../../commands.js';
14
+ import { entraGroup } from '../../../../utils/entraGroup.js';
14
15
  class SpoFileRoleAssignmentAddCommand extends SpoCommand {
15
16
  get name() {
16
17
  return commands.FILE_ROLEASSIGNMENT_ADD;
@@ -42,6 +43,20 @@ class SpoFileRoleAssignmentAddCommand extends SpoCommand {
42
43
  const groupPrincipalId = await this.getGroupPrincipalId(args.options, logger);
43
44
  await this.addRoleAssignment(fileUrl, args.options.webUrl, groupPrincipalId, roleDefinitionId);
44
45
  }
46
+ else if (args.options.entraGroupId || args.options.entraGroupName) {
47
+ if (this.verbose) {
48
+ await logger.logToStderr('Retrieving group information...');
49
+ }
50
+ let group;
51
+ if (args.options.entraGroupId) {
52
+ group = await entraGroup.getGroupById(args.options.entraGroupId);
53
+ }
54
+ else {
55
+ group = await entraGroup.getGroupByDisplayName(args.options.entraGroupName);
56
+ }
57
+ const entraSiteUser = await spo.ensureEntraGroup(args.options.webUrl, group);
58
+ await this.addRoleAssignment(fileUrl, args.options.webUrl, entraSiteUser.Id, roleDefinitionId);
59
+ }
45
60
  else {
46
61
  await this.addRoleAssignment(fileUrl, args.options.webUrl, args.options.principalId, roleDefinitionId);
47
62
  }
@@ -93,6 +108,8 @@ _SpoFileRoleAssignmentAddCommand_instances = new WeakSet(), _SpoFileRoleAssignme
93
108
  principalId: typeof args.options.principalId !== 'undefined',
94
109
  upn: typeof args.options.upn !== 'undefined',
95
110
  groupName: typeof args.options.groupName !== 'undefined',
111
+ entraGroupId: typeof args.options.entraGroupId !== 'undefined',
112
+ entraGroupName: typeof args.options.entraGroupName !== 'undefined',
96
113
  roleDefinitionId: typeof args.options.roleDefinitionId !== 'undefined',
97
114
  roleDefinitionName: typeof args.options.roleDefinitionName !== 'undefined'
98
115
  });
@@ -110,6 +127,10 @@ _SpoFileRoleAssignmentAddCommand_instances = new WeakSet(), _SpoFileRoleAssignme
110
127
  option: '--upn [upn]'
111
128
  }, {
112
129
  option: '--groupName [groupName]'
130
+ }, {
131
+ option: '--entraGroupId [entraGroupId]'
132
+ }, {
133
+ option: '--entraGroupName [entraGroupName]'
113
134
  }, {
114
135
  option: '--roleDefinitionId [roleDefinitionId]'
115
136
  }, {
@@ -127,15 +148,18 @@ _SpoFileRoleAssignmentAddCommand_instances = new WeakSet(), _SpoFileRoleAssignme
127
148
  if (args.options.principalId && isNaN(args.options.principalId)) {
128
149
  return `Specified principalId ${args.options.principalId} is not a number`;
129
150
  }
151
+ if (args.options.entraGroupId && !validation.isValidGuid(args.options.entraGroupId)) {
152
+ return `'${args.options.entraGroupId}' is not a valid GUID for option entraGroupId`;
153
+ }
130
154
  if (args.options.roleDefinitionId && isNaN(args.options.roleDefinitionId)) {
131
155
  return `Specified roleDefinitionId ${args.options.roleDefinitionId} is not a number`;
132
156
  }
133
157
  return true;
134
158
  });
135
159
  }, _SpoFileRoleAssignmentAddCommand_initOptionSets = function _SpoFileRoleAssignmentAddCommand_initOptionSets() {
136
- this.optionSets.push({ options: ['fileId', 'fileUrl'] }, { options: ['principalId', 'upn', 'groupName'] }, { options: ['roleDefinitionId', 'roleDefinitionName'] });
160
+ this.optionSets.push({ options: ['fileId', 'fileUrl'] }, { options: ['principalId', 'upn', 'groupName', 'entraGroupId', 'entraGroupName'] }, { options: ['roleDefinitionId', 'roleDefinitionName'] });
137
161
  }, _SpoFileRoleAssignmentAddCommand_initTypes = function _SpoFileRoleAssignmentAddCommand_initTypes() {
138
- this.types.string.push('webUrl', 'fileUrl', 'fileId', 'upn', 'groupName', 'roleDefinitionName');
162
+ this.types.string.push('webUrl', 'fileUrl', 'fileId', 'upn', 'groupName', 'entraGroupId', 'entraGroupName', 'roleDefinitionName');
139
163
  };
140
164
  export default new SpoFileRoleAssignmentAddCommand();
141
165
  //# sourceMappingURL=file-roleassignment-add.js.map