UNPKG

@aot-tech/clockify-mcp-server

Version:

MCP Server for Clockify time tracking integration with AI tools

59 lines (58 loc) 2.29 kB
"use strict"; 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();