@camunda8/cli 2.0.0-alpha.2
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 +201 -0
- package/README.md +387 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +39 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/deployments.d.ts +10 -0
- package/dist/commands/deployments.d.ts.map +1 -0
- package/dist/commands/deployments.js +221 -0
- package/dist/commands/deployments.js.map +1 -0
- package/dist/commands/help.d.ts +20 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +116 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/incidents.d.ts +18 -0
- package/dist/commands/incidents.d.ts.map +1 -0
- package/dist/commands/incidents.js +62 -0
- package/dist/commands/incidents.js.map +1 -0
- package/dist/commands/jobs.d.ts +36 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +129 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/messages.d.ts +22 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +48 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/plugins.d.ts +17 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +113 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/process-instances.d.ts +34 -0
- package/dist/commands/process-instances.d.ts.map +1 -0
- package/dist/commands/process-instances.js +116 -0
- package/dist/commands/process-instances.js.map +1 -0
- package/dist/commands/profiles.d.ts +23 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +76 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/run.d.ts +11 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +61 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/session.d.ts +20 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +54 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/topology.d.ts +10 -0
- package/dist/commands/topology.d.ts.map +1 -0
- package/dist/commands/topology.js +21 -0
- package/dist/commands/topology.js.map +1 -0
- package/dist/commands/user-tasks.d.ts +20 -0
- package/dist/commands/user-tasks.d.ts.map +1 -0
- package/dist/commands/user-tasks.js +78 -0
- package/dist/commands/user-tasks.js.map +1 -0
- package/dist/commands/watch.d.ts +10 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +76 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +129 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +356 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +405 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +132 -0
- package/dist/logger.js.map +1 -0
- package/dist/plugin-loader.d.ts +32 -0
- package/dist/plugin-loader.d.ts.map +1 -0
- package/dist/plugin-loader.js +104 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/runtime.d.ts +20 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +35 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment commands with building-block folder prioritization
|
|
3
|
+
*/
|
|
4
|
+
import { getLogger } from "../logger.js";
|
|
5
|
+
import { createClient } from "../client.js";
|
|
6
|
+
import { resolveTenantId } from "../config.js";
|
|
7
|
+
import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join, dirname, extname, basename } from 'node:path';
|
|
9
|
+
const RESOURCE_EXTENSIONS = ['.bpmn', '.dmn', '.form'];
|
|
10
|
+
/**
|
|
11
|
+
* Extract process/decision IDs from BPMN/DMN files to detect duplicates
|
|
12
|
+
*/
|
|
13
|
+
function extractDefinitionId(content, extension) {
|
|
14
|
+
const text = content.toString('utf-8');
|
|
15
|
+
if (extension === '.bpmn') {
|
|
16
|
+
// Extract bpmn:process id attribute
|
|
17
|
+
const match = text.match(/<bpmn\d?:process[^>]+id="([^"]+)"/);
|
|
18
|
+
return match ? match[1] : null;
|
|
19
|
+
}
|
|
20
|
+
else if (extension === '.dmn') {
|
|
21
|
+
// Extract decision id attribute
|
|
22
|
+
const match = text.match(/<decision[^>]+id="([^"]+)"/);
|
|
23
|
+
return match ? match[1] : null;
|
|
24
|
+
}
|
|
25
|
+
else if (extension === '.form') {
|
|
26
|
+
// Forms are identified by filename, not internal ID
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if a path is a building block folder (contains _bb- in name)
|
|
33
|
+
*/
|
|
34
|
+
function isBuildingBlockFolder(path) {
|
|
35
|
+
return basename(path).includes('_bb-');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Recursively collect resource files from a directory
|
|
39
|
+
*/
|
|
40
|
+
function collectResourceFiles(dirPath, collected = []) {
|
|
41
|
+
if (!existsSync(dirPath)) {
|
|
42
|
+
return collected;
|
|
43
|
+
}
|
|
44
|
+
const stat = statSync(dirPath);
|
|
45
|
+
if (stat.isFile()) {
|
|
46
|
+
const ext = extname(dirPath);
|
|
47
|
+
if (RESOURCE_EXTENSIONS.includes(ext)) {
|
|
48
|
+
const parentDir = dirname(dirPath);
|
|
49
|
+
collected.push({
|
|
50
|
+
path: dirPath,
|
|
51
|
+
name: basename(dirPath),
|
|
52
|
+
content: readFileSync(dirPath),
|
|
53
|
+
isBuildingBlock: isBuildingBlockFolder(parentDir),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return collected;
|
|
57
|
+
}
|
|
58
|
+
if (stat.isDirectory()) {
|
|
59
|
+
const entries = readdirSync(dirPath);
|
|
60
|
+
// Separate building block folders from regular ones
|
|
61
|
+
const bbFolders = [];
|
|
62
|
+
const regularFolders = [];
|
|
63
|
+
const files = [];
|
|
64
|
+
entries.forEach(entry => {
|
|
65
|
+
const fullPath = join(dirPath, entry);
|
|
66
|
+
const entryStat = statSync(fullPath);
|
|
67
|
+
if (entryStat.isDirectory()) {
|
|
68
|
+
if (isBuildingBlockFolder(entry)) {
|
|
69
|
+
bbFolders.push(fullPath);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
regularFolders.push(fullPath);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (entryStat.isFile()) {
|
|
76
|
+
files.push(fullPath);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Process files in current directory first
|
|
80
|
+
files.forEach(file => {
|
|
81
|
+
const ext = extname(file);
|
|
82
|
+
if (RESOURCE_EXTENSIONS.includes(ext)) {
|
|
83
|
+
collected.push({
|
|
84
|
+
path: file,
|
|
85
|
+
name: basename(file),
|
|
86
|
+
content: readFileSync(file),
|
|
87
|
+
isBuildingBlock: isBuildingBlockFolder(dirPath),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// Process building block folders first (prioritized)
|
|
92
|
+
bbFolders.forEach(bbFolder => {
|
|
93
|
+
collectResourceFiles(bbFolder, collected);
|
|
94
|
+
});
|
|
95
|
+
// Then process regular folders
|
|
96
|
+
regularFolders.forEach(regularFolder => {
|
|
97
|
+
collectResourceFiles(regularFolder, collected);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return collected;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Find duplicate process/decision IDs across resources
|
|
104
|
+
*/
|
|
105
|
+
function findDuplicateDefinitionIds(resources) {
|
|
106
|
+
const idMap = resources.reduce((map, r) => {
|
|
107
|
+
const ext = extname(r.path);
|
|
108
|
+
if (ext === '.bpmn' || ext === '.dmn') {
|
|
109
|
+
const defId = extractDefinitionId(r.content, ext);
|
|
110
|
+
if (defId)
|
|
111
|
+
map.set(defId, [...(map.get(defId) ?? []), r.path]);
|
|
112
|
+
}
|
|
113
|
+
return map;
|
|
114
|
+
}, new Map());
|
|
115
|
+
return new Map([...idMap].filter(([, paths]) => paths.length > 1));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Deploy resources
|
|
119
|
+
*/
|
|
120
|
+
export async function deploy(paths, options) {
|
|
121
|
+
const logger = getLogger();
|
|
122
|
+
const client = createClient(options.profile);
|
|
123
|
+
const tenantId = resolveTenantId(options.profile);
|
|
124
|
+
try {
|
|
125
|
+
const resources = [];
|
|
126
|
+
if (paths.length === 0) {
|
|
127
|
+
logger.error('No paths provided. Use: c8 deploy <path> or c8 deploy (for current directory)');
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
// Collect all resource files
|
|
131
|
+
paths.forEach(path => {
|
|
132
|
+
collectResourceFiles(path, resources);
|
|
133
|
+
});
|
|
134
|
+
if (resources.length === 0) {
|
|
135
|
+
logger.error('No BPMN/DMN/Form files found in the specified paths');
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
// Sort: building blocks first, then by path
|
|
139
|
+
resources.sort((a, b) => {
|
|
140
|
+
if (a.isBuildingBlock && !b.isBuildingBlock)
|
|
141
|
+
return -1;
|
|
142
|
+
if (!a.isBuildingBlock && b.isBuildingBlock)
|
|
143
|
+
return 1;
|
|
144
|
+
return a.path.localeCompare(b.path);
|
|
145
|
+
});
|
|
146
|
+
// Validate for duplicate process/decision IDs
|
|
147
|
+
const duplicates = findDuplicateDefinitionIds(resources);
|
|
148
|
+
if (duplicates.size > 0) {
|
|
149
|
+
logger.error('Cannot deploy: Multiple files with the same process/decision ID in one deployment');
|
|
150
|
+
duplicates.forEach((paths, id) => console.error(` Process/Decision ID "${id}" found in: ${paths.join(', ')}`));
|
|
151
|
+
console.error('\nCamunda does not allow deploying multiple resources with the same definition ID in a single deployment.');
|
|
152
|
+
console.error('Please deploy these files separately or ensure each process/decision has a unique ID.');
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
logger.info(`Deploying ${resources.length} resource(s)...`);
|
|
156
|
+
// Create deployment request - convert buffers to File objects with proper MIME types
|
|
157
|
+
const result = await client.createDeployment({
|
|
158
|
+
tenantId,
|
|
159
|
+
resources: resources.map(r => {
|
|
160
|
+
// Determine MIME type based on extension
|
|
161
|
+
const ext = r.name.split('.').pop()?.toLowerCase();
|
|
162
|
+
const mimeType = ext === 'bpmn' ? 'application/xml' :
|
|
163
|
+
ext === 'dmn' ? 'application/xml' :
|
|
164
|
+
ext === 'form' ? 'application/json' :
|
|
165
|
+
'application/octet-stream';
|
|
166
|
+
return new File([r.content], r.name, { type: mimeType });
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
169
|
+
logger.success('Deployment successful', result.deploymentKey.toString());
|
|
170
|
+
// Display deployed resources
|
|
171
|
+
const tableData = [];
|
|
172
|
+
result.processes.forEach(proc => {
|
|
173
|
+
tableData.push({
|
|
174
|
+
Type: 'Process',
|
|
175
|
+
ID: proc.processDefinitionId,
|
|
176
|
+
Version: proc.processDefinitionVersion,
|
|
177
|
+
Key: proc.processDefinitionKey.toString(),
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
result.decisions.forEach(dec => {
|
|
181
|
+
tableData.push({
|
|
182
|
+
Type: 'Decision',
|
|
183
|
+
ID: dec.decisionDefinitionId || '-',
|
|
184
|
+
Version: dec.version ?? '-',
|
|
185
|
+
Key: dec.decisionDefinitionKey?.toString() || '-',
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
result.forms.forEach(form => {
|
|
189
|
+
tableData.push({
|
|
190
|
+
Type: 'Form',
|
|
191
|
+
ID: form.formId || '-',
|
|
192
|
+
Version: form.version ?? '-',
|
|
193
|
+
Key: form.formKey?.toString() || '-',
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
if (tableData.length > 0) {
|
|
197
|
+
logger.table(tableData);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
// Log detailed error information
|
|
202
|
+
if (error && typeof error === 'object') {
|
|
203
|
+
const err = error;
|
|
204
|
+
logger.error('Failed to deploy resources', error);
|
|
205
|
+
if (err.response) {
|
|
206
|
+
console.error('API Response:', err.response);
|
|
207
|
+
}
|
|
208
|
+
if (err.message) {
|
|
209
|
+
console.error('Error message:', err.message);
|
|
210
|
+
}
|
|
211
|
+
if (err.cause) {
|
|
212
|
+
console.error('Error cause:', err.cause);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
logger.error('Failed to deploy resources', error);
|
|
217
|
+
}
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=deployments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/commands/deployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help and version commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get package version
|
|
6
|
+
*/
|
|
7
|
+
export declare function getVersion(): string;
|
|
8
|
+
/**
|
|
9
|
+
* Display version
|
|
10
|
+
*/
|
|
11
|
+
export declare function showVersion(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Display full help
|
|
14
|
+
*/
|
|
15
|
+
export declare function showHelp(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Show available resources for a verb
|
|
18
|
+
*/
|
|
19
|
+
export declare function showVerbResources(verb: string): void;
|
|
20
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAsD/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA6BpD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help and version commands
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { getLogger } from "../logger.js";
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
/**
|
|
11
|
+
* Get package version
|
|
12
|
+
*/
|
|
13
|
+
export function getVersion() {
|
|
14
|
+
const packagePath = join(__dirname, '../../package.json');
|
|
15
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
16
|
+
return packageJson.version;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Display version
|
|
20
|
+
*/
|
|
21
|
+
export function showVersion() {
|
|
22
|
+
const logger = getLogger();
|
|
23
|
+
logger.info(`c8ctl v${getVersion()}`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Display full help
|
|
27
|
+
*/
|
|
28
|
+
export function showHelp() {
|
|
29
|
+
const version = getVersion();
|
|
30
|
+
console.log(`
|
|
31
|
+
c8ctl - Camunda 8 CLI v${version}
|
|
32
|
+
|
|
33
|
+
Usage: c8ctl <command> [resource] [options]
|
|
34
|
+
|
|
35
|
+
Commands:
|
|
36
|
+
list <resource> List resources (pi, ut, inc, jobs, profiles)
|
|
37
|
+
get <resource> <key> Get resource by key (pi, topology)
|
|
38
|
+
create <resource> Create resource (pi)
|
|
39
|
+
cancel <resource> <key> Cancel resource (pi)
|
|
40
|
+
complete <resource> <key> Complete resource (ut, job)
|
|
41
|
+
fail job <key> Fail a job
|
|
42
|
+
activate jobs <type> Activate jobs by type
|
|
43
|
+
resolve inc <key> Resolve incident
|
|
44
|
+
publish msg <name> Publish message
|
|
45
|
+
correlate msg <name> Correlate message
|
|
46
|
+
deploy [path...] Deploy BPMN/DMN/forms
|
|
47
|
+
run <path> Deploy and start process
|
|
48
|
+
watch [path...] Watch files for changes and auto-deploy
|
|
49
|
+
add profile <name> Add a profile
|
|
50
|
+
remove profile <name> Remove a profile (alias: rm)
|
|
51
|
+
load plugin <name> Load a c8ctl plugin from npm registry
|
|
52
|
+
load plugin --from Load a c8ctl plugin from URL (file://, https://, git://)
|
|
53
|
+
unload plugin <name> Unload a c8ctl plugin (npm uninstall wrapper)
|
|
54
|
+
use profile|tenant Set active profile or tenant
|
|
55
|
+
output json|text Set output format
|
|
56
|
+
help Show this help
|
|
57
|
+
|
|
58
|
+
Flags:
|
|
59
|
+
--profile <name> Use specific profile for this command
|
|
60
|
+
--from <url> Load plugin from URL (use with 'load plugin')
|
|
61
|
+
--version, -v Show version
|
|
62
|
+
--help, -h Show help
|
|
63
|
+
|
|
64
|
+
Resource Aliases:
|
|
65
|
+
pi = process-instance(s)
|
|
66
|
+
ut = user-task(s)
|
|
67
|
+
inc = incident(s)
|
|
68
|
+
msg = message
|
|
69
|
+
|
|
70
|
+
Examples:
|
|
71
|
+
c8ctl list pi List process instances
|
|
72
|
+
c8ctl get pi 123456 Get process instance by key
|
|
73
|
+
c8ctl create pi --bpmnProcessId=myProcess
|
|
74
|
+
c8ctl deploy ./my-process.bpmn Deploy a BPMN file
|
|
75
|
+
c8ctl run ./my-process.bpmn Deploy and start process
|
|
76
|
+
c8ctl watch ./src Watch directory for changes
|
|
77
|
+
c8ctl use profile prod Set active profile
|
|
78
|
+
c8ctl output json Switch to JSON output
|
|
79
|
+
c8ctl load plugin my-plugin Load plugin from npm registry
|
|
80
|
+
c8ctl load plugin --from file:///path/to/plugin Load plugin from file URL
|
|
81
|
+
`.trim());
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Show available resources for a verb
|
|
85
|
+
*/
|
|
86
|
+
export function showVerbResources(verb) {
|
|
87
|
+
const resources = {
|
|
88
|
+
list: 'process-instances (pi), user-tasks (ut), incidents (inc), jobs, profiles, plugins',
|
|
89
|
+
get: 'process-instance (pi), topology',
|
|
90
|
+
create: 'process-instance (pi)',
|
|
91
|
+
complete: 'user-task (ut), job',
|
|
92
|
+
cancel: 'process-instance (pi)',
|
|
93
|
+
resolve: 'incident (inc)',
|
|
94
|
+
activate: 'jobs',
|
|
95
|
+
fail: 'job',
|
|
96
|
+
publish: 'message (msg)',
|
|
97
|
+
correlate: 'message (msg)',
|
|
98
|
+
add: 'profile',
|
|
99
|
+
remove: 'profile',
|
|
100
|
+
rm: 'profile',
|
|
101
|
+
load: 'plugin',
|
|
102
|
+
unload: 'plugin',
|
|
103
|
+
use: 'profile, tenant',
|
|
104
|
+
output: 'json, text',
|
|
105
|
+
};
|
|
106
|
+
const available = resources[verb];
|
|
107
|
+
if (available) {
|
|
108
|
+
console.log(`\nUsage: c8ctl ${verb} <resource>\n`);
|
|
109
|
+
console.log(`Available resources:\n ${available}`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.log(`\nUnknown command: ${verb}`);
|
|
113
|
+
console.log('Run "c8ctl help" for usage information.');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC;yBACW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkD/B,CAAC,IAAI,EAAE,CAAC,CAAC;AACV,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,mFAAmF;QACzF,GAAG,EAAE,iCAAiC;QACtC,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,qBAAqB;QAC/B,MAAM,EAAE,uBAAuB;QAC/B,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,eAAe;QACxB,SAAS,EAAE,eAAe;QAC1B,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,SAAS;QACjB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,iBAAiB;QACtB,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,eAAe,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incident commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* List incidents
|
|
6
|
+
*/
|
|
7
|
+
export declare function listIncidents(options: {
|
|
8
|
+
profile?: string;
|
|
9
|
+
state?: string;
|
|
10
|
+
processInstanceKey?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve incident
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveIncident(key: string, options: {
|
|
16
|
+
profile?: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=incidents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.d.ts","sourceRoot":"","sources":["../../src/commands/incidents.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incident commands
|
|
3
|
+
*/
|
|
4
|
+
import { getLogger } from "../logger.js";
|
|
5
|
+
import { createClient } from "../client.js";
|
|
6
|
+
import { resolveTenantId } from "../config.js";
|
|
7
|
+
/**
|
|
8
|
+
* List incidents
|
|
9
|
+
*/
|
|
10
|
+
export async function listIncidents(options) {
|
|
11
|
+
const logger = getLogger();
|
|
12
|
+
const client = createClient(options.profile);
|
|
13
|
+
const tenantId = resolveTenantId(options.profile);
|
|
14
|
+
try {
|
|
15
|
+
const filter = {
|
|
16
|
+
filter: {
|
|
17
|
+
tenantId,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
if (options.state) {
|
|
21
|
+
filter.filter.state = options.state;
|
|
22
|
+
}
|
|
23
|
+
if (options.processInstanceKey) {
|
|
24
|
+
filter.filter.processInstanceKey = options.processInstanceKey;
|
|
25
|
+
}
|
|
26
|
+
const result = await client.searchIncidents(filter, { consistency: { waitUpToMs: 0 } });
|
|
27
|
+
if (result.items && result.items.length > 0) {
|
|
28
|
+
const tableData = result.items.map((incident) => ({
|
|
29
|
+
Key: incident.incidentKey || incident.key,
|
|
30
|
+
Type: incident.errorType,
|
|
31
|
+
Message: incident.errorMessage?.substring(0, 50) || '',
|
|
32
|
+
State: incident.state,
|
|
33
|
+
'Process Instance': incident.processInstanceKey,
|
|
34
|
+
'Tenant ID': incident.tenantId,
|
|
35
|
+
}));
|
|
36
|
+
logger.table(tableData);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
logger.info('No incidents found');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.error('Failed to list incidents', error);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve incident
|
|
49
|
+
*/
|
|
50
|
+
export async function resolveIncident(key, options) {
|
|
51
|
+
const logger = getLogger();
|
|
52
|
+
const client = createClient(options.profile);
|
|
53
|
+
try {
|
|
54
|
+
await client.resolveIncident({ incidentKey: key });
|
|
55
|
+
logger.success(`Incident ${key} resolved`);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger.error(`Failed to resolve incident ${key}`, error);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=incidents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incidents.js","sourceRoot":"","sources":["../../src/commands/incidents.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAInC;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAQ;YAClB,MAAM,EAAE;gBACN,QAAQ;aACT;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAa,EAAE,EAAE,CAAC,CAAC;gBACrD,GAAG,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,GAAG;gBACzC,IAAI,EAAE,QAAQ,CAAC,SAAS;gBACxB,OAAO,EAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;gBACtD,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;gBAC/C,WAAW,EAAE,QAAQ,CAAC,QAAQ;aAC/B,CAAC,CAAC,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,OAElD;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,GAAU,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,GAAG,EAAE,EAAE,KAAc,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* List jobs
|
|
6
|
+
*/
|
|
7
|
+
export declare function listJobs(options: {
|
|
8
|
+
profile?: string;
|
|
9
|
+
state?: string;
|
|
10
|
+
type?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Activate jobs
|
|
14
|
+
*/
|
|
15
|
+
export declare function activateJobs(type: string, options: {
|
|
16
|
+
profile?: string;
|
|
17
|
+
maxJobsToActivate?: number;
|
|
18
|
+
timeout?: number;
|
|
19
|
+
worker?: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Complete job
|
|
23
|
+
*/
|
|
24
|
+
export declare function completeJob(key: string, options: {
|
|
25
|
+
profile?: string;
|
|
26
|
+
variables?: string;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Fail job
|
|
30
|
+
*/
|
|
31
|
+
export declare function failJob(key: string, options: {
|
|
32
|
+
profile?: string;
|
|
33
|
+
retries?: number;
|
|
34
|
+
errorMessage?: string;
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job commands
|
|
3
|
+
*/
|
|
4
|
+
import { getLogger } from "../logger.js";
|
|
5
|
+
import { createClient } from "../client.js";
|
|
6
|
+
import { resolveTenantId } from "../config.js";
|
|
7
|
+
/**
|
|
8
|
+
* List jobs
|
|
9
|
+
*/
|
|
10
|
+
export async function listJobs(options) {
|
|
11
|
+
const logger = getLogger();
|
|
12
|
+
const client = createClient(options.profile);
|
|
13
|
+
const tenantId = resolveTenantId(options.profile);
|
|
14
|
+
try {
|
|
15
|
+
const filter = {
|
|
16
|
+
filter: {
|
|
17
|
+
tenantId,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
if (options.state) {
|
|
21
|
+
filter.filter.state = options.state;
|
|
22
|
+
}
|
|
23
|
+
if (options.type) {
|
|
24
|
+
filter.filter.type = options.type;
|
|
25
|
+
}
|
|
26
|
+
const result = await client.searchJobs(filter, { consistency: { waitUpToMs: 0 } });
|
|
27
|
+
if (result.items && result.items.length > 0) {
|
|
28
|
+
const tableData = result.items.map((job) => ({
|
|
29
|
+
Key: job.jobKey || job.key,
|
|
30
|
+
Type: job.type,
|
|
31
|
+
State: job.state,
|
|
32
|
+
Retries: job.retries,
|
|
33
|
+
'Process Instance': job.processInstanceKey,
|
|
34
|
+
'Tenant ID': job.tenantId,
|
|
35
|
+
}));
|
|
36
|
+
logger.table(tableData);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
logger.info('No jobs found');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.error('Failed to list jobs', error);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Activate jobs
|
|
49
|
+
*/
|
|
50
|
+
export async function activateJobs(type, options) {
|
|
51
|
+
const logger = getLogger();
|
|
52
|
+
const client = createClient(options.profile);
|
|
53
|
+
const tenantId = resolveTenantId(options.profile);
|
|
54
|
+
try {
|
|
55
|
+
const request = {
|
|
56
|
+
type,
|
|
57
|
+
tenantIds: [tenantId],
|
|
58
|
+
maxJobsToActivate: options.maxJobsToActivate || 10,
|
|
59
|
+
timeout: options.timeout || 60000,
|
|
60
|
+
worker: options.worker || 'c8ctl',
|
|
61
|
+
};
|
|
62
|
+
const result = await client.activateJobs(request);
|
|
63
|
+
if (result.jobs && result.jobs.length > 0) {
|
|
64
|
+
logger.success(`Activated ${result.jobs.length} jobs of type '${type}'`);
|
|
65
|
+
const tableData = result.jobs.map((job) => ({
|
|
66
|
+
Key: job.jobKey || job.key,
|
|
67
|
+
Type: job.type,
|
|
68
|
+
Retries: job.retries,
|
|
69
|
+
'Process Instance': job.processInstanceKey,
|
|
70
|
+
}));
|
|
71
|
+
logger.table(tableData);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
logger.info(`No jobs of type '${type}' available to activate`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.error(`Failed to activate jobs of type '${type}'`, error);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Complete job
|
|
84
|
+
*/
|
|
85
|
+
export async function completeJob(key, options) {
|
|
86
|
+
const logger = getLogger();
|
|
87
|
+
const client = createClient(options.profile);
|
|
88
|
+
try {
|
|
89
|
+
const request = {
|
|
90
|
+
jobKey: key,
|
|
91
|
+
};
|
|
92
|
+
if (options.variables) {
|
|
93
|
+
try {
|
|
94
|
+
request.variables = JSON.parse(options.variables);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.error('Invalid JSON for variables', error);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await client.completeJob(request);
|
|
102
|
+
logger.success(`Job ${key} completed`);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
logger.error(`Failed to complete job ${key}`, error);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Fail job
|
|
111
|
+
*/
|
|
112
|
+
export async function failJob(key, options) {
|
|
113
|
+
const logger = getLogger();
|
|
114
|
+
const client = createClient(options.profile);
|
|
115
|
+
try {
|
|
116
|
+
const request = {
|
|
117
|
+
jobKey: key,
|
|
118
|
+
retries: options.retries !== undefined ? options.retries : 0,
|
|
119
|
+
errorMessage: options.errorMessage || 'Job failed via c8ctl',
|
|
120
|
+
};
|
|
121
|
+
await client.failJob(request);
|
|
122
|
+
logger.success(`Job ${key} failed`);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger.error(`Failed to fail job ${key}`, error);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
|