UNPKG

@djclarkson/clickup-mcp-server

Version:

ClickUp MCP Server - Enhanced fork with task dependency management and parameter fixes

73 lines (72 loc) 2.25 kB
/** * SPDX-FileCopyrightText: © 2025 Talib Kareem <taazkareem@icloud.com> * SPDX-License-Identifier: MIT * * Shared Services Module * * This module maintains singleton instances of services that should be shared * across the application to ensure consistent state. */ import { createClickUpServices } from './clickup/index.js'; import config from '../config.js'; import { Logger } from '../logger.js'; const logger = new Logger('SharedServices'); // Singleton instances let clickUpServicesInstance = null; /** * Get or create the ClickUp services instance */ function getClickUpServices() { if (!clickUpServicesInstance) { logger.info('Creating shared ClickUp services singleton'); // Create the services instance clickUpServicesInstance = createClickUpServices({ apiKey: config.clickupApiKey, teamId: config.clickupTeamId }); // Log what services were initialized with more clarity logger.info('Services initialization complete', { services: Object.keys(clickUpServicesInstance).join(', '), teamId: config.clickupTeamId }); } return clickUpServicesInstance; } // Export the services as lazy-loaded getters export const clickUpServices = new Proxy({}, { get(target, prop) { const services = getClickUpServices(); return services[prop]; } }); // Export individual services for convenience using lazy getters export const listService = new Proxy({}, { get(target, prop) { return getClickUpServices().list[prop]; } }); export const taskService = new Proxy({}, { get(target, prop) { return getClickUpServices().task[prop]; } }); export const folderService = new Proxy({}, { get(target, prop) { return getClickUpServices().folder[prop]; } }); export const workspaceService = new Proxy({}, { get(target, prop) { return getClickUpServices().workspace[prop]; } }); export const timeTrackingService = new Proxy({}, { get(target, prop) { return getClickUpServices().timeTracking[prop]; } }); export const documentService = new Proxy({}, { get(target, prop) { return getClickUpServices().document[prop]; } });