openxiangda-contracts 2.78.0 → 2.81.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/ai.d.ts +321 -21
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +37 -14
- package/dist/ai.js.map +1 -1
- package/dist/application-agent.d.ts +540 -0
- package/dist/application-agent.d.ts.map +1 -0
- package/dist/application-agent.js +98 -0
- package/dist/application-agent.js.map +1 -0
- package/dist/browser.d.ts +15 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +14 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/data-field-validation.js +26 -23
- package/dist/data-field-validation.js.map +1 -1
- package/dist/field-value-schemas.d.ts +2 -1427
- package/dist/field-value-schemas.d.ts.map +1 -1
- package/dist/field-value-schemas.js +2 -261
- package/dist/field-value-schemas.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/native-compiler/address-value.d.ts +13 -0
- package/dist/native-compiler/address-value.d.ts.map +1 -0
- package/dist/native-compiler/address-value.js +70 -0
- package/dist/native-compiler/address-value.js.map +1 -0
- package/dist/native-compiler/application-agent.d.ts +39 -0
- package/dist/native-compiler/application-agent.d.ts.map +1 -0
- package/dist/native-compiler/application-agent.js +344 -0
- package/dist/native-compiler/application-agent.js.map +1 -0
- package/dist/native-compiler/cascade-value.d.ts +6 -0
- package/dist/native-compiler/cascade-value.d.ts.map +1 -0
- package/dist/native-compiler/cascade-value.js +47 -0
- package/dist/native-compiler/cascade-value.js.map +1 -0
- package/dist/native-compiler/compiler.d.ts +1 -1
- package/dist/native-compiler/compiler.d.ts.map +1 -1
- package/dist/native-compiler/compiler.js +85 -56
- package/dist/native-compiler/compiler.js.map +1 -1
- package/dist/native-compiler/data-field.d.ts +3 -0
- package/dist/native-compiler/data-field.d.ts.map +1 -1
- package/dist/native-compiler/data-field.js +10 -2
- package/dist/native-compiler/data-field.js.map +1 -1
- package/dist/native-compiler/declaration-capacity.d.ts +3 -0
- package/dist/native-compiler/declaration-capacity.d.ts.map +1 -1
- package/dist/native-compiler/declaration-capacity.js +1 -1
- package/dist/native-compiler/declaration-capacity.js.map +1 -1
- package/dist/native-compiler/field-value-schemas.d.ts +1428 -0
- package/dist/native-compiler/field-value-schemas.d.ts.map +1 -0
- package/dist/native-compiler/field-value-schemas.js +262 -0
- package/dist/native-compiler/field-value-schemas.js.map +1 -0
- package/dist/native-compiler/index.cjs +4 -4
- package/dist/native-compiler/index.d.ts +17 -0
- package/dist/native-compiler/index.d.ts.map +1 -1
- package/dist/native-compiler/index.js +4 -4
- package/dist/native-compiler/resource-query.d.ts +21 -0
- package/dist/native-compiler/resource-query.d.ts.map +1 -0
- package/dist/native-compiler/resource-query.js +154 -0
- package/dist/native-compiler/resource-query.js.map +1 -0
- package/dist/native-compiler/workflow-approval-empty.d.ts +1 -1
- package/dist/native-compiler/workflow-approval-empty.d.ts.map +1 -1
- package/dist/native-compiler/workflow-approval-empty.js +1 -1
- package/dist/native-compiler/workflow-approval-empty.js.map +1 -1
- package/dist/native-compiler/workflow-authoring.d.ts +24 -0
- package/dist/native-compiler/workflow-authoring.d.ts.map +1 -0
- package/dist/native-compiler/workflow-authoring.js +84 -0
- package/dist/native-compiler/workflow-authoring.js.map +1 -0
- package/dist/native-compiler/workflow-business-step.d.ts +13 -2
- package/dist/native-compiler/workflow-business-step.d.ts.map +1 -1
- package/dist/native-compiler/workflow-business-step.js +31 -6
- package/dist/native-compiler/workflow-business-step.js.map +1 -1
- package/dist/native-compiler/workflow-completion-deadline.d.ts +1 -0
- package/dist/native-compiler/workflow-completion-deadline.d.ts.map +1 -1
- package/dist/native-compiler/workflow-completion-deadline.js +1 -1
- package/dist/native-compiler/workflow-completion-deadline.js.map +1 -1
- package/dist/native-compiler/workflow-correction.d.ts +1 -0
- package/dist/native-compiler/workflow-correction.d.ts.map +1 -1
- package/dist/native-compiler/workflow-correction.js +5 -4
- package/dist/native-compiler/workflow-correction.js.map +1 -1
- package/dist/native-compiler/workflow-designer.d.ts +134 -0
- package/dist/native-compiler/workflow-designer.d.ts.map +1 -0
- package/dist/native-compiler/workflow-designer.js +407 -0
- package/dist/native-compiler/workflow-designer.js.map +1 -0
- package/dist/native-compiler/workflow-events.d.ts +8 -0
- package/dist/native-compiler/workflow-events.d.ts.map +1 -0
- package/dist/native-compiler/workflow-events.js +53 -0
- package/dist/native-compiler/workflow-events.js.map +1 -0
- package/dist/native-compiler/workflow-expression.d.ts +4 -0
- package/dist/native-compiler/workflow-expression.d.ts.map +1 -0
- package/dist/native-compiler/workflow-expression.js +47 -0
- package/dist/native-compiler/workflow-expression.js.map +1 -0
- package/dist/native-compiler/workflow-graph.d.ts +16 -1
- package/dist/native-compiler/workflow-graph.d.ts.map +1 -1
- package/dist/native-compiler/workflow-graph.js +27 -5
- package/dist/native-compiler/workflow-graph.js.map +1 -1
- package/dist/native-compiler/workflow-handle.d.ts +4 -0
- package/dist/native-compiler/workflow-handle.d.ts.map +1 -0
- package/dist/native-compiler/workflow-handle.js +20 -0
- package/dist/native-compiler/workflow-handle.js.map +1 -0
- package/dist/native-compiler/workflow-initiator-approval.d.ts +1 -0
- package/dist/native-compiler/workflow-initiator-approval.d.ts.map +1 -1
- package/dist/native-compiler/workflow-initiator-approval.js +1 -1
- package/dist/native-compiler/workflow-initiator-approval.js.map +1 -1
- package/dist/native-compiler/workflow-node-administration.d.ts +12 -1
- package/dist/native-compiler/workflow-node-administration.d.ts.map +1 -1
- package/dist/native-compiler/workflow-node-administration.js +66 -14
- package/dist/native-compiler/workflow-node-administration.js.map +1 -1
- package/dist/native-compiler/workflow-parallel.d.ts +69 -0
- package/dist/native-compiler/workflow-parallel.d.ts.map +1 -0
- package/dist/native-compiler/workflow-parallel.js +178 -0
- package/dist/native-compiler/workflow-parallel.js.map +1 -0
- package/dist/native-compiler/workflow-platform-notify.d.ts +41 -0
- package/dist/native-compiler/workflow-platform-notify.d.ts.map +1 -0
- package/dist/native-compiler/workflow-platform-notify.js +49 -0
- package/dist/native-compiler/workflow-platform-notify.js.map +1 -0
- package/dist/native-compiler/workflow-reminders.d.ts +11 -0
- package/dist/native-compiler/workflow-reminders.d.ts.map +1 -0
- package/dist/native-compiler/workflow-reminders.js +12 -0
- package/dist/native-compiler/workflow-reminders.js.map +1 -0
- package/dist/native-compiler/workflow-return-eligibility.d.ts +8 -0
- package/dist/native-compiler/workflow-return-eligibility.d.ts.map +1 -0
- package/dist/native-compiler/workflow-return-eligibility.js +32 -0
- package/dist/native-compiler/workflow-return-eligibility.js.map +1 -0
- package/dist/native-compiler/workflow-return-policy.d.ts +20 -0
- package/dist/native-compiler/workflow-return-policy.d.ts.map +1 -0
- package/dist/native-compiler/workflow-return-policy.js +37 -0
- package/dist/native-compiler/workflow-return-policy.js.map +1 -0
- package/dist/native-compiler/workflow-role-union.d.ts +5 -1
- package/dist/native-compiler/workflow-role-union.d.ts.map +1 -1
- package/dist/native-compiler/workflow-role-union.js +1 -1
- package/dist/native-compiler/workflow-role-union.js.map +1 -1
- package/dist/native-compiler/workflow-schema-constants.d.ts +5 -0
- package/dist/native-compiler/workflow-schema-constants.d.ts.map +1 -0
- package/dist/native-compiler/workflow-schema-constants.js +5 -0
- package/dist/native-compiler/workflow-schema-constants.js.map +1 -0
- package/dist/native-compiler/workflow-schema.d.ts +1634 -0
- package/dist/native-compiler/workflow-schema.d.ts.map +1 -0
- package/dist/native-compiler/workflow-schema.js +519 -0
- package/dist/native-compiler/workflow-schema.js.map +1 -0
- package/dist/native-compiler/workflow-source-sync.d.ts +109 -0
- package/dist/native-compiler/workflow-source-sync.d.ts.map +1 -0
- package/dist/native-compiler/workflow-source-sync.js +116 -0
- package/dist/native-compiler/workflow-source-sync.js.map +1 -0
- package/dist/native-compiler/workflow-supervisor-chain.d.ts +16 -0
- package/dist/native-compiler/workflow-supervisor-chain.d.ts.map +1 -0
- package/dist/native-compiler/workflow-supervisor-chain.js +44 -0
- package/dist/native-compiler/workflow-supervisor-chain.js.map +1 -0
- package/dist/native-compiler/workflow-task-page.js +1 -1
- package/dist/native-compiler/workflow-task-page.js.map +1 -1
- package/dist/native-version.d.ts +7 -0
- package/dist/native-version.d.ts.map +1 -1
- package/dist/native-version.js +7 -0
- package/dist/native-version.js.map +1 -1
- package/dist/native.d.ts +10 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/references.d.ts +4 -0
- package/dist/references.d.ts.map +1 -1
- package/dist/schemas.d.ts +1485 -1088
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +33 -449
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +48 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -42
- package/dist/types.js.map +1 -1
- package/dist/workflow-summary.d.ts +1 -1
- package/dist/workflow-summary.d.ts.map +1 -1
- package/dist/workflow-summary.js +2 -1
- package/dist/workflow-summary.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DataResourceSurface } from '../surface.js';
|
|
2
|
+
import type { DataWhere } from '../types.js';
|
|
3
|
+
export interface GenericResourceQuery {
|
|
4
|
+
page: number;
|
|
5
|
+
pageSize: number;
|
|
6
|
+
keyword?: string;
|
|
7
|
+
filters?: Record<string, unknown>;
|
|
8
|
+
sort?: ResourceSort;
|
|
9
|
+
sorts?: ResourceSort[];
|
|
10
|
+
where?: DataWhere;
|
|
11
|
+
/** “我的记录”标准页使用:按系统字段 created_by 精确过滤,不放宽其他系统字段。 */
|
|
12
|
+
createdBy?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ResourceSort {
|
|
15
|
+
field: string;
|
|
16
|
+
order: 'asc' | 'desc';
|
|
17
|
+
}
|
|
18
|
+
export declare function buildResourceWhere(resourceCode: string, surface: DataResourceSurface, query: GenericResourceQuery): DataWhere | undefined;
|
|
19
|
+
/** Preserve the canonical logical tree while reducing field-kit selections to stable query values. */
|
|
20
|
+
export declare function compileAdvancedWhere(code: string, surface: DataResourceSurface, node: DataWhere): DataWhere;
|
|
21
|
+
//# sourceMappingURL=resource-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-query.d.ts","sourceRoot":"","sources":["../../src/native-compiler/resource-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE;AActE,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,oBAAoB,GAC1B,SAAS,GAAG,SAAS,CA6GvB;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,CA8B3G"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { cascadeTerminalValues, } from './cascade-value.js';
|
|
2
|
+
import { deepestAddressPredicate } from './address-value.js';
|
|
3
|
+
function isSelectionSnapshot(value) {
|
|
4
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value) && 'value' in value);
|
|
5
|
+
}
|
|
6
|
+
function stableValue(value) {
|
|
7
|
+
return isSelectionSnapshot(value) ? String(value.value) : value;
|
|
8
|
+
}
|
|
9
|
+
function stableValues(value) {
|
|
10
|
+
return (Array.isArray(value) ? value : [value]).map(stableValue);
|
|
11
|
+
}
|
|
12
|
+
export function buildResourceWhere(resourceCode, surface, query) {
|
|
13
|
+
const declaredFields = new Set(Object.keys(surface.fields));
|
|
14
|
+
const assertField = (field) => {
|
|
15
|
+
if (!declaredFields.has(field)) {
|
|
16
|
+
throw new Error(`OPENXIANGDA_RESOURCE_QUERY_FIELD_NOT_DECLARED:${resourceCode}:${field}`);
|
|
17
|
+
}
|
|
18
|
+
return field;
|
|
19
|
+
};
|
|
20
|
+
const predicates = query.where ? [compileAdvancedWhere(resourceCode, surface, query.where)] : [];
|
|
21
|
+
if (query.createdBy !== undefined && query.createdBy !== '') {
|
|
22
|
+
predicates.push({ field: 'created_by', operator: 'eq', value: query.createdBy });
|
|
23
|
+
}
|
|
24
|
+
if (query.keyword?.trim()) {
|
|
25
|
+
const searchable = (surface.list?.searchableFields || []).filter(field => declaredFields.has(field));
|
|
26
|
+
if (searchable.length) {
|
|
27
|
+
predicates.push({
|
|
28
|
+
or: searchable.map(field => ({
|
|
29
|
+
field: assertField(field),
|
|
30
|
+
operator: 'contains',
|
|
31
|
+
value: query.keyword.trim(),
|
|
32
|
+
})),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
for (const [fieldCode, value] of Object.entries(query.filters || {})) {
|
|
37
|
+
if (value === undefined ||
|
|
38
|
+
value === null ||
|
|
39
|
+
value === '' ||
|
|
40
|
+
(Array.isArray(value) && value.length === 0))
|
|
41
|
+
continue;
|
|
42
|
+
// A list state can outlive a resource route during client-side navigation.
|
|
43
|
+
if (!declaredFields.has(fieldCode))
|
|
44
|
+
continue;
|
|
45
|
+
const field = surface.fields[fieldCode];
|
|
46
|
+
if (!field)
|
|
47
|
+
continue;
|
|
48
|
+
if (field.type === 'json') {
|
|
49
|
+
predicates.push({
|
|
50
|
+
field: fieldCode,
|
|
51
|
+
operator: 'jsonContains',
|
|
52
|
+
value,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else if (field.type === 'address') {
|
|
56
|
+
const address = deepestAddressPredicate(value);
|
|
57
|
+
if (address) {
|
|
58
|
+
predicates.push({
|
|
59
|
+
field: fieldCode,
|
|
60
|
+
operator: 'jsonContains',
|
|
61
|
+
path: address.path,
|
|
62
|
+
value: address.value,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (field.type === 'cascade.single' || field.type === 'cascade.multiple') {
|
|
67
|
+
const terminals = cascadeTerminalValues(value, field.type === 'cascade.multiple');
|
|
68
|
+
if (terminals.length) {
|
|
69
|
+
predicates.push({
|
|
70
|
+
field: fieldCode,
|
|
71
|
+
operator: field.type === 'cascade.multiple' ? 'hasAny' : 'has',
|
|
72
|
+
value: field.type === 'cascade.multiple' ? terminals : terminals[0],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if ((field.type === 'date-range' || field.type === 'datetime-range') &&
|
|
77
|
+
value !== null &&
|
|
78
|
+
typeof value === 'object' &&
|
|
79
|
+
!Array.isArray(value)) {
|
|
80
|
+
const range = value;
|
|
81
|
+
if (range.start !== undefined && range.end !== undefined) {
|
|
82
|
+
predicates.push({
|
|
83
|
+
field: fieldCode,
|
|
84
|
+
operator: 'overlaps',
|
|
85
|
+
value: { start: range.start, end: range.end },
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (Array.isArray(value) &&
|
|
90
|
+
value.length === 2 &&
|
|
91
|
+
['date', 'datetime', 'number', 'money', 'percent'].includes(field.widget)) {
|
|
92
|
+
if (value[0] !== undefined && value[0] !== null && value[0] !== '') {
|
|
93
|
+
predicates.push({ field: fieldCode, operator: 'gte', value: value[0] });
|
|
94
|
+
}
|
|
95
|
+
if (value[1] !== undefined && value[1] !== null && value[1] !== '') {
|
|
96
|
+
predicates.push({ field: fieldCode, operator: 'lte', value: value[1] });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (field.type === 'option.multiple' ||
|
|
100
|
+
field.type === 'user.multiple' ||
|
|
101
|
+
field.type === 'department.multiple' ||
|
|
102
|
+
field.type === 'resource-ref.multiple') {
|
|
103
|
+
predicates.push({
|
|
104
|
+
field: fieldCode,
|
|
105
|
+
operator: 'hasAny',
|
|
106
|
+
value: stableValues(value),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const [stable] = stableValues(value);
|
|
111
|
+
predicates.push({ field: fieldCode, operator: 'eq', value: stable });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return predicates.length ? { and: predicates } : undefined;
|
|
115
|
+
}
|
|
116
|
+
/** Preserve the canonical logical tree while reducing field-kit selections to stable query values. */
|
|
117
|
+
export function compileAdvancedWhere(code, surface, node) {
|
|
118
|
+
if ('and' in node)
|
|
119
|
+
return { and: node.and.map(item => compileAdvancedWhere(code, surface, item)) };
|
|
120
|
+
if ('or' in node)
|
|
121
|
+
return { or: node.or.map(item => compileAdvancedWhere(code, surface, item)) };
|
|
122
|
+
if ('not' in node)
|
|
123
|
+
return { not: compileAdvancedWhere(code, surface, node.not) };
|
|
124
|
+
// A path already selects the canonical subvalue; top-level field control
|
|
125
|
+
// normalization must not replace its value or silently drop the path.
|
|
126
|
+
if (node.path !== undefined)
|
|
127
|
+
return node;
|
|
128
|
+
if (node.operator === 'isEmpty' || node.operator === 'isNotEmpty')
|
|
129
|
+
return { field: node.field, operator: node.operator };
|
|
130
|
+
const field = surface.fields[node.field];
|
|
131
|
+
if (node.operator === 'has') {
|
|
132
|
+
const cascadePath = field?.type === 'cascade.single' && Array.isArray(node.value) &&
|
|
133
|
+
node.value.length > 0 && node.value.every(isSelectionSnapshot);
|
|
134
|
+
return { ...node, value: cascadePath
|
|
135
|
+
? cascadeTerminalValues(node.value, false)[0]
|
|
136
|
+
: stableValue(node.value) };
|
|
137
|
+
}
|
|
138
|
+
if (['in', 'between', 'hasAny', 'hasAll'].includes(node.operator)) {
|
|
139
|
+
// Explicit operators own operand cardinality. Do not apply shortcut
|
|
140
|
+
// filters, which infer hasAny or reduce a range to its first comparison.
|
|
141
|
+
if (!Array.isArray(node.value))
|
|
142
|
+
return node;
|
|
143
|
+
const cascadePaths = field?.type === 'cascade.multiple' &&
|
|
144
|
+
['hasAny', 'hasAll'].includes(node.operator) && node.value.length > 0 &&
|
|
145
|
+
node.value.every(path => Array.isArray(path) && path.length > 0 && path.every(isSelectionSnapshot));
|
|
146
|
+
return { ...node, value: cascadePaths
|
|
147
|
+
? cascadeTerminalValues(node.value, true)
|
|
148
|
+
: node.value.map(stableValue) };
|
|
149
|
+
}
|
|
150
|
+
const normalized = buildResourceWhere(code, surface, { page: 1, pageSize: 20, filters: { [node.field]: node.value } });
|
|
151
|
+
const predicate = normalized && 'and' in normalized ? normalized.and[0] : undefined;
|
|
152
|
+
return predicate && 'field' in predicate ? { ...predicate, operator: node.operator } : node;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=resource-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-query.js","sourceRoot":"","sources":["../../src/native-compiler/resource-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Only these sources can currently attest a genuine empty approval result. */
|
|
2
|
-
export declare const WORKFLOW_APPROVAL_EMPTY_PROVIDERS: readonly ["fixed_users", "input_users", "form_field_users", "app_role", "app_role_in_scope"];
|
|
2
|
+
export declare const WORKFLOW_APPROVAL_EMPTY_PROVIDERS: readonly ["supervisor_chain", "fixed_users", "input_users", "form_field_users", "app_role", "app_role_in_scope"];
|
|
3
3
|
type Node = {
|
|
4
4
|
kind: string;
|
|
5
5
|
emptyPolicy?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-approval-empty.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-approval-empty.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,iCAAiC,
|
|
1
|
+
{"version":3,"file":"workflow-approval-empty.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-approval-empty.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,iCAAiC,kHAEpC,CAAC;AAEX,KAAK,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;CAAE,CAAC;AACnD,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEnE,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAYvG;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,GAAG,SAAS,GAAG,OAAO,CAOtB;AAED,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAGpG"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Only these sources can currently attest a genuine empty approval result. */
|
|
2
2
|
export const WORKFLOW_APPROVAL_EMPTY_PROVIDERS = [
|
|
3
|
-
'fixed_users', 'input_users', 'form_field_users', 'app_role', 'app_role_in_scope',
|
|
3
|
+
'supervisor_chain', 'fixed_users', 'input_users', 'form_field_users', 'app_role', 'app_role_in_scope',
|
|
4
4
|
];
|
|
5
5
|
export function validateWorkflowApprovalEmptyPolicy(definition, binding) {
|
|
6
6
|
const errors = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-approval-empty.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-approval-empty.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"workflow-approval-empty.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-approval-empty.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB;CAC7F,CAAC;AAMX,MAAM,UAAU,mCAAmC,CAAC,UAAsB,EAAE,OAAiB;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,SAAS;QACnE,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAqB,CAAC,EAAE,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO;YAC/C,CAAC,iCAAiC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,QAAe,CAAC,EAAE,CAAC;YACvG,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,uBAAuB,CAAC,IAAU,EAAE,UAMvC;IACX,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM;QAC5D,UAAU,EAAE,WAAW,KAAK,eAAe;QAC3C,iCAAiC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAe,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC1E,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,+BAA+B,CAAC,UAAsB,EAAE,WAAmB;IACzF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;IACrG,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;AAClH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { WorkflowBinding, WorkflowBindingEntry, WorkflowDefinition, WorkflowNode, WorkflowConfigurableOperation } from '../types.js';
|
|
2
|
+
import type { WorkflowBusinessStepNode } from './workflow-business-step.js';
|
|
3
|
+
/** Released source declaration, including capabilities not yet used by the workflow. */
|
|
4
|
+
export interface WorkflowAuthoring {
|
|
5
|
+
businessSteps?: Array<Omit<WorkflowBusinessStepNode, 'id' | 'kind' | 'next' | 'inputs' | 'notification'>>;
|
|
6
|
+
}
|
|
7
|
+
export interface WorkflowDesignerCatalog {
|
|
8
|
+
appVersionId: string;
|
|
9
|
+
digest: string;
|
|
10
|
+
taskPages: NonNullable<WorkflowDefinition['taskPages']>;
|
|
11
|
+
steps: NonNullable<WorkflowAuthoring['businessSteps']>;
|
|
12
|
+
peopleSources: WorkflowBinding['bindings'];
|
|
13
|
+
}
|
|
14
|
+
export declare const workflowCanvasBindingKey: (id: string) => string;
|
|
15
|
+
export declare const workflowHumanOperations: (kind: "approval" | "handle", hasPage: boolean) => WorkflowConfigurableOperation[];
|
|
16
|
+
export declare function workflowAuthoringCatalog(definition: WorkflowDefinition, binding: WorkflowBinding, appVersionId?: string, digest?: string): WorkflowDesignerCatalog;
|
|
17
|
+
/** Standard blank nodes do not borrow authority from a previous human node. */
|
|
18
|
+
export declare function createWorkflowHumanNode(id: string, kind: 'approval' | 'handle' | 'cc', title: string, next: string, pageCode?: string, pages?: WorkflowDesignerCatalog['taskPages'], rejectTarget?: string): WorkflowNode;
|
|
19
|
+
export declare function validateWorkflowCanvasHuman(node: WorkflowNode, catalog: WorkflowDesignerCatalog): string[];
|
|
20
|
+
/** New bindings can select principals or reuse a released source, never invent a provider implementation. */
|
|
21
|
+
export declare function validateWorkflowCanvasBinding(entry: WorkflowBindingEntry, catalog: WorkflowDesignerCatalog, incomplete?: boolean): string[];
|
|
22
|
+
/** Only unreferenced new canvas bindings are removed; released bindings keep their source identity. */
|
|
23
|
+
export declare function pruneWorkflowCanvasBindings(definition: WorkflowDefinition, binding: WorkflowBinding, published: WorkflowBinding): WorkflowBinding;
|
|
24
|
+
//# sourceMappingURL=workflow-authoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-authoring.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-authoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAqB,YAAY,EAAE,6BAA6B,EAAmF,MAAM,aAAa,CAAC;AAC9O,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAI5E,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC;CAC3G;AACD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;CAC5C;AACD,eAAO,MAAM,wBAAwB,GAAI,IAAI,MAAM,WAAmB,CAAC;AACvE,eAAO,MAAM,uBAAuB,GAAI,MAAM,UAAU,GAAG,QAAQ,EAAE,SAAS,OAAO,KAAG,6BAA6B,EAGpH,CAAC;AACF,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,SAAK,EAAE,MAAM,SAAK,GAAG,uBAAuB,CAO1J;AACD,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,uBAAuB,CAAC,WAAW,CAAM,EAAE,YAAY,SAAO,GAAG,YAAY,CAY3N;AAKD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM,EAAE,CAkB1G;AACD,6GAA6G;AAC7G,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,uBAAuB,EAAE,UAAU,UAAQ,GAAG,MAAM,EAAE,CASzI;AAED,uGAAuG;AACvG,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,GAAG,eAAe,CAEjJ"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { isWorkflowPlatformNotify } from './workflow-platform-notify.js';
|
|
2
|
+
import { workflowOperationMinimumOpinion, workflowOperationOpinion } from './workflow-node-administration.js';
|
|
3
|
+
export const workflowCanvasBindingKey = (id) => `canvas_${id}`;
|
|
4
|
+
export const workflowHumanOperations = (kind, hasPage) => [
|
|
5
|
+
...(kind === 'approval' ? ['approve', 'reject'] : ['complete']),
|
|
6
|
+
...(hasPage ? ['save_form'] : []), 'return', 'transfer', 'delegate', ...(kind === 'approval' ? ['add_assignee'] : []),
|
|
7
|
+
];
|
|
8
|
+
export function workflowAuthoringCatalog(definition, binding, appVersionId = '', digest = '') {
|
|
9
|
+
const steps = new Map();
|
|
10
|
+
for (const node of [...Object.values(definition.nodes), ...definition.authoring?.businessSteps || []]) {
|
|
11
|
+
if (!('handler' in node) || isWorkflowPlatformNotify(node))
|
|
12
|
+
continue;
|
|
13
|
+
steps.set(`${node.handler.code}@${node.handler.version}`, { title: node.title, handler: node.handler, inputSchema: node.inputSchema, outputSchema: node.outputSchema });
|
|
14
|
+
}
|
|
15
|
+
return { appVersionId, digest, taskPages: definition.taskPages || {}, steps: [...steps.values()], peopleSources: binding.bindings };
|
|
16
|
+
}
|
|
17
|
+
/** Standard blank nodes do not borrow authority from a previous human node. */
|
|
18
|
+
export function createWorkflowHumanNode(id, kind, title, next, pageCode, pages = {}, rejectTarget = next) {
|
|
19
|
+
const binding = workflowCanvasBindingKey(id);
|
|
20
|
+
if (kind === 'cc')
|
|
21
|
+
return { id, kind, title, next, binding, emptyPolicy: 'block', notify: true, administration: { assigneeProviders: ['fixed_users', 'app_role'] } };
|
|
22
|
+
const page = pageCode ? pages[pageCode] : undefined;
|
|
23
|
+
const operations = workflowHumanOperations(kind, !!page);
|
|
24
|
+
const human = { id, title, binding, mode: 'single', allowedOperations: operations, requiredOperations: [kind === 'approval' ? 'approve' : 'complete'],
|
|
25
|
+
administration: { modes: ['single', 'any', 'all', 'sequence'], assigneeProviders: ['fixed_users', 'app_role'], operations },
|
|
26
|
+
fieldPolicy: { default: 'readonly', fields: Object.fromEntries((page?.fields || []).map(field => [field.code, field.readonly ? 'readonly' : field.required ? 'edit_required' : 'edit'])) },
|
|
27
|
+
operationPolicy: { ...(kind === 'approval' ? { approve: { opinion: 'optional', minimumOpinion: 'optional' }, reject: { opinion: 'required', minimumOpinion: 'required' } } : { complete: { opinion: 'optional', minimumOpinion: 'optional' } }),
|
|
28
|
+
return: { opinion: 'required', minimumOpinion: 'required' }, transfer: { opinion: 'required', minimumOpinion: 'required' }, delegate: { opinion: 'required', minimumOpinion: 'required' }, ...(kind === 'approval' ? { add_assignee: { opinion: 'required', minimumOpinion: 'required' } } : {}) },
|
|
29
|
+
...(page ? { taskPageCode: pageCode } : {}) };
|
|
30
|
+
return (kind === 'approval' ? { ...human, kind, onApprove: next, onReject: rejectTarget } : { ...human, kind, next });
|
|
31
|
+
}
|
|
32
|
+
const same = (a, b) => {
|
|
33
|
+
const sort = (v) => Array.isArray(v) ? v.map(sort) : v && typeof v === 'object' ? Object.fromEntries(Object.keys(v).sort().filter(key => v[key] !== undefined).map(key => [key, sort(v[key])])) : v;
|
|
34
|
+
return JSON.stringify(sort(a)) === JSON.stringify(sort(b));
|
|
35
|
+
};
|
|
36
|
+
export function validateWorkflowCanvasHuman(node, catalog) {
|
|
37
|
+
if (!['approval', 'handle', 'cc'].includes(node.kind) || !('binding' in node) || node.binding !== workflowCanvasBindingKey(node.id))
|
|
38
|
+
return ['WORKFLOW_DESIGNER_CANVAS_BINDING_REQUIRED'];
|
|
39
|
+
if (node.kind === 'cc')
|
|
40
|
+
return same(node.administration, { assigneeProviders: ['fixed_users', 'app_role'] }) ? [] : ['WORKFLOW_DESIGNER_CODE_OWNED:administration'];
|
|
41
|
+
if (node.kind !== 'approval' && node.kind !== 'handle')
|
|
42
|
+
return [];
|
|
43
|
+
const standard = createWorkflowHumanNode(node.id, node.kind, node.title, '', node.taskPageCode, catalog.taskPages);
|
|
44
|
+
const errors = [];
|
|
45
|
+
for (const key of ['administration', 'requiredOperations'])
|
|
46
|
+
if (!same(node[key], standard[key]))
|
|
47
|
+
errors.push(`WORKFLOW_DESIGNER_CODE_OWNED:${node.id}.${key}`);
|
|
48
|
+
if (node.taskPageCode && !catalog.taskPages[node.taskPageCode])
|
|
49
|
+
errors.push(`WORKFLOW_DESIGNER_PAGE_UNRELEASED:${node.id}`);
|
|
50
|
+
const ceiling = standard.fieldPolicy;
|
|
51
|
+
if (node.fieldPolicy?.default && node.fieldPolicy.default !== 'readonly')
|
|
52
|
+
errors.push(`WORKFLOW_DESIGNER_FIELD_CEILING:${node.id}`);
|
|
53
|
+
for (const [code, policy] of Object.entries(node.fieldPolicy?.fields || {}))
|
|
54
|
+
if (!(code in ceiling.fields) || !['readonly', 'edit', 'edit_required'].includes(policy) || ['edit', 'edit_required'].includes(policy) && ceiling.fields[code] === 'readonly')
|
|
55
|
+
errors.push(`WORKFLOW_DESIGNER_FIELD_CEILING:${node.id}.${code}`);
|
|
56
|
+
const operations = workflowHumanOperations(node.kind, !!node.taskPageCode);
|
|
57
|
+
if ((node.allowedOperations || operations).some(operation => !operations.includes(operation)))
|
|
58
|
+
errors.push(`WORKFLOW_DESIGNER_OPERATION_NOT_ALLOWED:${node.id}`);
|
|
59
|
+
for (const [operation, policy] of Object.entries(node.operationPolicy || {})) {
|
|
60
|
+
const baseline = standard.operationPolicy?.[operation];
|
|
61
|
+
if (!operations.includes(operation) || !same(policy.minimumOpinion, baseline?.minimumOpinion) || ['none', 'optional', 'required'].indexOf(workflowOperationOpinion(operation, policy)) < ['none', 'optional', 'required'].indexOf(workflowOperationMinimumOpinion(operation, baseline)))
|
|
62
|
+
errors.push(`WORKFLOW_DESIGNER_OPINION_MINIMUM:${node.id}.${operation}`);
|
|
63
|
+
}
|
|
64
|
+
return errors;
|
|
65
|
+
}
|
|
66
|
+
/** New bindings can select principals or reuse a released source, never invent a provider implementation. */
|
|
67
|
+
export function validateWorkflowCanvasBinding(entry, catalog, incomplete = false) {
|
|
68
|
+
if (Object.values(catalog.peopleSources).some(source => same(source, entry)))
|
|
69
|
+
return [];
|
|
70
|
+
const keys = Object.keys(entry);
|
|
71
|
+
if (entry.provider === 'fixed_users' && keys.every(key => ['provider', 'users'].includes(key)) && Array.isArray(entry.users) && entry.users.length <= 200 && (incomplete || entry.users.length > 0) && new Set(entry.users).size === entry.users.length && entry.users.every(id => typeof id === 'string' && !!id.trim() && id.length <= 255))
|
|
72
|
+
return [];
|
|
73
|
+
if (entry.provider === 'app_role' && keys.every(key => ['provider', 'roleCode', 'roleCodes'].includes(key))) {
|
|
74
|
+
const roles = entry.roleCodes || (entry.roleCode ? [entry.roleCode] : []);
|
|
75
|
+
if (!(entry.roleCode && entry.roleCodes) && (incomplete || roles.length > 0) && roles.length <= 8 && new Set(roles).size === roles.length && roles.every(role => /^[a-z][a-z0-9_-]{0,127}$/.test(role)))
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
return ['WORKFLOW_DESIGNER_BINDING_UNRELEASED'];
|
|
79
|
+
}
|
|
80
|
+
/** Only unreferenced new canvas bindings are removed; released bindings keep their source identity. */
|
|
81
|
+
export function pruneWorkflowCanvasBindings(definition, binding, published) {
|
|
82
|
+
return { ...binding, bindings: Object.fromEntries(Object.entries(binding.bindings).filter(([key]) => Object.hasOwn(published.bindings, key) || !key.startsWith('canvas_') || Object.values(definition.nodes).some(node => 'binding' in node && node.binding === key))) };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=workflow-authoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-authoring.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-authoring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAa9G,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAA2B,EAAE,OAAgB,EAAmC,EAAE,CAAC;IACzH,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAU,CAAC;IACjF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAU,CAAC,CAAC,CAAC,EAAE,CAAC;CACxI,CAAC;AACF,MAAM,UAAU,wBAAwB,CAAC,UAA8B,EAAE,OAAwB,EAAE,YAAY,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE;IAC/H,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoD,CAAC;IAC1E,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;QACtG,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC;YAAE,SAAS;QACrE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1K,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;AACtI,CAAC;AACD,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,EAAU,EAAE,IAAkC,EAAE,KAAa,EAAE,IAAY,EAAE,QAAiB,EAAE,QAA8C,EAAE,EAAE,YAAY,GAAG,IAAI;IAC3M,MAAM,OAAO,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;IACrK,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,UAAmB,CAAC;QAC9K,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAA2B,EAAE,iBAAiB,EAAE,CAAC,aAAa,EAAE,UAAU,CAA2C,EAAE,UAAU,EAAE;QAC/L,WAAW,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAuC,EAAE;QACzO,eAAe,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,CAAC;YACnS,MAAM,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,UAAmB,EAAE,cAAc,EAAE,UAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC5W,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAiB,CAAC;AACxI,CAAC;AACD,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IAC/C,MAAM,IAAI,GAAG,CAAC,CAAM,EAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9M,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AACF,MAAM,UAAU,2BAA2B,CAAC,IAAkB,EAAE,OAAgC;IAC9F,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAC1L,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,iBAAiB,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;IACpK,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAsB,CAAC;IACxI,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAU;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACxK,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5H,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAY,CAAC;IACtC,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,UAAU;QAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpI,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE,CAAC;QAAE,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAO,CAAC,IAAI,CAAC,KAAK,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/T,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3E,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,SAA0C,CAAC,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,2CAA2C,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClM,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,SAA0C,CAAC,CAAC;QACxF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC;IACjY,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,6GAA6G;AAC7G,MAAM,UAAU,6BAA6B,CAAC,KAA2B,EAAE,OAAgC,EAAE,UAAU,GAAG,KAAK;IAC7H,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACxF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACzV,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5G,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IACrN,CAAC;IACD,OAAO,CAAC,sCAAsC,CAAC,CAAC;AAClD,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,2BAA2B,CAAC,UAA8B,EAAE,OAAwB,EAAE,SAA0B;IAC9H,OAAO,EAAC,GAAG,OAAO,EAAC,QAAQ,EAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAC,EAAE,CAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAC,GAAG,CAAC,IAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,EAAE,CAAA,SAAS,IAAI,IAAI,IAAE,IAAI,CAAC,OAAO,KAAG,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC;AAC1P,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type WorkflowPlatformNotification } from './workflow-platform-notify.js';
|
|
1
2
|
export declare const WORKFLOW_BUSINESS_STEP_EVENT = "openxiangda.workflow.step.requested.v2";
|
|
2
3
|
export declare const WORKFLOW_BUSINESS_STEP_EVENTS: readonly ["openxiangda.workflow.step.requested.v2", "openxiangda.workflow.step.result_received.v2", "openxiangda.workflow.step.completed.v2", "openxiangda.workflow.step.continuation_failed.v2"];
|
|
3
4
|
export declare const WORKFLOW_BUSINESS_STEP_MAX_BYTES = 16384;
|
|
@@ -32,6 +33,7 @@ export interface WorkflowBusinessStepNode {
|
|
|
32
33
|
inputSchema: Record<string, unknown>;
|
|
33
34
|
outputSchema: Record<string, unknown>;
|
|
34
35
|
inputs: Record<string, WorkflowBusinessStepInput>;
|
|
36
|
+
notification?: WorkflowPlatformNotification;
|
|
35
37
|
}
|
|
36
38
|
/** This result is authenticated by the claimed request event, never by a userId. */
|
|
37
39
|
export interface WorkflowBusinessStepResult {
|
|
@@ -64,7 +66,7 @@ export interface WorkflowBusinessStepSummary {
|
|
|
64
66
|
handlerVersion: number;
|
|
65
67
|
mode?: WorkflowBusinessStepHandlerContract['mode'];
|
|
66
68
|
nodeId?: string;
|
|
67
|
-
status: 'waiting' | 'result_ready' | 'completed' | 'cancelled';
|
|
69
|
+
status: 'waiting' | 'result_ready' | 'result_stale_inputs' | 'completed' | 'cancelled';
|
|
68
70
|
inputDigest?: string;
|
|
69
71
|
resultDigest?: string;
|
|
70
72
|
expectedFactRevision?: number;
|
|
@@ -79,6 +81,7 @@ export interface WorkflowBusinessStepRecoveryOptions {
|
|
|
79
81
|
status: string;
|
|
80
82
|
canRetryBusinessStep: boolean;
|
|
81
83
|
businessStep: WorkflowBusinessStepSummary | null;
|
|
84
|
+
businessSteps?: WorkflowBusinessStepSummary[];
|
|
82
85
|
}
|
|
83
86
|
export interface WorkflowBusinessStepRecoveryPreview {
|
|
84
87
|
action: 'admin_retry_step';
|
|
@@ -92,10 +95,16 @@ export interface WorkflowBusinessStepRecoveryPreview {
|
|
|
92
95
|
resultDigest: string;
|
|
93
96
|
lastErrorCode?: string;
|
|
94
97
|
continuationAttempts: number;
|
|
95
|
-
reexecutesBusinessHandler:
|
|
98
|
+
reexecutesBusinessHandler: boolean;
|
|
99
|
+
recovery?: 'continue' | 'recompute' | 'apply_stored';
|
|
100
|
+
inputsChanged?: boolean;
|
|
101
|
+
mode?: WorkflowBusinessStepHandlerContract['mode'];
|
|
96
102
|
};
|
|
97
103
|
}
|
|
98
104
|
type Definition = {
|
|
105
|
+
authoring?: {
|
|
106
|
+
businessSteps?: Array<Record<string, any>>;
|
|
107
|
+
};
|
|
99
108
|
code?: string;
|
|
100
109
|
startAt?: string;
|
|
101
110
|
inputSchema?: Record<string, any>;
|
|
@@ -111,6 +120,8 @@ export declare function validateWorkflowBusinessStepSchema(value: unknown): bool
|
|
|
111
120
|
/** Business input stays closed; only the kernel adds committed step outputs. */
|
|
112
121
|
export declare function workflowBusinessStepFactSchema(definition: Definition): Record<string, any>;
|
|
113
122
|
export declare function validateWorkflowBusinessStepHandlerContract(value: unknown): value is WorkflowBusinessStepHandlerContract;
|
|
123
|
+
/** Handler declarations not yet placed on a graph still need a released execution contract. */
|
|
124
|
+
export declare function validateWorkflowAuthoringSteps(definition: Definition): string[];
|
|
114
125
|
export declare function validateWorkflowBusinessSteps(definition: Definition, binding?: {
|
|
115
126
|
bindings?: Record<string, Record<string, any>>;
|
|
116
127
|
}): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-business-step.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-business-step.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-business-step.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-business-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isWorkflowPlatformNotify, validateWorkflowPlatformNotify } from './workflow-platform-notify.js';
|
|
1
2
|
export const WORKFLOW_BUSINESS_STEP_EVENT = 'openxiangda.workflow.step.requested.v2';
|
|
2
3
|
export const WORKFLOW_BUSINESS_STEP_EVENTS = [WORKFLOW_BUSINESS_STEP_EVENT, 'openxiangda.workflow.step.result_received.v2', 'openxiangda.workflow.step.completed.v2', 'openxiangda.workflow.step.continuation_failed.v2'];
|
|
3
4
|
export const WORKFLOW_BUSINESS_STEP_MAX_BYTES = 16_384;
|
|
@@ -193,9 +194,13 @@ export function validateWorkflowBusinessStepHandlerContract(value) {
|
|
|
193
194
|
function targets(node) {
|
|
194
195
|
if (node.kind === 'approval')
|
|
195
196
|
return [node.onApprove, node.onReject];
|
|
197
|
+
if (node.kind === 'parallel')
|
|
198
|
+
return [...(Array.isArray(node.branches) ? node.branches.map((branch) => branch.target) : []), node.join];
|
|
199
|
+
if (node.kind === 'join')
|
|
200
|
+
return [node.next];
|
|
196
201
|
if (node.kind === 'condition')
|
|
197
202
|
return [...(Array.isArray(node.branches) ? node.branches.map((branch) => branch.target) : []), node.otherwise];
|
|
198
|
-
if (node.kind === 'cc' || node.kind === 'action')
|
|
203
|
+
if (node.kind === 'cc' || node.kind === 'action' || node.kind === 'handle')
|
|
199
204
|
return [node.next];
|
|
200
205
|
return [];
|
|
201
206
|
}
|
|
@@ -206,6 +211,26 @@ function expressionPaths(value, depth = 0) {
|
|
|
206
211
|
return typeof value.path === 'string' ? [value.path] : [];
|
|
207
212
|
return ['left', 'right', 'value'].flatMap(key => expressionPaths(value[key], depth + 1)).concat(Array.isArray(value.values) ? value.values.flatMap(child => expressionPaths(child, depth + 1)) : []);
|
|
208
213
|
}
|
|
214
|
+
/** Handler declarations not yet placed on a graph still need a released execution contract. */
|
|
215
|
+
export function validateWorkflowAuthoringSteps(definition) {
|
|
216
|
+
if (definition.authoring === undefined)
|
|
217
|
+
return [];
|
|
218
|
+
const authoring = definition.authoring;
|
|
219
|
+
if (!record(authoring) || Object.keys(authoring).some(key => key !== 'businessSteps') || authoring.businessSteps !== undefined && (!Array.isArray(authoring.businessSteps) || authoring.businessSteps.length > 100))
|
|
220
|
+
return ['WORKFLOW_AUTHORING_CATALOG_INVALID'];
|
|
221
|
+
const errors = [], codes = new Set();
|
|
222
|
+
for (const step of authoring.businessSteps || []) {
|
|
223
|
+
const handler = step?.handler;
|
|
224
|
+
if (!record(step) || Object.keys(step).some(key => !['title', 'handler', 'inputSchema', 'outputSchema'].includes(key)) || typeof step.title !== 'string' || !step.title.trim() || step.title.length > 160 ||
|
|
225
|
+
!record(handler) || Object.keys(handler).some(key => !['code', 'version', 'mode', 'dataTransaction'].includes(key)) || !Number.isSafeInteger(handler.version) || handler.version < 1 || handler.version > 1000000 ||
|
|
226
|
+
!/^[a-z][a-z0-9-]{0,100}$/.test(handler.code || '') || !handler.code.endsWith(`-v${handler.version}`) || !['pure', 'reconciled-effect'].includes(handler.mode) || handler.dataTransaction !== undefined && (handler.dataTransaction !== true || handler.mode !== 'reconciled-effect') ||
|
|
227
|
+
!validateWorkflowBusinessStepSchema(step.inputSchema) || !validateWorkflowBusinessStepSchema(step.outputSchema) || codes.has(handler.code))
|
|
228
|
+
errors.push('WORKFLOW_AUTHORING_STEP_INVALID');
|
|
229
|
+
if (handler?.code)
|
|
230
|
+
codes.add(handler.code);
|
|
231
|
+
}
|
|
232
|
+
return errors;
|
|
233
|
+
}
|
|
209
234
|
export function validateWorkflowBusinessSteps(definition, binding) {
|
|
210
235
|
if (!record(definition) || !record(definition.nodes))
|
|
211
236
|
return ['WORKFLOW_STEP_DEFINITION_INVALID'];
|
|
@@ -213,12 +238,12 @@ export function validateWorkflowBusinessSteps(definition, binding) {
|
|
|
213
238
|
const actions = Object.entries(nodes).filter(([, node]) => node?.kind === 'action');
|
|
214
239
|
if (!actions.length)
|
|
215
240
|
return [];
|
|
216
|
-
const errors = [];
|
|
241
|
+
const errors = [...validateWorkflowPlatformNotify(definition), ...validateWorkflowAuthoringSteps(definition)];
|
|
217
242
|
if (Object.hasOwn(definition.inputSchema?.properties || {}, 'steps'))
|
|
218
243
|
errors.push('WORKFLOW_STEP_FACT_NAMESPACE_RESERVED');
|
|
219
244
|
const factSchema = workflowBusinessStepFactSchema(definition);
|
|
220
245
|
for (const [id, node] of actions) {
|
|
221
|
-
if (Object.keys(node).some(key => !['id', 'kind', 'title', 'next', 'handler', 'inputSchema', 'outputSchema', 'inputs'].includes(key)) ||
|
|
246
|
+
if (Object.keys(node).some(key => !['id', 'kind', 'title', 'next', 'handler', 'inputSchema', 'outputSchema', 'inputs', ...(isWorkflowPlatformNotify(node) ? ['notification'] : [])].includes(key)) ||
|
|
222
247
|
node.id !== id || !keyPattern.test(id) || forbidden.has(id) || typeof node.title !== 'string' || !node.title.trim() || node.title.length > 255 || typeof node.next !== 'string' || !Object.hasOwn(nodes, node.next))
|
|
223
248
|
errors.push(`WORKFLOW_STEP_NODE_INVALID:${id}`);
|
|
224
249
|
const handler = node.handler;
|
|
@@ -287,7 +312,7 @@ export function validateWorkflowBusinessSteps(definition, binding) {
|
|
|
287
312
|
}
|
|
288
313
|
}
|
|
289
314
|
if (binding)
|
|
290
|
-
for (const [, action] of actions) {
|
|
315
|
+
for (const [, action] of actions.filter(([, node]) => !isWorkflowPlatformNotify(node))) {
|
|
291
316
|
const visited = new Set(), queue = [action.next];
|
|
292
317
|
while (queue.length && visited.size <= 200) {
|
|
293
318
|
const id = queue.shift();
|
|
@@ -346,8 +371,8 @@ export function compileWorkflowBusinessStepHandlers(definitions) {
|
|
|
346
371
|
const errors = validateWorkflowBusinessSteps(definition);
|
|
347
372
|
if (errors.length)
|
|
348
373
|
throw new Error(errors.join('; '));
|
|
349
|
-
for (const node of Object.values(definition.nodes || {})) {
|
|
350
|
-
if (node.
|
|
374
|
+
for (const node of [...Object.values(definition.nodes || {}), ...definition.authoring?.businessSteps || []]) {
|
|
375
|
+
if (!node.handler || isWorkflowPlatformNotify(node))
|
|
351
376
|
continue;
|
|
352
377
|
const contract = { version: node.handler.version, mode: node.handler.mode,
|
|
353
378
|
...(node.handler.dataTransaction ? { dataTransaction: true } : {}), inputSchema: node.inputSchema, outputSchema: node.outputSchema };
|