UNPKG

@vzeta/camunda-api-zod-schemas

Version:

Zod schemas and TypeScript types for Camunda 8 unified API

162 lines (161 loc) 5.17 kB
import { z } from "zod"; import { getQueryRequestBodySchema, getEnumFilterSchema, advancedDateTimeFilterSchema, advancedStringFilterSchema, advancedIntegerFilterSchema, getQueryResponseBodySchema, API_VERSION } from "../common.js"; import { variableSchema } from "./variable.js"; const userTaskVariableFilterSchema = variableSchema.pick({ name: true, value: true }); const userTaskStateSchema = z.enum([ "CREATED", "ASSIGNING", "UPDATING", "COMPLETING", "COMPLETED", "CANCELING", "CANCELED", "FAILED" ]); const userTaskSchema = z.object({ state: userTaskStateSchema, processDefinitionVersion: z.number(), processDefinitionId: z.string(), processName: z.string().optional(), processInstanceKey: z.string(), processDefinitionKey: z.string(), name: z.string().optional(), elementId: z.string(), elementInstanceKey: z.string(), tenantId: z.string(), userTaskKey: z.string(), assignee: z.string().optional(), candidateGroups: z.array(z.string()), candidateUsers: z.array(z.string()), dueDate: z.string().optional(), followUpDate: z.string().optional(), creationDate: z.string(), completionDate: z.string().optional(), customHeaders: z.record(z.string(), z.unknown()).optional(), formKey: z.string().optional(), externalFormReference: z.string().optional(), priority: z.number().int().min(0).max(100) }); const getUserTask = { method: "GET", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}` }; const queryUserTasksRequestBodySchema = getQueryRequestBodySchema({ sortFields: ["creationDate", "completionDate", "followUpDate", "dueDate", "priority"], filter: userTaskSchema.pick({ state: true, elementId: true, tenantId: true, processDefinitionId: true, userTaskKey: true, processDefinitionKey: true, processInstanceKey: true, elementInstanceKey: true }).extend({ assignee: advancedStringFilterSchema, priority: advancedIntegerFilterSchema, candidateGroup: advancedStringFilterSchema, candidateUser: advancedStringFilterSchema, creationDate: advancedDateTimeFilterSchema, completionDate: advancedDateTimeFilterSchema, followUpDate: advancedDateTimeFilterSchema, dueDate: advancedDateTimeFilterSchema, localVariables: z.array(userTaskVariableFilterSchema), processInstanceVariables: z.array(userTaskVariableFilterSchema), state: getEnumFilterSchema(userTaskStateSchema) }).partial() }); const queryUserTasksResponseBodySchema = getQueryResponseBodySchema(userTaskSchema); const queryUserTasks = { method: "POST", getUrl: () => `/${API_VERSION}/user-tasks/search` }; const formSchema = z.object({ formKey: z.string(), tenantId: z.string(), bpmnId: z.string(), schema: z.string(), version: z.number() }); const getUserTaskForm = { method: "GET", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}/form` }; const updateUserTaskRequestBodySchema = z.object({ changeset: userTaskSchema.pick({ dueDate: true, followUpDate: true, candidateUsers: true, candidateGroups: true, priority: true }).partial(), action: z.string().optional() }); const updateUserTask = { method: "PATCH", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}` }; const getTask = { method: "GET", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}` }; const assignTaskRequestBodySchema = z.object({ assignee: z.string(), allowOverride: z.boolean().optional(), action: z.string().optional() }); const assignTask = { method: "POST", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}/assignment` }; const unassignTaskRequestBodySchema = z.object({ action: z.string().optional() }); const unassignTask = { method: "DELETE", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}/assignee` }; const completeTaskRequestBodySchema = z.object({ variables: z.record(z.string(), z.unknown()), action: z.string().optional() }); const completeTask = { method: "POST", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}/completion` }; const queryVariablesByUserTaskRequestBodySchema = getQueryRequestBodySchema({ sortFields: ["name", "value", "fullValue", "tenantId", "variableKey", "scopeKey", "processInstanceKey"], filter: z.object({ name: advancedStringFilterSchema.optional() }) }); const queryVariablesByUserTaskResponseBodySchema = getQueryResponseBodySchema(variableSchema); const queryVariablesByUserTask = { method: "POST", getUrl: ({ userTaskKey }) => `/${API_VERSION}/user-tasks/${userTaskKey}/variables/search` }; export { assignTask, assignTaskRequestBodySchema, completeTask, completeTaskRequestBodySchema, formSchema, getTask, getUserTask, getUserTaskForm, queryUserTasks, queryUserTasksRequestBodySchema, queryUserTasksResponseBodySchema, queryVariablesByUserTask, queryVariablesByUserTaskRequestBodySchema, queryVariablesByUserTaskResponseBodySchema, unassignTask, unassignTaskRequestBodySchema, updateUserTask, updateUserTaskRequestBodySchema, userTaskSchema, userTaskStateSchema };