@camunda8/cli 2.0.0-alpha.10 → 2.0.0-alpha.12

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.
@@ -0,0 +1,438 @@
1
+ /**
2
+ * Search commands
3
+ */
4
+ import { getLogger } from "../logger.js";
5
+ import { createClient } from "../client.js";
6
+ import { resolveTenantId } from "../config.js";
7
+ /**
8
+ * Detect wildcard characters (* or ?) in a string value and return
9
+ * a $like filter object for the API. Returns the plain string for exact match.
10
+ *
11
+ * Supported wildcards (per Camunda REST API LikeFilter):
12
+ * * — matches zero, one, or multiple characters
13
+ * ? — matches exactly one character
14
+ * Escape with backslash: \* or \?
15
+ */
16
+ export const hasUnescapedWildcard = (value) => /(?<!\\)[*?]/.test(value);
17
+ export const toStringFilter = (value) => hasUnescapedWildcard(value) ? { $like: value } : value;
18
+ /**
19
+ * Convert a wildcard pattern (* and ?) to a case-insensitive RegExp.
20
+ * Handles escaped wildcards (\* and \?).
21
+ */
22
+ export const wildcardToRegex = (pattern) => {
23
+ let regex = '';
24
+ for (let i = 0; i < pattern.length; i++) {
25
+ if (pattern[i] === '\\' && i + 1 < pattern.length && (pattern[i + 1] === '*' || pattern[i + 1] === '?')) {
26
+ regex += pattern[i + 1] === '*' ? '\\*' : '\\?';
27
+ i++;
28
+ }
29
+ else if (pattern[i] === '*') {
30
+ regex += '.*';
31
+ }
32
+ else if (pattern[i] === '?') {
33
+ regex += '.';
34
+ }
35
+ else {
36
+ regex += pattern[i].replace(/[[\]{}()+.,\\^$|#]/g, '\\$&');
37
+ }
38
+ }
39
+ return new RegExp(`^${regex}$`, 'i');
40
+ };
41
+ /**
42
+ * Test if a value matches a wildcard pattern case-insensitively.
43
+ * Without wildcards, performs exact case-insensitive match.
44
+ */
45
+ export const matchesCaseInsensitive = (value, pattern) => {
46
+ if (value == null)
47
+ return false;
48
+ return wildcardToRegex(pattern).test(value);
49
+ };
50
+ /** Max page size for case-insensitive search (client-side filtering needs broader result set) */
51
+ const CI_PAGE_SIZE = 1000;
52
+ /**
53
+ * Search process definitions
54
+ */
55
+ export async function searchProcessDefinitions(options) {
56
+ const logger = getLogger();
57
+ const client = createClient(options.profile);
58
+ const tenantId = resolveTenantId(options.profile);
59
+ const hasCiFilter = !!(options.iProcessDefinitionId || options.iName);
60
+ try {
61
+ const filter = {
62
+ filter: {
63
+ tenantId,
64
+ },
65
+ };
66
+ if (hasCiFilter)
67
+ filter.page = { limit: CI_PAGE_SIZE };
68
+ if (options.processDefinitionId) {
69
+ filter.filter.processDefinitionId = toStringFilter(options.processDefinitionId);
70
+ }
71
+ if (options.name) {
72
+ filter.filter.name = toStringFilter(options.name);
73
+ }
74
+ if (options.version !== undefined) {
75
+ filter.filter.version = options.version;
76
+ }
77
+ if (options.key) {
78
+ filter.filter.processDefinitionKey = options.key;
79
+ }
80
+ const result = await client.searchProcessDefinitions(filter, { consistency: { waitUpToMs: 0 } });
81
+ // Client-side case-insensitive post-filtering
82
+ if (hasCiFilter && result.items) {
83
+ result.items = result.items.filter((pd) => {
84
+ if (options.iProcessDefinitionId && !matchesCaseInsensitive(pd.processDefinitionId, options.iProcessDefinitionId))
85
+ return false;
86
+ if (options.iName && !matchesCaseInsensitive(pd.name, options.iName))
87
+ return false;
88
+ return true;
89
+ });
90
+ }
91
+ if (result.items && result.items.length > 0) {
92
+ const tableData = result.items.map((pd) => ({
93
+ Key: pd.processDefinitionKey || pd.key,
94
+ 'Process ID': pd.processDefinitionId,
95
+ Name: pd.name || '-',
96
+ Version: pd.version,
97
+ 'Tenant ID': pd.tenantId,
98
+ }));
99
+ logger.table(tableData);
100
+ logger.info(`Found ${result.items.length} process definition(s)`);
101
+ }
102
+ else {
103
+ logger.info('No process definitions found matching the criteria');
104
+ }
105
+ return result;
106
+ }
107
+ catch (error) {
108
+ logger.error('Failed to search process definitions', error);
109
+ process.exit(1);
110
+ }
111
+ }
112
+ /**
113
+ * Search process instances
114
+ */
115
+ export async function searchProcessInstances(options) {
116
+ const logger = getLogger();
117
+ const client = createClient(options.profile);
118
+ const tenantId = resolveTenantId(options.profile);
119
+ const hasCiFilter = !!options.iProcessDefinitionId;
120
+ try {
121
+ const filter = {
122
+ filter: {
123
+ tenantId,
124
+ },
125
+ };
126
+ if (hasCiFilter)
127
+ filter.page = { limit: CI_PAGE_SIZE };
128
+ if (options.processDefinitionId) {
129
+ filter.filter.processDefinitionId = toStringFilter(options.processDefinitionId);
130
+ }
131
+ if (options.processDefinitionKey) {
132
+ filter.filter.processDefinitionKey = options.processDefinitionKey;
133
+ }
134
+ if (options.state) {
135
+ filter.filter.state = options.state;
136
+ }
137
+ if (options.key) {
138
+ filter.filter.processInstanceKey = options.key;
139
+ }
140
+ if (options.parentProcessInstanceKey) {
141
+ filter.filter.parentProcessInstanceKey = options.parentProcessInstanceKey;
142
+ }
143
+ const result = await client.searchProcessInstances(filter, { consistency: { waitUpToMs: 0 } });
144
+ if (hasCiFilter && result.items) {
145
+ result.items = result.items.filter((pi) => {
146
+ if (options.iProcessDefinitionId && !matchesCaseInsensitive(pi.processDefinitionId, options.iProcessDefinitionId))
147
+ return false;
148
+ return true;
149
+ });
150
+ }
151
+ if (result.items && result.items.length > 0) {
152
+ const tableData = result.items.map((pi) => ({
153
+ Key: pi.processInstanceKey || pi.key,
154
+ 'Process ID': pi.processDefinitionId,
155
+ State: pi.state,
156
+ Version: pi.processDefinitionVersion || pi.version,
157
+ 'Tenant ID': pi.tenantId,
158
+ }));
159
+ logger.table(tableData);
160
+ logger.info(`Found ${result.items.length} process instance(s)`);
161
+ }
162
+ else {
163
+ logger.info('No process instances found matching the criteria');
164
+ }
165
+ return result;
166
+ }
167
+ catch (error) {
168
+ logger.error('Failed to search process instances', error);
169
+ process.exit(1);
170
+ }
171
+ }
172
+ /**
173
+ * Search user tasks
174
+ */
175
+ export async function searchUserTasks(options) {
176
+ const logger = getLogger();
177
+ const client = createClient(options.profile);
178
+ const tenantId = resolveTenantId(options.profile);
179
+ const hasCiFilter = !!options.iAssignee;
180
+ try {
181
+ const filter = {
182
+ filter: {
183
+ tenantId,
184
+ },
185
+ };
186
+ if (hasCiFilter)
187
+ filter.page = { limit: CI_PAGE_SIZE };
188
+ if (options.state) {
189
+ filter.filter.state = options.state;
190
+ }
191
+ if (options.assignee) {
192
+ filter.filter.assignee = toStringFilter(options.assignee);
193
+ }
194
+ if (options.processInstanceKey) {
195
+ filter.filter.processInstanceKey = options.processInstanceKey;
196
+ }
197
+ if (options.processDefinitionKey) {
198
+ filter.filter.processDefinitionKey = options.processDefinitionKey;
199
+ }
200
+ if (options.elementId) {
201
+ filter.filter.elementId = options.elementId;
202
+ }
203
+ const result = await client.searchUserTasks(filter, { consistency: { waitUpToMs: 0 } });
204
+ if (hasCiFilter && result.items) {
205
+ result.items = result.items.filter((task) => {
206
+ if (options.iAssignee && !matchesCaseInsensitive(task.assignee, options.iAssignee))
207
+ return false;
208
+ return true;
209
+ });
210
+ }
211
+ if (result.items && result.items.length > 0) {
212
+ const tableData = result.items.map((task) => ({
213
+ Key: task.userTaskKey || task.key,
214
+ Name: task.name || task.elementId,
215
+ State: task.state,
216
+ Assignee: task.assignee || '(unassigned)',
217
+ 'Process Instance': task.processInstanceKey,
218
+ 'Tenant ID': task.tenantId,
219
+ }));
220
+ logger.table(tableData);
221
+ logger.info(`Found ${result.items.length} user task(s)`);
222
+ }
223
+ else {
224
+ logger.info('No user tasks found matching the criteria');
225
+ }
226
+ return result;
227
+ }
228
+ catch (error) {
229
+ logger.error('Failed to search user tasks', error);
230
+ process.exit(1);
231
+ }
232
+ }
233
+ /**
234
+ * Search incidents
235
+ */
236
+ export async function searchIncidents(options) {
237
+ const logger = getLogger();
238
+ const client = createClient(options.profile);
239
+ const tenantId = resolveTenantId(options.profile);
240
+ const hasCiFilter = !!(options.iErrorMessage || options.iProcessDefinitionId);
241
+ try {
242
+ const filter = {
243
+ filter: {
244
+ tenantId,
245
+ },
246
+ };
247
+ if (hasCiFilter)
248
+ filter.page = { limit: CI_PAGE_SIZE };
249
+ if (options.state) {
250
+ filter.filter.state = options.state;
251
+ }
252
+ if (options.processInstanceKey) {
253
+ filter.filter.processInstanceKey = options.processInstanceKey;
254
+ }
255
+ if (options.processDefinitionKey) {
256
+ filter.filter.processDefinitionKey = options.processDefinitionKey;
257
+ }
258
+ if (options.errorType) {
259
+ filter.filter.errorType = options.errorType;
260
+ }
261
+ if (options.errorMessage) {
262
+ filter.filter.errorMessage = toStringFilter(options.errorMessage);
263
+ }
264
+ if (options.processDefinitionId) {
265
+ filter.filter.processDefinitionId = toStringFilter(options.processDefinitionId);
266
+ }
267
+ const result = await client.searchIncidents(filter, { consistency: { waitUpToMs: 0 } });
268
+ if (hasCiFilter && result.items) {
269
+ result.items = result.items.filter((incident) => {
270
+ if (options.iErrorMessage && !matchesCaseInsensitive(incident.errorMessage, options.iErrorMessage))
271
+ return false;
272
+ if (options.iProcessDefinitionId && !matchesCaseInsensitive(incident.processDefinitionId, options.iProcessDefinitionId))
273
+ return false;
274
+ return true;
275
+ });
276
+ }
277
+ if (result.items && result.items.length > 0) {
278
+ const tableData = result.items.map((incident) => ({
279
+ Key: incident.incidentKey || incident.key,
280
+ Type: incident.errorType,
281
+ Message: incident.errorMessage?.substring(0, 50) || '',
282
+ State: incident.state,
283
+ 'Process Instance': incident.processInstanceKey,
284
+ 'Tenant ID': incident.tenantId,
285
+ }));
286
+ logger.table(tableData);
287
+ logger.info(`Found ${result.items.length} incident(s)`);
288
+ }
289
+ else {
290
+ logger.info('No incidents found matching the criteria');
291
+ }
292
+ return result;
293
+ }
294
+ catch (error) {
295
+ logger.error('Failed to search incidents', error);
296
+ process.exit(1);
297
+ }
298
+ }
299
+ /**
300
+ * Search jobs
301
+ */
302
+ export async function searchJobs(options) {
303
+ const logger = getLogger();
304
+ const client = createClient(options.profile);
305
+ const tenantId = resolveTenantId(options.profile);
306
+ const hasCiFilter = !!options.iType;
307
+ try {
308
+ const filter = {
309
+ filter: {
310
+ tenantId,
311
+ },
312
+ };
313
+ if (hasCiFilter)
314
+ filter.page = { limit: CI_PAGE_SIZE };
315
+ if (options.state) {
316
+ filter.filter.state = options.state;
317
+ }
318
+ if (options.type) {
319
+ filter.filter.type = toStringFilter(options.type);
320
+ }
321
+ if (options.processInstanceKey) {
322
+ filter.filter.processInstanceKey = options.processInstanceKey;
323
+ }
324
+ if (options.processDefinitionKey) {
325
+ filter.filter.processDefinitionKey = options.processDefinitionKey;
326
+ }
327
+ const result = await client.searchJobs(filter, { consistency: { waitUpToMs: 0 } });
328
+ if (hasCiFilter && result.items) {
329
+ result.items = result.items.filter((job) => {
330
+ if (options.iType && !matchesCaseInsensitive(job.type, options.iType))
331
+ return false;
332
+ return true;
333
+ });
334
+ }
335
+ if (result.items && result.items.length > 0) {
336
+ const tableData = result.items.map((job) => ({
337
+ Key: job.jobKey || job.key,
338
+ Type: job.type,
339
+ State: job.state,
340
+ Retries: job.retries,
341
+ 'Process Instance': job.processInstanceKey,
342
+ 'Tenant ID': job.tenantId,
343
+ }));
344
+ logger.table(tableData);
345
+ logger.info(`Found ${result.items.length} job(s)`);
346
+ }
347
+ else {
348
+ logger.info('No jobs found matching the criteria');
349
+ }
350
+ return result;
351
+ }
352
+ catch (error) {
353
+ logger.error('Failed to search jobs', error);
354
+ process.exit(1);
355
+ }
356
+ }
357
+ /**
358
+ * Search variables
359
+ */
360
+ export async function searchVariables(options) {
361
+ const logger = getLogger();
362
+ const client = createClient(options.profile);
363
+ const tenantId = resolveTenantId(options.profile);
364
+ const hasCiFilter = !!(options.iName || options.iValue);
365
+ try {
366
+ const filter = {
367
+ filter: {
368
+ tenantId,
369
+ },
370
+ };
371
+ if (hasCiFilter)
372
+ filter.page = { limit: CI_PAGE_SIZE };
373
+ if (options.name) {
374
+ filter.filter.name = toStringFilter(options.name);
375
+ }
376
+ if (options.value) {
377
+ filter.filter.value = toStringFilter(options.value);
378
+ }
379
+ if (options.processInstanceKey) {
380
+ filter.filter.processInstanceKey = options.processInstanceKey;
381
+ }
382
+ if (options.scopeKey) {
383
+ filter.filter.scopeKey = options.scopeKey;
384
+ }
385
+ // By default, truncate values unless --fullValue is specified
386
+ const truncateValues = !options.fullValue;
387
+ const result = await client.searchVariables({ ...filter, truncateValues }, { consistency: { waitUpToMs: 0 } });
388
+ if (hasCiFilter && result.items) {
389
+ result.items = result.items.filter((variable) => {
390
+ if (options.iName && !matchesCaseInsensitive(variable.name, options.iName))
391
+ return false;
392
+ if (options.iValue) {
393
+ // Variable values come JSON-encoded from the API (e.g., '"PendingReview"').
394
+ // Unwrap the JSON string for comparison so users can match the actual value.
395
+ let rawValue = variable.value;
396
+ try {
397
+ const parsed = JSON.parse(rawValue);
398
+ if (typeof parsed === 'string')
399
+ rawValue = parsed;
400
+ }
401
+ catch { /* keep original value */ }
402
+ if (!matchesCaseInsensitive(rawValue, options.iValue))
403
+ return false;
404
+ }
405
+ return true;
406
+ });
407
+ }
408
+ if (result.items && result.items.length > 0) {
409
+ const tableData = result.items.map((variable) => {
410
+ const row = {
411
+ Name: variable.name,
412
+ Value: variable.value || '',
413
+ 'Process Instance': variable.processInstanceKey,
414
+ 'Scope Key': variable.scopeKey,
415
+ 'Tenant ID': variable.tenantId,
416
+ };
417
+ if (variable.isTruncated) {
418
+ row['Truncated'] = '✓';
419
+ }
420
+ return row;
421
+ });
422
+ logger.table(tableData);
423
+ logger.info(`Found ${result.items.length} variable(s)`);
424
+ if (!options.fullValue && result.items.some((v) => v.isTruncated)) {
425
+ logger.info('Some values are truncated. Use --fullValue to see full values.');
426
+ }
427
+ }
428
+ else {
429
+ logger.info('No variables found matching the criteria');
430
+ }
431
+ return result;
432
+ }
433
+ catch (error) {
434
+ logger.error('Failed to search variables', error);
435
+ process.exit(1);
436
+ }
437
+ }
438
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { useProfile, useTenant, setOutputFormat } from "./commands/session.js";
12
12
  import { listProfiles, addProfile, removeProfile } from "./commands/profiles.js";
13
13
  import { listProcessInstances, getProcessInstance, createProcessInstance, cancelProcessInstance, } from "./commands/process-instances.js";
14
14
  import { listProcessDefinitions, getProcessDefinition, } from "./commands/process-definitions.js";
15
+ import { searchProcessDefinitions, searchProcessInstances, searchUserTasks, searchIncidents, searchJobs, searchVariables, } from "./commands/search.js";
15
16
  import { listUserTasks, completeUserTask } from "./commands/user-tasks.js";
16
17
  import { listIncidents, getIncident, resolveIncident } from "./commands/incidents.js";
17
18
  import { listJobs, activateJobs, completeJob, failJob } from "./commands/jobs.js";
@@ -58,6 +59,8 @@ function parseCliArgs() {
58
59
  id: { type: 'string' },
59
60
  processDefinitionId: { type: 'string' },
60
61
  processInstanceKey: { type: 'string' },
62
+ processDefinitionKey: { type: 'string' },
63
+ parentProcessInstanceKey: { type: 'string' },
61
64
  variables: { type: 'string' },
62
65
  state: { type: 'string' },
63
66
  assignee: { type: 'string' },
@@ -76,10 +79,23 @@ function parseCliArgs() {
76
79
  oAuthUrl: { type: 'string' },
77
80
  defaultTenantId: { type: 'string' },
78
81
  from: { type: 'string' },
82
+ name: { type: 'string' },
83
+ key: { type: 'string' },
84
+ elementId: { type: 'string' },
85
+ errorType: { type: 'string' },
79
86
  awaitCompletion: { type: 'boolean' },
80
87
  fetchVariables: { type: 'boolean' },
88
+ value: { type: 'string' },
89
+ scopeKey: { type: 'string' },
90
+ fullValue: { type: 'boolean' },
81
91
  userTask: { type: 'boolean' },
82
92
  processDefinition: { type: 'boolean' },
93
+ iname: { type: 'string' },
94
+ iid: { type: 'string' },
95
+ iassignee: { type: 'string' },
96
+ ierrorMessage: { type: 'string' },
97
+ itype: { type: 'string' },
98
+ ivalue: { type: 'string' },
83
99
  },
84
100
  allowPositionals: true,
85
101
  strict: false,
@@ -496,6 +512,87 @@ async function main() {
496
512
  });
497
513
  return;
498
514
  }
515
+ // Handle search commands
516
+ if (verb === 'search') {
517
+ const normalizedSearchResource = normalizeResource(resource);
518
+ if (normalizedSearchResource === 'process-definition' || normalizedSearchResource === 'process-definitions') {
519
+ await searchProcessDefinitions({
520
+ profile: values.profile,
521
+ processDefinitionId: values.bpmnProcessId,
522
+ name: values.name,
523
+ version: (values.version_num && typeof values.version_num === 'string') ? parseInt(values.version_num) : undefined,
524
+ key: values.key,
525
+ iProcessDefinitionId: values.iid,
526
+ iName: values.iname,
527
+ });
528
+ return;
529
+ }
530
+ if (normalizedSearchResource === 'process-instance' || normalizedSearchResource === 'process-instances') {
531
+ await searchProcessInstances({
532
+ profile: values.profile,
533
+ processDefinitionId: values.bpmnProcessId,
534
+ processDefinitionKey: values.processDefinitionKey,
535
+ state: values.state,
536
+ key: values.key,
537
+ parentProcessInstanceKey: values.parentProcessInstanceKey,
538
+ iProcessDefinitionId: values.iid,
539
+ });
540
+ return;
541
+ }
542
+ if (normalizedSearchResource === 'user-task' || normalizedSearchResource === 'user-tasks') {
543
+ await searchUserTasks({
544
+ profile: values.profile,
545
+ state: values.state,
546
+ assignee: values.assignee,
547
+ processInstanceKey: values.processInstanceKey,
548
+ processDefinitionKey: values.processDefinitionKey,
549
+ elementId: values.elementId,
550
+ iAssignee: values.iassignee,
551
+ });
552
+ return;
553
+ }
554
+ if (normalizedSearchResource === 'incident' || normalizedSearchResource === 'incidents') {
555
+ await searchIncidents({
556
+ profile: values.profile,
557
+ state: values.state,
558
+ processInstanceKey: values.processInstanceKey,
559
+ processDefinitionKey: values.processDefinitionKey,
560
+ processDefinitionId: values.bpmnProcessId,
561
+ errorType: values.errorType,
562
+ errorMessage: values.errorMessage,
563
+ iErrorMessage: values.ierrorMessage,
564
+ iProcessDefinitionId: values.iid,
565
+ });
566
+ return;
567
+ }
568
+ if (normalizedSearchResource === 'jobs') {
569
+ await searchJobs({
570
+ profile: values.profile,
571
+ state: values.state,
572
+ type: values.type,
573
+ processInstanceKey: values.processInstanceKey,
574
+ processDefinitionKey: values.processDefinitionKey,
575
+ iType: values.itype,
576
+ });
577
+ return;
578
+ }
579
+ if (normalizedSearchResource === 'variable' || normalizedSearchResource === 'variables') {
580
+ await searchVariables({
581
+ profile: values.profile,
582
+ name: values.name,
583
+ value: values.value,
584
+ processInstanceKey: values.processInstanceKey,
585
+ scopeKey: values.scopeKey,
586
+ fullValue: values.fullValue,
587
+ iName: values.iname,
588
+ iValue: values.ivalue,
589
+ });
590
+ return;
591
+ }
592
+ // If resource not recognized for search, show available resources
593
+ showVerbResources('search');
594
+ return;
595
+ }
499
596
  // Try to execute plugin command (before verb-only check)
500
597
  if (await executePluginCommand(verb, resource ? [resource, ...args] : args)) {
501
598
  return;