@vzeta/camunda-api-zod-schemas
Version:
Zod schemas and TypeScript types for Camunda 8 unified API
162 lines (161 loc) • 5.17 kB
JavaScript
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
};