@aot-tech/clockify-mcp-server
Version:
MCP Server for Clockify time tracking integration with AI tools
84 lines (83 loc) • 3.64 kB
JavaScript
;
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();