import { CLICKUP_CUSTOM_FIELD_SCHEMA } from "@automate.ax/integration-contracts/clickup" import * as z from "zod" import { defineAction } from "../../../automation/actions" import { CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT, CLICKUP_ID_SCHEMA, CLICKUP_VOID_RESPONSE_SCHEMA, getClickUpApi, } from "./lib" const CUSTOM_FIELDS_RESPONSE_SCHEMA = z.object({ fields: CLICKUP_CUSTOM_FIELD_SCHEMA.array(), }) const INCLUDE_APPLIED_OBJECTS_SCHEMA = z.object({ includeAppliedObjects: z.boolean().prefault(true), }) export const listClickUpWorkspaceCustomFields = defineAction( "List ClickUp Workspace Custom Fields", ) .describe("Lists Custom Fields created at Workspace scope.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input( INCLUDE_APPLIED_OBJECTS_SCHEMA.extend({ workspaceId: CLICKUP_ID_SCHEMA }), ) .output(CUSTOM_FIELDS_RESPONSE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => getClickUpApi(account).request(`team/${input.workspaceId}/field`, { query: { includeAppliedObjects: input.includeAppliedObjects }, responseSchema: CUSTOM_FIELDS_RESPONSE_SCHEMA, }), ) export const listClickUpSpaceCustomFields = defineAction( "List ClickUp Space Custom Fields", ) .describe("Lists Custom Fields available at Space scope.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input(INCLUDE_APPLIED_OBJECTS_SCHEMA.extend({ spaceId: CLICKUP_ID_SCHEMA })) .output(CUSTOM_FIELDS_RESPONSE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => getClickUpApi(account).request(`space/${input.spaceId}/field`, { query: { includeAppliedObjects: input.includeAppliedObjects }, responseSchema: CUSTOM_FIELDS_RESPONSE_SCHEMA, }), ) export const listClickUpFolderCustomFields = defineAction( "List ClickUp Folder Custom Fields", ) .describe("Lists Custom Fields available at Folder scope.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input(INCLUDE_APPLIED_OBJECTS_SCHEMA.extend({ folderId: CLICKUP_ID_SCHEMA })) .output(CUSTOM_FIELDS_RESPONSE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => getClickUpApi(account).request(`folder/${input.folderId}/field`, { query: { includeAppliedObjects: input.includeAppliedObjects }, responseSchema: CUSTOM_FIELDS_RESPONSE_SCHEMA, }), ) export const listClickUpListCustomFields = defineAction( "List ClickUp List Custom Fields", ) .describe("Lists Custom Fields available to tasks in a List.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input(INCLUDE_APPLIED_OBJECTS_SCHEMA.extend({ listId: CLICKUP_ID_SCHEMA })) .output(CUSTOM_FIELDS_RESPONSE_SCHEMA) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => getClickUpApi(account).request(`list/${input.listId}/field`, { query: { includeAppliedObjects: input.includeAppliedObjects }, responseSchema: CUSTOM_FIELDS_RESPONSE_SCHEMA, }), ) /** Sets one Custom Field value on a ClickUp task. */ export const setClickUpTaskCustomField = defineAction( "Set ClickUp task Custom Field", ) .describe("Sets one applicable Custom Field value on a ClickUp task.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input( z.object({ fieldId: CLICKUP_ID_SCHEMA, taskId: CLICKUP_ID_SCHEMA, value: z.json(), }), ) .retry({ replaySafety: "safe" }) .handler(async ({ account, input }) => getClickUpApi(account).request( `task/${input.taskId}/field/${input.fieldId}`, { body: { value: input.value }, method: "POST", responseSchema: CLICKUP_VOID_RESPONSE_SCHEMA, }, ), ) /** Removes one Custom Field value from a ClickUp task. */ export const removeClickUpTaskCustomField = defineAction( "Remove ClickUp task Custom Field", ) .describe("Removes a Custom Field value without deleting the field option.") .account(CLICKUP_ACCOUNT, CLICKUP_ACCOUNT_REQUIREMENT) .input(z.object({ fieldId: CLICKUP_ID_SCHEMA, taskId: CLICKUP_ID_SCHEMA })) .retry({ replaySafety: "unsafe" }) .handler(async ({ account, input }) => getClickUpApi(account).request( `task/${input.taskId}/field/${input.fieldId}`, { method: "DELETE", responseSchema: CLICKUP_VOID_RESPONSE_SCHEMA }, ), )