@djclarkson/clickup-mcp-server
Version:
ClickUp MCP Server - Enhanced fork with task dependency management and parameter fixes
73 lines (72 loc) • 2.25 kB
JavaScript
/**
* 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];
}
});