Skip to main content
Glama
custom-field.service.ts3.72 kB
import axios, { AxiosInstance } from "axios"; import { logger } from "../../logger.js"; import { ClickUpCustomField, SetTaskCustomFieldValueParams, RemoveTaskCustomFieldValueParams, GetCustomFieldsParams, ClickUpSuccessResponse, } from "../../types.js"; export class CustomFieldService { private client: AxiosInstance; constructor(client: AxiosInstance) { this.client = client; } async getCustomFields(listId: string): Promise<ClickUpCustomField[]> { logger.debug(`Fetching custom fields for list ID: ${listId}`); try { const response = await this.client.get<{ fields: ClickUpCustomField[] }>( `/v2/list/${listId}/field`, {}, ); return response.data.fields; } catch (error) { if (axios.isAxiosError(error)) { logger.error( `Axios error fetching custom fields for list ${listId}: ${error.message}`, { status: error.response?.status, data: error.response?.data, url: error.config?.url, }, ); } else if (error instanceof Error) { logger.error( `Generic error fetching custom fields for list ${listId}: ${error.message}`, ); } throw new Error( `Failed to retrieve custom fields for list ${listId} from ClickUp`, ); } } async setTaskCustomFieldValue( params: SetTaskCustomFieldValueParams, ): Promise<ClickUpSuccessResponse> { const { task_id, field_id, value, value_options } = params; logger.debug( `Setting custom field ${field_id} for task ${task_id} with value: ${JSON.stringify( value, )}`, ); const requestBody: { value: any; value_options?: any } = { value }; if (value_options) { requestBody.value_options = value_options; } try { const response = await this.client.post<ClickUpSuccessResponse>( `/v2/task/${task_id}/field/${field_id}`, requestBody, {}, ); return response.data; } catch (error) { if (axios.isAxiosError(error)) { logger.error( `Axios error setting custom field ${field_id} for task ${task_id}: ${error.message}`, { status: error.response?.status, data: error.response?.data, url: error.config?.url, }, ); } else if (error instanceof Error) { logger.error( `Generic error setting custom field ${field_id} for task ${task_id}: ${error.message}`, ); } throw new Error( `Failed to set custom field ${field_id} for task ${task_id} in ClickUp`, ); } } async removeTaskCustomFieldValue( params: RemoveTaskCustomFieldValueParams, ): Promise<ClickUpSuccessResponse> { const { task_id, field_id } = params; logger.debug(`Removing custom field ${field_id} for task ${task_id}`); try { const response = await this.client.delete<ClickUpSuccessResponse>( `/v2/task/${task_id}/field/${field_id}`, {}, ); return response.data; } catch (error) { if (axios.isAxiosError(error)) { logger.error( `Axios error removing custom field ${field_id} for task ${task_id}: ${error.message}`, { status: error.response?.status, data: error.response?.data, url: error.config?.url, }, ); } else if (error instanceof Error) { logger.error( `Generic error removing custom field ${field_id} for task ${task_id}: ${error.message}`, ); } throw new Error( `Failed to remove custom field ${field_id} for task ${task_id} from ClickUp`, ); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nazruden/clickup-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server