UNPKG

n8n

Version:

n8n Workflow Automation Tool

61 lines 2.56 kB
"use strict"; const api_types_1 = require("@n8n/api-types"); const di_1 = require("@n8n/di"); const luxon_1 = require("luxon"); const n8n_workflow_1 = require("n8n-workflow"); const zod_1 = require("zod"); const bad_request_error_1 = require("../../../../errors/response-errors/bad-request.error"); const forbidden_error_1 = require("../../../../errors/response-errors/forbidden.error"); const insights_service_1 = require("../../../../modules/insights/insights.service"); const global_middleware_1 = require("../../shared/middlewares/global.middleware"); const handleError = (error) => { if (error instanceof n8n_workflow_1.UserError) { throw new forbidden_error_1.ForbiddenError(error.message); } throw error; }; const dateFilterValidationSchema = zod_1.z .object({ startDate: zod_1.z.coerce.date().optional(), endDate: zod_1.z.coerce.date().optional(), }) .refine((data) => { if (data.startDate && data.endDate) { return data.startDate <= data.endDate; } return true; }, { message: 'endDate must be the same as or after startDate', path: ['endDate'], }); const insightsHandlers = { getInsightsSummary: [ (0, global_middleware_1.publicApiScope)('insights:read'), async (req, res) => { const query = api_types_1.InsightsDateFilterDto.safeParse(req.query); if (!query.success) { throw new bad_request_error_1.BadRequestError(query.error.errors.map(({ message }) => message).join('; ')); } const validation = dateFilterValidationSchema.safeParse(query.data); if (!validation.success) { throw new bad_request_error_1.BadRequestError(validation.error.errors.map(({ message }) => message).join('; ')); } const endDate = query.data.endDate ?? new Date(); const startDate = query.data.startDate ?? luxon_1.DateTime.now().minus({ days: 7 }).toJSDate(); try { di_1.Container.get(insights_service_1.InsightsService).validateDateFiltersLicense({ startDate, endDate }); } catch (error) { return handleError(error); } const summary = await di_1.Container.get(insights_service_1.InsightsService).getInsightsSummary({ startDate, endDate, projectId: query.data.projectId, }); return res.json(summary); }, ], }; module.exports = insightsHandlers; //# sourceMappingURL=insights.handler.js.map