codika 3.1.0 → 3.2.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/dist/cli/commands/config/set.js +1 -1
- package/dist/cli/commands/config/set.js.map +1 -1
- package/dist/cli/commands/get/index.d.ts +1 -0
- package/dist/cli/commands/get/index.d.ts.map +1 -1
- package/dist/cli/commands/get/index.js +3 -0
- package/dist/cli/commands/get/index.js.map +1 -1
- package/dist/cli/commands/get/instance.d.ts +9 -0
- package/dist/cli/commands/get/instance.d.ts.map +1 -0
- package/dist/cli/commands/get/instance.js +173 -0
- package/dist/cli/commands/get/instance.js.map +1 -0
- package/dist/cli/commands/organization/create-key.d.ts +8 -0
- package/dist/cli/commands/organization/create-key.d.ts.map +1 -0
- package/dist/cli/commands/organization/create-key.js +124 -0
- package/dist/cli/commands/organization/create-key.js.map +1 -0
- package/dist/cli/commands/organization/create.d.ts +8 -0
- package/dist/cli/commands/organization/create.d.ts.map +1 -0
- package/dist/cli/commands/organization/create.js +122 -0
- package/dist/cli/commands/organization/create.js.map +1 -0
- package/dist/cli/commands/organization/index.d.ts +12 -0
- package/dist/cli/commands/organization/index.d.ts.map +1 -0
- package/dist/cli/commands/organization/index.js +17 -0
- package/dist/cli/commands/organization/index.js.map +1 -0
- package/dist/cli/commands/use.d.ts.map +1 -1
- package/dist/cli/commands/use.js +4 -2
- package/dist/cli/commands/use.js.map +1 -1
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +6 -4
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/config-template.js +1 -1
- package/dist/cli/templates/workflow-templates.d.ts +1 -1
- package/dist/cli/templates/workflow-templates.js +1 -1
- package/dist/cli/templates/workflow-templates.js.map +1 -1
- package/dist/types/process-types.d.ts +1 -1
- package/dist/types/process-types.d.ts.map +1 -1
- package/dist/utils/config.d.ts +4 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +16 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/get-instance-client.d.ts +53 -0
- package/dist/utils/get-instance-client.d.ts.map +1 -0
- package/dist/utils/get-instance-client.js +52 -0
- package/dist/utils/get-instance-client.js.map +1 -0
- package/dist/utils/org-api-key-client.d.ts +78 -0
- package/dist/utils/org-api-key-client.d.ts.map +1 -0
- package/dist/utils/org-api-key-client.js +62 -0
- package/dist/utils/org-api-key-client.js.map +1 -0
- package/dist/utils/organization-client.d.ts +80 -0
- package/dist/utils/organization-client.d.ts.map +1 -0
- package/dist/utils/organization-client.js +78 -0
- package/dist/utils/organization-client.js.map +1 -0
- package/dist/utils/skills-client.js +2 -2
- package/dist/utils/skills-client.js.map +1 -1
- package/dist/validation/use-case-scripts/index.d.ts +2 -0
- package/dist/validation/use-case-scripts/index.d.ts.map +1 -1
- package/dist/validation/use-case-scripts/index.js +6 -0
- package/dist/validation/use-case-scripts/index.js.map +1 -1
- package/dist/validation/use-case-scripts/input-schema-format.d.ts +19 -0
- package/dist/validation/use-case-scripts/input-schema-format.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/input-schema-format.js +116 -0
- package/dist/validation/use-case-scripts/input-schema-format.js.map +1 -0
- package/dist/validation/use-case-scripts/schedule-trigger-fields.d.ts +22 -0
- package/dist/validation/use-case-scripts/schedule-trigger-fields.d.ts.map +1 -0
- package/dist/validation/use-case-scripts/schedule-trigger-fields.js +140 -0
- package/dist/validation/use-case-scripts/schedule-trigger-fields.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCHEDULE-TRIGGER-FIELDS Validation Script
|
|
3
|
+
*
|
|
4
|
+
* Validates that schedule triggers in config.ts have all required fields:
|
|
5
|
+
* - cronExpression: the cron schedule
|
|
6
|
+
* - timezone: IANA timezone (e.g., 'Europe/Brussels')
|
|
7
|
+
* - humanReadable: plain English schedule description (e.g., 'Every 5 minutes')
|
|
8
|
+
* - manualTriggerUrl: webhook URL for manual/dashboard-triggered runs
|
|
9
|
+
*
|
|
10
|
+
* These fields are required by the deployment API but were not previously
|
|
11
|
+
* validated by the CLI, causing confusing deployment failures after
|
|
12
|
+
* successful verification.
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, existsSync } from 'fs';
|
|
15
|
+
import { join } from 'path';
|
|
16
|
+
export const RULE_ID = 'SCHEDULE-TRIGGER-FIELDS';
|
|
17
|
+
export const metadata = {
|
|
18
|
+
id: RULE_ID,
|
|
19
|
+
name: 'schedule_trigger_fields',
|
|
20
|
+
severity: 'must',
|
|
21
|
+
description: 'Schedule triggers must include cronExpression, timezone, humanReadable, and manualTriggerUrl',
|
|
22
|
+
details: 'The deployment API requires all four fields on every schedule trigger. ' +
|
|
23
|
+
'Missing any of them causes a deployment failure with INVALID_CONFIGURATION.',
|
|
24
|
+
fixable: false,
|
|
25
|
+
category: 'triggers',
|
|
26
|
+
};
|
|
27
|
+
const REQUIRED_FIELDS = ['cronExpression', 'timezone', 'humanReadable', 'manualTriggerUrl'];
|
|
28
|
+
const FIELD_EXAMPLES = {
|
|
29
|
+
cronExpression: '"*/5 * * * *"',
|
|
30
|
+
timezone: '"Europe/Brussels"',
|
|
31
|
+
humanReadable: '"Every 5 minutes"',
|
|
32
|
+
manualTriggerUrl: '`{{ORGSECRET_N8N_BASE_URL_TERCESORG}}/webhook/{{PROCDATA_PROCESS_ID_ATADCORP}}/{{USERDATA_PROCESS_INSTANCE_UID_ATADRESU}}/<workflow-slug>-manual`',
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Extracts schedule trigger blocks from config.ts content.
|
|
36
|
+
*
|
|
37
|
+
* Strategy:
|
|
38
|
+
* 1. Find all workflowTemplateId values
|
|
39
|
+
* 2. For each workflow block, find triggers with type: 'schedule'
|
|
40
|
+
* 3. Extract what fields are present in each schedule trigger
|
|
41
|
+
*/
|
|
42
|
+
function extractScheduleTriggers(configContent) {
|
|
43
|
+
const results = [];
|
|
44
|
+
const lines = configContent.split('\n');
|
|
45
|
+
// Find all workflow blocks by workflowTemplateId
|
|
46
|
+
const templateIdPattern = /workflowTemplateId:\s*['"]([^'"]+)['"]/g;
|
|
47
|
+
let templateMatch;
|
|
48
|
+
while ((templateMatch = templateIdPattern.exec(configContent)) !== null) {
|
|
49
|
+
const templateId = templateMatch[1];
|
|
50
|
+
const templateIdPos = templateMatch.index;
|
|
51
|
+
// Find end of this workflow block (next workflowTemplateId or end of content)
|
|
52
|
+
const nextPattern = /workflowTemplateId:/g;
|
|
53
|
+
nextPattern.lastIndex = templateIdPos + templateMatch[0].length;
|
|
54
|
+
const nextMatch = nextPattern.exec(configContent);
|
|
55
|
+
const blockEnd = nextMatch ? nextMatch.index : configContent.length;
|
|
56
|
+
const workflowBlock = configContent.slice(templateIdPos, blockEnd);
|
|
57
|
+
// Check if this block contains a schedule trigger
|
|
58
|
+
if (!workflowBlock.includes("type: 'schedule'") && !workflowBlock.includes('type: "schedule"')) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Find the line number of the schedule type declaration within the full content
|
|
62
|
+
const scheduleTypeOffset = workflowBlock.search(/type:\s*['"]schedule['"]/);
|
|
63
|
+
const absoluteOffset = templateIdPos + scheduleTypeOffset;
|
|
64
|
+
const triggerStartLine = configContent.slice(0, absoluteOffset).split('\n').length;
|
|
65
|
+
// Check which required fields are present in the trigger block
|
|
66
|
+
// We need to scope to just the trigger object, not the whole workflow block.
|
|
67
|
+
// Find the triggers: [...] content first
|
|
68
|
+
const triggersMatch = workflowBlock.match(/triggers:\s*\[([\s\S]*?)\]\s*,?\s*\n/);
|
|
69
|
+
const triggersContent = triggersMatch ? triggersMatch[1] : workflowBlock;
|
|
70
|
+
const presentFields = new Set();
|
|
71
|
+
for (const field of REQUIRED_FIELDS) {
|
|
72
|
+
// Match field: followed by a value (string, template literal, or variable)
|
|
73
|
+
const fieldPattern = new RegExp(`${field}\\s*:`);
|
|
74
|
+
if (fieldPattern.test(triggersContent)) {
|
|
75
|
+
presentFields.add(field);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
results.push({
|
|
79
|
+
workflowTemplateId: templateId,
|
|
80
|
+
triggerBlockContent: triggersContent,
|
|
81
|
+
triggerStartLine,
|
|
82
|
+
presentFields,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return results;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Validates that all schedule triggers have required fields.
|
|
89
|
+
*/
|
|
90
|
+
export async function checkScheduleTriggerFields(useCasePath) {
|
|
91
|
+
const findings = [];
|
|
92
|
+
const configPath = join(useCasePath, 'config.ts');
|
|
93
|
+
if (!existsSync(configPath)) {
|
|
94
|
+
return findings;
|
|
95
|
+
}
|
|
96
|
+
let configContent;
|
|
97
|
+
try {
|
|
98
|
+
configContent = readFileSync(configPath, 'utf-8');
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return findings;
|
|
102
|
+
}
|
|
103
|
+
const scheduleTriggers = extractScheduleTriggers(configContent);
|
|
104
|
+
for (const trigger of scheduleTriggers) {
|
|
105
|
+
const missingFields = REQUIRED_FIELDS.filter(f => !trigger.presentFields.has(f));
|
|
106
|
+
if (missingFields.length === 0)
|
|
107
|
+
continue;
|
|
108
|
+
const missingList = missingFields
|
|
109
|
+
.map(f => ` - ${f}: ${FIELD_EXAMPLES[f]}`)
|
|
110
|
+
.join('\n');
|
|
111
|
+
findings.push({
|
|
112
|
+
rule: RULE_ID,
|
|
113
|
+
severity: 'must',
|
|
114
|
+
path: configPath,
|
|
115
|
+
line: trigger.triggerStartLine,
|
|
116
|
+
message: `Schedule trigger in workflow "${trigger.workflowTemplateId}" is missing required field${missingFields.length > 1 ? 's' : ''}: ${missingFields.join(', ')}. ` +
|
|
117
|
+
`The deployment API will reject this configuration.`,
|
|
118
|
+
raw_details: `Schedule triggers require all of these fields:\n` +
|
|
119
|
+
` - cronExpression: the cron schedule (e.g., "*/5 * * * *")\n` +
|
|
120
|
+
` - timezone: IANA timezone (e.g., "Europe/Brussels")\n` +
|
|
121
|
+
` - humanReadable: plain English description (e.g., "Every 5 minutes")\n` +
|
|
122
|
+
` - manualTriggerUrl: webhook URL for manual runs from the dashboard\n\n` +
|
|
123
|
+
`Missing in "${trigger.workflowTemplateId}":\n${missingList}\n\n` +
|
|
124
|
+
`Example of a complete schedule trigger:\n` +
|
|
125
|
+
` {\n` +
|
|
126
|
+
` triggerId: crypto.randomUUID(),\n` +
|
|
127
|
+
` type: "schedule" as const,\n` +
|
|
128
|
+
` cronExpression: "*/5 * * * *",\n` +
|
|
129
|
+
` timezone: "Europe/Brussels",\n` +
|
|
130
|
+
` humanReadable: "Every 5 minutes",\n` +
|
|
131
|
+
` manualTriggerUrl: \`\${baseUrl}/my-workflow-manual\`,\n` +
|
|
132
|
+
` title: "My Scheduled Task",\n` +
|
|
133
|
+
` description: "Runs every 5 minutes",\n` +
|
|
134
|
+
` } satisfies ScheduleTrigger`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return findings;
|
|
138
|
+
}
|
|
139
|
+
export default checkScheduleTriggerFields;
|
|
140
|
+
//# sourceMappingURL=schedule-trigger-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-trigger-fields.js","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/schedule-trigger-fields.ts"],"names":[],"mappings":"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"}
|