UNPKG

@aot-tech/clockify-mcp-server

Version:

MCP Server for Clockify time tracking integration with AI tools

84 lines (83 loc) 3.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reportsService = void 0; const api_1 = require("../config/api"); const logger_1 = require("../utils/logger"); function ReportsService() { async function getDetailedReport(params) { const reportsApi = (0, api_1.getReportsApi)(); const endpoint = `workspaces/${params.workspaceId}/reports/detailed`; const startTime = Date.now(); const body = { dateRangeStart: params.dateRangeStart?.toISOString(), dateRangeEnd: params.dateRangeEnd?.toISOString(), users: params.users && params.users.length > 0 ? { ids: params.users, contains: "CONTAINS", status: "ALL" } : undefined, projects: params.projects && params.projects.length > 0 ? { ids: params.projects, contains: "CONTAINS", status: "ALL" } : undefined, clients: params.clients && params.clients.length > 0 ? { ids: params.clients, contains: "CONTAINS", status: "ALL" } : undefined, tags: params.tags, userGroupIds: params.userGroupIds, includeTimeEntries: params.includeTimeEntries || true, rounding: params.rounding || false, exportType: params.exportType || "JSON", detailedFilter: { options: { totals: "CALCULATE", }, page: 1, pageSize: 100, sortColumn: "ID", }, }; const cleanBody = Object.fromEntries(Object.entries(body).filter(([key, value]) => value !== undefined || key === "detailedFilter")); (0, logger_1.logRequest)(endpoint, "POST", cleanBody); try { const response = await reportsApi.post(endpoint, cleanBody); const duration = Date.now() - startTime; (0, logger_1.logResponse)(endpoint, response.data, duration); return response; } catch (e) { (0, logger_1.logError)(endpoint, e); console.log("Reports API error:", e); throw e; } } async function getSummaryReport(params) { const reportsApi = (0, api_1.getReportsApi)(); const endpoint = `workspaces/${params.workspaceId}/reports/summary`; const startTime = Date.now(); const body = { summaryFilter: { groups: ["USER", "TIMEENTRY"] }, dateRangeStart: params.dateRangeStart?.toISOString(), dateRangeEnd: params.dateRangeEnd?.toISOString(), projects: params.projects && params.projects.length > 0 ? { ids: params.projects, contains: "CONTAINS", status: "ALL" } : undefined, users: params.users && params.users.length > 0 ? { ids: params.users, contains: "CONTAINS", status: "ALL" } : undefined, }; const cleanBody = Object.fromEntries(Object.entries(body).filter(([key, value]) => value !== undefined)); (0, logger_1.logRequest)(endpoint, "POST", cleanBody); try { const response = await reportsApi.post(endpoint, cleanBody); const duration = Date.now() - startTime; (0, logger_1.logResponse)(endpoint, response.data, duration); return response; } catch (e) { (0, logger_1.logError)(endpoint, e); throw e; } } return { getDetailedReport, getSummaryReport }; } exports.reportsService = ReportsService();