@aot-tech/clockify-mcp-server
Version:
MCP Server for Clockify time tracking integration with AI tools
59 lines (58 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.entriesService = void 0;
const api_1 = require("../config/api");
const node_url_1 = require("node:url");
function EntriesService() {
async function create(entry) {
const body = {
...entry,
workspaceId: undefined,
};
const newApi = (0, api_1.getApi)();
try {
return await newApi.post(`workspaces/${entry.workspaceId}/time-entries`, body);
}
catch (error) {
throw error;
}
}
async function find(filters) {
const searchParams = new node_url_1.URLSearchParams();
if (filters.start) {
searchParams.append("start", filters.start.toISOString());
}
if (filters.end) {
searchParams.append("end", filters.end.toISOString());
}
searchParams.append("page", "1");
searchParams.append("page-size", "200");
const newApi = (0, api_1.getApi)();
const totalEntries = await getTotalEntries(filters.workspaceId, filters.userId, filters.start?.toISOString() || new Date().toISOString(), filters.end?.toISOString() || new Date().toISOString());
const url = `workspaces/${filters.workspaceId}/user/${filters.userId}/time-entries?${searchParams.toString()}`;
try {
const response = await newApi.get(url);
return {
entries: response,
totalEntries: totalEntries,
hasNextPage: totalEntries > (filters.pageSize ?? 10) * (filters.page ?? 0)
};
}
catch (error) {
throw error;
}
}
async function getTotalEntries(workspaceId, userId, start, end) {
const newApi = (0, api_1.getApi)();
const summaryResponse = await newApi.post(`https://reports.api.clockify.me/v1/workspaces/${workspaceId}/reports/summary`, {
"dateRangeStart": start,
"dateRangeEnd": end,
"summaryFilter": { "groups": ["USER", "TIMEENTRY"] },
"users": { "ids": [userId] },
"pageSize": 1
});
return summaryResponse?.data?.totals?.[0]?.entriesCount;
}
return { create, find };
}
exports.entriesService = EntriesService();