@amaster.ai/bpm-client 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +303 -0
- package/dist/index.cjs +298 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +179 -0
- package/dist/index.d.ts +179 -0
- package/dist/index.js +296 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Amaster Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# @amaster.ai/bpm-client
|
|
2
|
+
|
|
3
|
+
Camunda 7 BPM process engine client with full TypeScript support.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🔄 Process instance management (start, query, delete)
|
|
8
|
+
- ✅ Task management (query, complete, forms)
|
|
9
|
+
- 📊 History queries for processes and tasks
|
|
10
|
+
- 📅 Automatic date format conversion for Camunda
|
|
11
|
+
- 🔐 Type-safe variable handling
|
|
12
|
+
- 🌳 Tree-shakeable ESM/CJS builds
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pnpm add @amaster.ai/bpm-client @amaster.ai/http-client axios
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { createBpmClient } from "@amaster.ai/bpm-client";
|
|
24
|
+
|
|
25
|
+
const bpm = createBpmClient();
|
|
26
|
+
|
|
27
|
+
// Start a process
|
|
28
|
+
const result = await bpm.startProcess("order-process", {
|
|
29
|
+
orderId: "12345",
|
|
30
|
+
amount: 99.99,
|
|
31
|
+
dueDate: new Date(),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
if (result.data) {
|
|
35
|
+
console.log("Process started:", result.data.id);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## API Reference
|
|
40
|
+
|
|
41
|
+
### Process Instance Management
|
|
42
|
+
|
|
43
|
+
#### `startProcess(processKey, inputs?)`
|
|
44
|
+
|
|
45
|
+
Start a new process instance.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
// Simple variables (auto-typed)
|
|
49
|
+
await bpm.startProcess("order-process", {
|
|
50
|
+
orderId: "12345",
|
|
51
|
+
amount: 99.99,
|
|
52
|
+
approved: false,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Explicit variable types
|
|
56
|
+
await bpm.startProcess("order-process", {
|
|
57
|
+
variables: {
|
|
58
|
+
orderId: { value: "12345", type: "String" },
|
|
59
|
+
amount: { value: 99.99, type: "Double" },
|
|
60
|
+
dueDate: { value: new Date(), type: "Date" },
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
#### `getProcessInstances(params?)`
|
|
66
|
+
|
|
67
|
+
Query process instances.
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
const result = await bpm.getProcessInstances({
|
|
71
|
+
processDefinitionKey: "order-process",
|
|
72
|
+
active: true,
|
|
73
|
+
firstResult: 0,
|
|
74
|
+
maxResults: 20,
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### `getProcessInstance(processInstanceId)`
|
|
79
|
+
|
|
80
|
+
Get a single process instance.
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
const result = await bpm.getProcessInstance("process-123");
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
#### `deleteProcessInstance(processInstanceId, params?)`
|
|
87
|
+
|
|
88
|
+
Delete a process instance.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
await bpm.deleteProcessInstance("process-123", {
|
|
92
|
+
skipCustomListeners: true,
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### `getActiveActivities(processInstanceId)`
|
|
97
|
+
|
|
98
|
+
Get active activities in a process.
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const result = await bpm.getActiveActivities("process-123");
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Task Management
|
|
105
|
+
|
|
106
|
+
#### `getTasks(params?)`
|
|
107
|
+
|
|
108
|
+
Query tasks.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
const result = await bpm.getTasks({
|
|
112
|
+
processInstanceId: "process-123",
|
|
113
|
+
assignee: "john",
|
|
114
|
+
sortBy: "created",
|
|
115
|
+
sortOrder: "desc",
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### `getTaskCount(params?)`
|
|
120
|
+
|
|
121
|
+
Get task count.
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
const result = await bpm.getTaskCount({
|
|
125
|
+
assignee: "john",
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### `getTask(taskId)`
|
|
130
|
+
|
|
131
|
+
Get a single task.
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
const result = await bpm.getTask("task-123");
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### `getTaskFormSchema(taskId, opts?)`
|
|
138
|
+
|
|
139
|
+
Get task form schema.
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
const result = await bpm.getTaskFormSchema("task-123");
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### `getTaskFormVariables(taskId)`
|
|
146
|
+
|
|
147
|
+
Get task form variables.
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
const result = await bpm.getTaskFormVariables("task-123");
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### `completeTask(taskId, inputs)`
|
|
154
|
+
|
|
155
|
+
Complete a task.
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
await bpm.completeTask("task-123", {
|
|
159
|
+
approved: true,
|
|
160
|
+
comment: "Looks good",
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### History Queries
|
|
165
|
+
|
|
166
|
+
#### `getHistoryTasks(params?)`
|
|
167
|
+
|
|
168
|
+
Query history tasks.
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
const result = await bpm.getHistoryTasks({
|
|
172
|
+
taskAssignee: "john",
|
|
173
|
+
finished: true,
|
|
174
|
+
processInstanceId: "process-123",
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
#### `getHistoryProcessInstances(params?)`
|
|
179
|
+
|
|
180
|
+
Query history process instances.
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
const result = await bpm.getHistoryProcessInstances({
|
|
184
|
+
processDefinitionKey: "order-process",
|
|
185
|
+
finished: true,
|
|
186
|
+
startedBy: "john",
|
|
187
|
+
sortBy: "startTime",
|
|
188
|
+
sortOrder: "desc",
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### `getHistoryProcessInstance(processInstanceId)`
|
|
193
|
+
|
|
194
|
+
Get a single history process instance.
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
const result = await bpm.getHistoryProcessInstance("process-123");
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
#### `getProcessVariables(params)`
|
|
201
|
+
|
|
202
|
+
Get process variables.
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
const result = await bpm.getProcessVariables({
|
|
206
|
+
processInstanceId: "process-123",
|
|
207
|
+
variableName: "orderId", // optional
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Variable Types
|
|
212
|
+
|
|
213
|
+
Camunda supports the following variable types:
|
|
214
|
+
|
|
215
|
+
- `String` - Text values
|
|
216
|
+
- `Boolean` - true/false
|
|
217
|
+
- `Integer` - 32-bit integers
|
|
218
|
+
- `Long` - 64-bit integers (default for JS numbers)
|
|
219
|
+
- `Double` - Floating point numbers
|
|
220
|
+
- `Date` - Date/time values
|
|
221
|
+
- `Json` - Complex objects
|
|
222
|
+
|
|
223
|
+
### Auto Type Inference
|
|
224
|
+
|
|
225
|
+
Variables are automatically typed based on their JavaScript type:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
{
|
|
229
|
+
name: "John", // → String
|
|
230
|
+
age: 30, // → Long
|
|
231
|
+
price: 99.99, // → Double
|
|
232
|
+
active: true, // → Boolean
|
|
233
|
+
created: new Date(), // → Date
|
|
234
|
+
meta: { foo: 1 } // → Json
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Explicit Types
|
|
239
|
+
|
|
240
|
+
You can also specify types explicitly:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
{
|
|
244
|
+
variables: {
|
|
245
|
+
orderId: { value: "12345", type: "String" },
|
|
246
|
+
amount: { value: 100, type: "Integer" }, // Force Integer instead of Long
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Date Handling
|
|
252
|
+
|
|
253
|
+
Dates are automatically converted to Camunda format:
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// Input
|
|
257
|
+
{ dueDate: new Date("2026-01-05T10:30:45.000Z") }
|
|
258
|
+
|
|
259
|
+
// Sent to Camunda as
|
|
260
|
+
{ dueDate: { value: "2026-01-05T10:30:45.000+0000", type: "Date" } }
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## TypeScript Support
|
|
264
|
+
|
|
265
|
+
Full type definitions for all operations:
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
import type { Task, ProcessInstance } from "@amaster.ai/bpm-client";
|
|
269
|
+
|
|
270
|
+
const tasks: Task[] = result.data || [];
|
|
271
|
+
const process: ProcessInstance | null = result.data;
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Error Handling
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
const result = await bpm.startProcess("order-process", { orderId: "123" });
|
|
278
|
+
|
|
279
|
+
if (result.error) {
|
|
280
|
+
console.error("Error:", result.error.message);
|
|
281
|
+
console.error("Status:", result.error.status);
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Custom HTTP Client
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
import { createHttpClient } from "@amaster.ai/http-client";
|
|
289
|
+
import { createBpmClient } from "@amaster.ai/bpm-client";
|
|
290
|
+
import axios from "axios";
|
|
291
|
+
|
|
292
|
+
const axiosInstance = axios.create({
|
|
293
|
+
baseURL: "https://api.example.com",
|
|
294
|
+
timeout: 5000,
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
const httpClient = createHttpClient(axiosInstance);
|
|
298
|
+
const bpmClient = createBpmClient(httpClient);
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## License
|
|
302
|
+
|
|
303
|
+
MIT
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var httpClient = require('@amaster.ai/http-client');
|
|
4
|
+
|
|
5
|
+
// src/bpm-client.ts
|
|
6
|
+
function isVariableSubmission(x) {
|
|
7
|
+
return x !== null && x !== void 0 && typeof x === "object" && "variables" in x && typeof x.variables === "object" && x.variables !== null;
|
|
8
|
+
}
|
|
9
|
+
function formatDateForCamunda(date) {
|
|
10
|
+
let isoString;
|
|
11
|
+
if (date instanceof Date) {
|
|
12
|
+
isoString = date.toISOString();
|
|
13
|
+
} else if (typeof date === "number") {
|
|
14
|
+
isoString = new Date(date).toISOString();
|
|
15
|
+
} else if (typeof date === "string") {
|
|
16
|
+
try {
|
|
17
|
+
isoString = new Date(date).toISOString();
|
|
18
|
+
} catch {
|
|
19
|
+
isoString = date;
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
isoString = new Date(date).toISOString();
|
|
23
|
+
}
|
|
24
|
+
return isoString.replace(/z$/i, "+0000");
|
|
25
|
+
}
|
|
26
|
+
function inferType(value) {
|
|
27
|
+
if (value === null || value === void 0) {
|
|
28
|
+
return void 0;
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === "string") {
|
|
31
|
+
return "String";
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "boolean") {
|
|
34
|
+
return "Boolean";
|
|
35
|
+
}
|
|
36
|
+
if (typeof value === "number") {
|
|
37
|
+
return Number.isInteger(value) ? "Long" : "Double";
|
|
38
|
+
}
|
|
39
|
+
if (value instanceof Date) {
|
|
40
|
+
return "Date";
|
|
41
|
+
}
|
|
42
|
+
if (typeof value === "object") {
|
|
43
|
+
return "Json";
|
|
44
|
+
}
|
|
45
|
+
return void 0;
|
|
46
|
+
}
|
|
47
|
+
function processVariableValue(v) {
|
|
48
|
+
if (v && typeof v === "object" && "value" in v && ("type" in v || Object.keys(v).length <= 2)) {
|
|
49
|
+
const variable = v;
|
|
50
|
+
if (variable.value instanceof Date) {
|
|
51
|
+
return {
|
|
52
|
+
value: formatDateForCamunda(variable.value),
|
|
53
|
+
type: "Date"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (variable.type === "Date" && (typeof variable.value === "string" || typeof variable.value === "number")) {
|
|
57
|
+
return {
|
|
58
|
+
value: formatDateForCamunda(variable.value),
|
|
59
|
+
type: "Date"
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return variable;
|
|
63
|
+
}
|
|
64
|
+
if (v instanceof Date) {
|
|
65
|
+
return {
|
|
66
|
+
value: formatDateForCamunda(v),
|
|
67
|
+
type: "Date"
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const camundaValue = v;
|
|
71
|
+
return { value: camundaValue, type: inferType(camundaValue) };
|
|
72
|
+
}
|
|
73
|
+
function toVariableSubmission(inputs) {
|
|
74
|
+
if (!inputs) {
|
|
75
|
+
return { variables: {} };
|
|
76
|
+
}
|
|
77
|
+
if (isVariableSubmission(inputs)) {
|
|
78
|
+
const variables2 = {};
|
|
79
|
+
for (const [k, v] of Object.entries(inputs.variables)) {
|
|
80
|
+
variables2[k] = processVariableValue(v);
|
|
81
|
+
}
|
|
82
|
+
return { variables: variables2 };
|
|
83
|
+
}
|
|
84
|
+
const variables = {};
|
|
85
|
+
for (const [k, v] of Object.entries(inputs)) {
|
|
86
|
+
variables[k] = processVariableValue(v);
|
|
87
|
+
}
|
|
88
|
+
return { variables };
|
|
89
|
+
}
|
|
90
|
+
function encodeQuery(params) {
|
|
91
|
+
if (!params) {
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
const sp = new URLSearchParams();
|
|
95
|
+
for (const [k, v] of Object.entries(params)) {
|
|
96
|
+
if (v === void 0 || v === null) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
sp.append(k, String(v));
|
|
100
|
+
}
|
|
101
|
+
const q = sp.toString();
|
|
102
|
+
return q ? `?${q}` : "";
|
|
103
|
+
}
|
|
104
|
+
function noContentToNull(r) {
|
|
105
|
+
if (r.status === 204) {
|
|
106
|
+
return { ...r, data: null };
|
|
107
|
+
}
|
|
108
|
+
return r;
|
|
109
|
+
}
|
|
110
|
+
function createBpmClient(http = httpClient.createHttpClient()) {
|
|
111
|
+
return {
|
|
112
|
+
startProcess(processKey, inputs) {
|
|
113
|
+
if (!processKey) {
|
|
114
|
+
return Promise.resolve({
|
|
115
|
+
data: null,
|
|
116
|
+
error: { message: "Process key is required", status: 400 },
|
|
117
|
+
status: 400
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return http.request({
|
|
121
|
+
url: `/api/bpm/start/${processKey}`,
|
|
122
|
+
method: "post",
|
|
123
|
+
headers: { "Content-Type": "application/json" },
|
|
124
|
+
data: toVariableSubmission(inputs)
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
getProcessInstances(params) {
|
|
128
|
+
return http.request({
|
|
129
|
+
url: `/api/bpm/process-instance${encodeQuery(params)}`,
|
|
130
|
+
method: "get"
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
getProcessInstance(processInstanceId) {
|
|
134
|
+
if (!processInstanceId) {
|
|
135
|
+
return Promise.resolve({
|
|
136
|
+
data: null,
|
|
137
|
+
error: { message: "Process instance ID is required", status: 400 },
|
|
138
|
+
status: 400
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return http.request({
|
|
142
|
+
url: `/api/bpm/process-instance/${processInstanceId}`,
|
|
143
|
+
method: "get"
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
async deleteProcessInstance(processInstanceId, params) {
|
|
147
|
+
if (!processInstanceId) {
|
|
148
|
+
return {
|
|
149
|
+
data: null,
|
|
150
|
+
error: { message: "Process instance ID is required", status: 400 },
|
|
151
|
+
status: 400
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const q = params?.skipCustomListeners ? "?skipCustomListeners=true" : "";
|
|
155
|
+
const result = await http.request({
|
|
156
|
+
url: `/api/bpm/process-instance/${processInstanceId}${q}`,
|
|
157
|
+
method: "delete"
|
|
158
|
+
});
|
|
159
|
+
return noContentToNull(result);
|
|
160
|
+
},
|
|
161
|
+
getActiveActivities(processInstanceId) {
|
|
162
|
+
if (!processInstanceId) {
|
|
163
|
+
return Promise.resolve({
|
|
164
|
+
data: null,
|
|
165
|
+
error: { message: "Process instance ID is required", status: 400 },
|
|
166
|
+
status: 400
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return http.request({
|
|
170
|
+
url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,
|
|
171
|
+
method: "get"
|
|
172
|
+
});
|
|
173
|
+
},
|
|
174
|
+
getTasks(params) {
|
|
175
|
+
return http.request({
|
|
176
|
+
url: `/api/bpm/task${encodeQuery(params)}`,
|
|
177
|
+
method: "get"
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
getTaskCount(params) {
|
|
181
|
+
return http.request({
|
|
182
|
+
url: `/api/bpm/task/count${encodeQuery(params)}`,
|
|
183
|
+
method: "get"
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
getTask(taskId) {
|
|
187
|
+
if (!taskId) {
|
|
188
|
+
return Promise.resolve({
|
|
189
|
+
data: null,
|
|
190
|
+
error: { message: "Task ID is required", status: 400 },
|
|
191
|
+
status: 400
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return http.request({
|
|
195
|
+
url: `/api/bpm/task/${taskId}`,
|
|
196
|
+
method: "get"
|
|
197
|
+
});
|
|
198
|
+
},
|
|
199
|
+
getTaskFormSchema(taskId, opts) {
|
|
200
|
+
if (!taskId) {
|
|
201
|
+
return Promise.resolve({
|
|
202
|
+
data: null,
|
|
203
|
+
error: { message: "Task ID is required", status: 400 },
|
|
204
|
+
status: 400
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : void 0);
|
|
208
|
+
return http.request({
|
|
209
|
+
url: `/api/bpm/task/${taskId}/form-schema${q}`,
|
|
210
|
+
method: "get"
|
|
211
|
+
});
|
|
212
|
+
},
|
|
213
|
+
getTaskFormVariables(taskId) {
|
|
214
|
+
if (!taskId) {
|
|
215
|
+
return Promise.resolve({
|
|
216
|
+
data: null,
|
|
217
|
+
error: { message: "Task ID is required", status: 400 },
|
|
218
|
+
status: 400
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return http.request({
|
|
222
|
+
url: `/api/bpm/task/${taskId}/form-variables`,
|
|
223
|
+
method: "get"
|
|
224
|
+
});
|
|
225
|
+
},
|
|
226
|
+
async completeTask(taskId, inputs) {
|
|
227
|
+
if (!taskId) {
|
|
228
|
+
return {
|
|
229
|
+
data: null,
|
|
230
|
+
error: { message: "Task ID is required", status: 400 },
|
|
231
|
+
status: 400
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const r = await http.request({
|
|
235
|
+
url: `/api/bpm/task/${taskId}/complete`,
|
|
236
|
+
method: "post",
|
|
237
|
+
headers: { "Content-Type": "application/json" },
|
|
238
|
+
data: toVariableSubmission(inputs)
|
|
239
|
+
});
|
|
240
|
+
return noContentToNull(r);
|
|
241
|
+
},
|
|
242
|
+
getHistoryTasks(params) {
|
|
243
|
+
return http.request({
|
|
244
|
+
url: `/api/bpm/history/task${encodeQuery(params)}`,
|
|
245
|
+
method: "get"
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
getHistoryTaskCount(params) {
|
|
249
|
+
return http.request({
|
|
250
|
+
url: `/api/bpm/history/task/count${encodeQuery(params)}`,
|
|
251
|
+
method: "get"
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
getHistoryProcessInstances(params) {
|
|
255
|
+
return http.request({
|
|
256
|
+
url: `/api/bpm/history/process-instance${encodeQuery(params)}`,
|
|
257
|
+
method: "get"
|
|
258
|
+
});
|
|
259
|
+
},
|
|
260
|
+
getHistoryProcessInstanceCount(params) {
|
|
261
|
+
return http.request({
|
|
262
|
+
url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,
|
|
263
|
+
method: "get"
|
|
264
|
+
});
|
|
265
|
+
},
|
|
266
|
+
getHistoryProcessInstance(processInstanceId) {
|
|
267
|
+
if (!processInstanceId) {
|
|
268
|
+
return Promise.resolve({
|
|
269
|
+
data: null,
|
|
270
|
+
error: { message: "Process instance ID is required", status: 400 },
|
|
271
|
+
status: 400
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return http.request({
|
|
275
|
+
url: `/api/bpm/history/process-instance/${processInstanceId}`,
|
|
276
|
+
method: "get"
|
|
277
|
+
});
|
|
278
|
+
},
|
|
279
|
+
getProcessVariables(params) {
|
|
280
|
+
if (!params.processInstanceId) {
|
|
281
|
+
return Promise.resolve({
|
|
282
|
+
data: null,
|
|
283
|
+
error: { message: "Process instance ID is required", status: 400 },
|
|
284
|
+
status: 400
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
const q = encodeQuery(params);
|
|
288
|
+
return http.request({
|
|
289
|
+
url: `/api/bpm/history/variable-instance${q}`,
|
|
290
|
+
method: "get"
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
exports.createBpmClient = createBpmClient;
|
|
297
|
+
//# sourceMappingURL=index.cjs.map
|
|
298
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bpm-client.ts"],"names":["variables","createHttpClient"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\n\nexport type CamundaVariableType =\n | \"String\"\n | \"Boolean\"\n | \"Integer\"\n | \"Long\"\n | \"Double\"\n | \"Date\"\n | \"Json\";\n\nexport type CamundaVariableValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Record<string, unknown>\n | unknown[];\n\nexport type CamundaVariable = {\n value: CamundaVariableValue;\n type?: CamundaVariableType;\n};\n\nexport type VariableSubmission = {\n variables: Record<string, CamundaVariable>;\n};\n\nexport type ProcessInstance = {\n id: string;\n definitionId?: string;\n businessKey?: string;\n ended?: boolean;\n suspended?: boolean;\n};\n\nexport type ProcessInstanceQueryParams = {\n processDefinitionKey?: string;\n active?: boolean;\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type HistoryProcessInstance = {\n id: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processDefinitionName: string;\n processDefinitionVersion: number;\n startTime: string;\n endTime: string | null;\n durationInMillis: number | null;\n startUserId: string;\n startActivityId: string;\n deleteReason: string | null;\n state: string;\n superProcessInstanceId?: string;\n superCaseInstanceId?: string;\n};\n\nexport type HistoryProcessInstanceQueryParams = {\n startedBy?: string;\n finished?: boolean;\n processDefinitionKey?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type ProcessVariable = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n processInstanceId: string;\n createTime?: string;\n activityInstanceId?: string;\n taskId?: string;\n executionId?: string;\n errorMessage?: string;\n};\n\nexport type ActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n executionId: string;\n startTime: string;\n endTime?: string;\n};\n\nexport type Task = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n created?: string | null;\n due?: string | null;\n priority?: number;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n taskDefinitionKey?: string | null;\n businessKey?: string | null;\n taskState?: string | null;\n};\n\nexport type TaskCount = { count: number };\n\nexport type TaskFormField = {\n id: string;\n label?: string;\n type?: string;\n defaultValue?: CamundaVariableValue;\n properties?: Record<string, unknown>;\n validationConstraints?: Array<{\n name: string;\n config?: unknown;\n }>;\n [key: string]: unknown;\n};\n\nexport type TaskFormSchema = {\n key?: string;\n contextPath?: string;\n fields?: TaskFormField[];\n [key: string]: unknown;\n};\n\nexport type TaskFormVariable = {\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n};\n\nexport type TaskFormVariables = Record<string, TaskFormVariable>;\n\nexport type HistoryTask = {\n id: string;\n name: string;\n assignee: string;\n startTime: string;\n endTime: string;\n duration: number;\n taskState: string;\n processInstanceId: string;\n};\n\nexport type TaskQueryParams = {\n processInstanceId?: string;\n assignee?: string;\n candidateUser?: string;\n candidateGroup?: string;\n name?: string;\n nameLike?: string;\n taskDefinitionKey?: string;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryTaskQueryParams = {\n taskAssignee?: string;\n processInstanceId?: string;\n finished?: boolean;\n unfinished?: boolean;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type BpmClient = {\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>>;\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>>;\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;\n deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>>;\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>>;\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>>;\n getTask(taskId: string): Promise<ClientResult<Task>>;\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>>;\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>>;\n completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>>;\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>>;\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>>;\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>>;\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>>;\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>>;\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>>;\n};\n\nfunction isVariableSubmission(x: unknown): x is VariableSubmission {\n return (\n x !== null &&\n x !== undefined &&\n typeof x === \"object\" &&\n \"variables\" in x &&\n typeof (x as VariableSubmission).variables === \"object\" &&\n (x as VariableSubmission).variables !== null\n );\n}\n\n/**\n * Format Date value to Camunda-compatible ISO 8601 string\n */\nfunction formatDateForCamunda(date: Date | string | number): string {\n let isoString: string;\n\n if (date instanceof Date) {\n isoString = date.toISOString();\n } else if (typeof date === \"number\") {\n isoString = new Date(date).toISOString();\n } else if (typeof date === \"string\") {\n try {\n isoString = new Date(date).toISOString();\n } catch {\n isoString = date;\n }\n } else {\n isoString = new Date(date as number).toISOString();\n }\n\n return isoString.replace(/z$/i, \"+0000\");\n}\n\nfunction inferType(value: CamundaVariableValue): CamundaVariableType | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return \"String\";\n }\n if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Long\" : \"Double\";\n }\n if (value instanceof Date) {\n return \"Date\";\n }\n if (typeof value === \"object\") {\n return \"Json\";\n }\n return undefined;\n}\n\nfunction processVariableValue(v: unknown): CamundaVariable {\n if (v && typeof v === \"object\" && \"value\" in v && (\"type\" in v || Object.keys(v).length <= 2)) {\n const variable = v as CamundaVariable;\n\n if (variable.value instanceof Date) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n if (\n variable.type === \"Date\" &&\n (typeof variable.value === \"string\" || typeof variable.value === \"number\")\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n return variable;\n }\n\n if (v instanceof Date) {\n return {\n value: formatDateForCamunda(v),\n type: \"Date\",\n };\n }\n\n const camundaValue = v as CamundaVariableValue;\n return { value: camundaValue, type: inferType(camundaValue) };\n}\n\nfunction toVariableSubmission(\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n): VariableSubmission {\n if (!inputs) {\n return { variables: {} };\n }\n\n if (isVariableSubmission(inputs)) {\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs.variables)) {\n variables[k] = processVariableValue(v);\n }\n return { variables };\n }\n\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs)) {\n variables[k] = processVariableValue(v);\n }\n\n return { variables };\n}\n\nfunction encodeQuery(params?: Record<string, string | number | boolean | undefined>): string {\n if (!params) {\n return \"\";\n }\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) {\n continue;\n }\n sp.append(k, String(v));\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nfunction noContentToNull<T>(r: ClientResult<T>): ClientResult<T | null> {\n if (r.status === 204) {\n return { ...r, data: null };\n }\n return r;\n}\n\nexport function createBpmClient(http: HttpClient = createHttpClient()): BpmClient {\n return {\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>> {\n if (!processKey) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process key is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/start/${processKey}`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n },\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>> {\n return http.request<ProcessInstance[]>({\n url: `/api/bpm/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n async deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\n }\n const q = params?.skipCustomListeners ? \"?skipCustomListeners=true\" : \"\";\n const result = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}${q}`,\n method: \"delete\",\n });\n return noContentToNull(result) as ClientResult<null>;\n },\n\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstance[]>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>> {\n return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getTask(taskId: string): Promise<ClientResult<Task>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Task>({\n url: `/api/bpm/task/${taskId}`,\n method: \"get\",\n });\n },\n\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : undefined);\n return http.request<TaskFormSchema>({\n url: `/api/bpm/task/${taskId}/form-schema${q}`,\n method: \"get\",\n });\n },\n\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormVariables>({\n url: `/api/bpm/task/${taskId}/form-variables`,\n method: \"get\",\n });\n },\n\n async completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>> {\n if (!taskId) {\n return {\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/complete`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>> {\n return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>> {\n return http.request<HistoryProcessInstance[]>({\n url: `/api/bpm/history/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>> {\n return http.request<{ count: number }>({\n url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<HistoryProcessInstance>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>> {\n if (!params.processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(params);\n return http.request<ProcessVariable[]>({\n url: `/api/bpm/history/variable-instance${q}`,\n method: \"get\",\n });\n },\n };\n}\n"]}
|