@pnp/cli-microsoft365
Version:
Manage Microsoft 365 and SharePoint Framework projects on any platform
99 lines • 4.06 kB
JavaScript
import { z } from 'zod';
import { globalOptionsZod } from '../../../../Command.js';
import GraphCommand from '../../../base/GraphCommand.js';
import commands from '../../commands.js';
import request from '../../../../request.js';
import { validation } from '../../../../utils/validation.js';
import { odata } from '../../../../utils/odata.js';
export const options = z.strictObject({
...globalOptionsZod.shape,
displayName: z.string().alias('n'),
eventTypeId: z.string().optional().alias('i'),
eventTypeName: z.string().optional().alias('e'),
description: z.string().optional().alias('d'),
triggerDateTime: z.string().optional()
.refine(val => val === undefined || validation.isValidISODateTime(val), {
message: 'The triggerDateTime is not a valid ISO date string'
}),
assetIds: z.string().optional().alias('a'),
keywords: z.string().optional().alias('k')
});
class PurviewRetentionEventAddCommand extends GraphCommand {
get name() {
return commands.RETENTIONEVENT_ADD;
}
get description() {
return 'Creates a retention event';
}
get schema() {
return options;
}
getRefinedSchema(schema) {
return schema
.refine(opts => [opts.eventTypeId, opts.eventTypeName].filter(x => x !== undefined).length === 1, {
error: `Specify either 'eventTypeId' or 'eventTypeName', but not both.`,
params: {
customCode: 'optionSet',
options: ['eventTypeId', 'eventTypeName']
}
})
.refine(opts => opts.assetIds !== undefined || opts.keywords !== undefined, {
error: 'Specify assetIds and/or keywords, but at least one.',
params: {
customCode: 'optionSet',
options: ['assetIds', 'keywords']
}
});
}
async commandAction(logger, args) {
if (this.verbose) {
await logger.logToStderr(`Creating retention event...`);
}
const eventQueries = [];
if (args.options.assetIds) {
eventQueries.push({ queryType: "files", query: args.options.assetIds });
}
if (args.options.keywords) {
eventQueries.push({ queryType: "messages", query: args.options.keywords });
}
const eventTypeId = await this.getEventTypeId(logger, args);
const data = {
'retentionEventType@odata.bind': `https://graph.microsoft.com/v1.0/security/triggerTypes/retentionEventTypes/${eventTypeId}`,
displayName: args.options.displayName,
description: args.options.description,
eventQueries: eventQueries,
eventTriggerDateTime: args.options.triggerDateTime
};
try {
const requestOptions = {
url: `${this.resource}/v1.0/security/triggers/retentionEvents`,
headers: {
accept: 'application/json;odata.metadata=none'
},
responseType: 'json',
data: data
};
const res = await request.post(requestOptions);
await logger.log(res);
}
catch (err) {
this.handleRejectedODataJsonPromise(err);
}
}
async getEventTypeId(logger, args) {
if (args.options.eventTypeId) {
return args.options.eventTypeId;
}
if (this.verbose) {
await logger.logToStderr(`Retrieving the event type id for event type ${args.options.eventTypeName}`);
}
const items = await odata.getAllItems(`${this.resource}/v1.0/security/triggerTypes/retentionEventTypes`);
const eventTypes = items.filter((x) => x.displayName === args.options.eventTypeName);
if (eventTypes.length === 0) {
throw `The specified event type '${args.options.eventTypeName}' does not exist.`;
}
return eventTypes[0].id;
}
}
export default new PurviewRetentionEventAddCommand();
//# sourceMappingURL=retentionevent-add.js.map