UNPKG

@pnp/cli-microsoft365

Version:

Manage Microsoft 365 and SharePoint Framework projects on any platform

99 lines 4.06 kB
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