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
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import { compileApplicationAgentsV2 } from './application-agent.js';
|
|
2
|
+
import { validateWorkflowSupervisorChains, validateWorkflowSupervisorChainBinding } from './workflow-supervisor-chain.js';
|
|
3
|
+
import { validateWorkflowReminders } from './workflow-reminders.js';
|
|
4
|
+
import { isWorkflowPlatformNotify } from './workflow-platform-notify.js';
|
|
5
|
+
import { validateWorkflowParallel } from './workflow-parallel.js';
|
|
6
|
+
import { validateWorkflowReturnPolicies, workflowReturnTargets } from './workflow-return-policy.js';
|
|
7
|
+
import { validateWorkflowHandlingNodes } from './workflow-handle.js';
|
|
1
8
|
import { normalizeDataMutationGrants } from './service-mutations.js';
|
|
2
9
|
import { hasNativeParentReadPolicy, resolveNativeParentReadBinding, validateNativeParentReadPolicies, NativeParentReadPolicyError } from './parent-read-policy.js';
|
|
3
10
|
import { requiresExtendedFieldCapacity, WORKFLOW_LAUNCH_MAX_INPUTS } from './data-capacity.js';
|
|
@@ -26,7 +33,7 @@ import { validateWorkflowCorrections } from './workflow-correction.js';
|
|
|
26
33
|
import { dateEventProjectionFieldsV2 } from './date-event-projection.js';
|
|
27
34
|
import { validateWorkflowTaskPages } from './workflow-task-page.js';
|
|
28
35
|
import { requiresExtendedOwnedSubtableCapacity, requiresAggregateOwnedSubtableCapacity, dataOwnedRowLimit, isDataOwnedRowLimit } from './data-capacity.js';
|
|
29
|
-
import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions
|
|
36
|
+
import { validateWorkflowBusinessSteps, compileWorkflowBusinessStepHandlers, validateWorkflowBusinessStepSubscriptions } from './workflow-business-step.js';
|
|
30
37
|
import { validateWorkflowAssignmentRoutingBindings, validateWorkflowAssignmentRoutingPolicy } from './workflow-assignment-routing.js';
|
|
31
38
|
import { requiresWorkflowRoleUnion, validateWorkflowRoleUnion, requiresWorkflowRoleInputSelection, validateWorkflowRoleInputSelection } from './workflow-role-union.js';
|
|
32
39
|
import { assertWorkflowOwnedSubjectCreate, assertWorkflowOwnedSubjectCreateResources } from './workflow-owned-subject.js';
|
|
@@ -91,6 +98,8 @@ const ADMIN_NAVIGATION_ICONS = new Set([
|
|
|
91
98
|
'settings',
|
|
92
99
|
]);
|
|
93
100
|
const WORKFLOW_OPERATIONS = new Set([
|
|
101
|
+
'complete',
|
|
102
|
+
'save_form',
|
|
94
103
|
'approve',
|
|
95
104
|
'reject',
|
|
96
105
|
'return',
|
|
@@ -128,46 +137,8 @@ export const DATA_EVENT_TYPES_V2 = [
|
|
|
128
137
|
'openxiangda.data.record.updated.v2',
|
|
129
138
|
'openxiangda.data.record.deleted.v2',
|
|
130
139
|
];
|
|
131
|
-
export
|
|
132
|
-
|
|
133
|
-
WORKFLOW_BUSINESS_STEP_EVENT,
|
|
134
|
-
'openxiangda.workflow.step.result_received.v2',
|
|
135
|
-
'openxiangda.workflow.step.completed.v2',
|
|
136
|
-
'openxiangda.workflow.step.continuation_failed.v2',
|
|
137
|
-
'openxiangda.workflow.instance.started.v2',
|
|
138
|
-
'openxiangda.workflow.instance.cc_added.v2',
|
|
139
|
-
'openxiangda.workflow.instance.completed.v2',
|
|
140
|
-
'openxiangda.workflow.instance.rejected.v2',
|
|
141
|
-
'openxiangda.workflow.instance.returned.v2',
|
|
142
|
-
'openxiangda.workflow.instance.resumed.v2',
|
|
143
|
-
'openxiangda.workflow.instance.withdrawn.v2',
|
|
144
|
-
'openxiangda.workflow.instance.terminated.v2',
|
|
145
|
-
'openxiangda.workflow.task.created.v2',
|
|
146
|
-
'openxiangda.workflow.task.assigned.v2',
|
|
147
|
-
'openxiangda.workflow.task.assignment_pending.v2',
|
|
148
|
-
'openxiangda.workflow.task.assignment_resolution_failed.v2',
|
|
149
|
-
'openxiangda.workflow.task.approved.v2',
|
|
150
|
-
'openxiangda.workflow.task.completed.v2',
|
|
151
|
-
'openxiangda.workflow.task.rejected.v2',
|
|
152
|
-
'openxiangda.workflow.task.returned.v2',
|
|
153
|
-
'openxiangda.workflow.task.resubmitted.v2',
|
|
154
|
-
'openxiangda.workflow.task.transferred.v2',
|
|
155
|
-
'openxiangda.workflow.task.reassigned.v2',
|
|
156
|
-
'openxiangda.workflow.task.delegated.v2',
|
|
157
|
-
'openxiangda.workflow.task.assignee_added.v2',
|
|
158
|
-
'openxiangda.workflow.task.cancelled.v2',
|
|
159
|
-
'openxiangda.workflow.participant.activated.v2',
|
|
160
|
-
'openxiangda.workflow.participant.completed.v2',
|
|
161
|
-
'openxiangda.workflow.participant.rejected.v2',
|
|
162
|
-
'openxiangda.workflow.participant.returned.v2',
|
|
163
|
-
'openxiangda.workflow.participant.transferred.v2',
|
|
164
|
-
'openxiangda.workflow.participant.reassigned.v2',
|
|
165
|
-
'openxiangda.workflow.participant.delegated.v2',
|
|
166
|
-
'openxiangda.workflow.participant.added.v2',
|
|
167
|
-
'openxiangda.workflow.participant.suspended.v2',
|
|
168
|
-
'openxiangda.workflow.participant.resumed.v2',
|
|
169
|
-
'openxiangda.workflow.participant.cancelled.v2',
|
|
170
|
-
];
|
|
140
|
+
export { WORKFLOW_EVENT_TYPES_V2 } from './workflow-events.js';
|
|
141
|
+
import { WORKFLOW_EVENT_TYPES_V2, workflowProducedEventTypes } from './workflow-events.js';
|
|
171
142
|
const WORKFLOW_EVENT_TYPE_SET_V2 = new Set(WORKFLOW_EVENT_TYPES_V2);
|
|
172
143
|
export class NativeConfigurationCompilerError extends Error {
|
|
173
144
|
code;
|
|
@@ -400,6 +371,7 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
|
|
|
400
371
|
...(requiresHighDensityArtifactCapacity(config)
|
|
401
372
|
? [{ code: 'application.high-density-artifact-capacity',
|
|
402
373
|
declaration: NATIVE_HIGH_DENSITY_ARTIFACT_CAPACITY_V2 }] : []),
|
|
374
|
+
...(config.agents?.length ? [{ code: 'application.source-agents', declaration: config.agents }] : []),
|
|
403
375
|
...(requiresExtendedDeclarationCapacity(config)
|
|
404
376
|
? [{ code: 'application.extended-declaration-capacity', declaration: {
|
|
405
377
|
resources: config.data.resources.length, policies: config.authz.dataPolicies.length,
|
|
@@ -493,6 +465,11 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
|
|
|
493
465
|
...(resources.some(hasDataAuditReadPolicy)
|
|
494
466
|
? [{ code: 'data.audit-read-access', declaration: dataUsage }]
|
|
495
467
|
: []),
|
|
468
|
+
...(resources.some(resource => resource.schema.fields.some((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type))) || config.authz.scopeDimensions.some((dimension) => dimension.valueSource)
|
|
469
|
+
? [{ code: 'data.field-source-contexts', declaration: {
|
|
470
|
+
resources: resources.map(resource => ({ code: resource.code, fields: resource.schema.fields.filter((field) => /^(resource-ref|user|department)\.(single|multiple)$/.test(field.type)) })),
|
|
471
|
+
dimensions: config.authz.scopeDimensions.filter((dimension) => dimension.valueSource),
|
|
472
|
+
} }] : []),
|
|
496
473
|
...(requiresDirectoryV2
|
|
497
474
|
? [
|
|
498
475
|
{
|
|
@@ -664,6 +641,14 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
|
|
|
664
641
|
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined))
|
|
665
642
|
? [{ code: 'workflow.approval-empty-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'approval' && node.emptyPolicy !== undefined)) }]
|
|
666
643
|
: []),
|
|
644
|
+
...(config.workflows.bindings.some((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) ? [{ code: 'workflow.supervisor-chain', declaration: config.workflows.bindings.filter((item) => Object.values(item.binding.bindings).some((entry) => entry.provider === 'supervisor_chain')) }] : []),
|
|
645
|
+
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) ? [{ code: 'workflow.reminders', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.reminders)) }] : []),
|
|
646
|
+
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node)))
|
|
647
|
+
? [{ code: 'workflow.platform-notify', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => isWorkflowPlatformNotify(node))) }] : []),
|
|
648
|
+
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined))
|
|
649
|
+
? [{ code: 'workflow.return-policy', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.returnPolicy !== undefined)) }] : []),
|
|
650
|
+
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle'))
|
|
651
|
+
? [{ code: 'workflow.handling-nodes', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'handle')) }] : []),
|
|
667
652
|
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined))
|
|
668
653
|
? [{ code: 'workflow.completion-deadline', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.completionDeadline !== undefined)) }]
|
|
669
654
|
: []),
|
|
@@ -684,11 +669,11 @@ export function compileRequiredPlatformCapabilitiesV3(config) {
|
|
|
684
669
|
? [{ code: 'workflow.task-rich-fields', declaration: taskRichFieldDefinitions }] : []),
|
|
685
670
|
...(config.workflows.definitions.some((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable)))
|
|
686
671
|
? [{ code: 'workflow.task-owned-subtables', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.taskPages || {}).some((page) => page.fields.some((field) => field.subtable))) }] : []),
|
|
687
|
-
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action'))
|
|
688
|
-
? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.kind === 'action')) }]
|
|
672
|
+
...(config.workflows.definitions.some((item) => (item.definition.authoring?.businessSteps?.length || Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node))))
|
|
673
|
+
? [{ code: 'workflow.durable-business-step', declaration: config.workflows.definitions.filter((item) => (item.definition.authoring?.businessSteps?.length || Object.values(item.definition.nodes).some((node) => node.kind === 'action' && !isWorkflowPlatformNotify(node)))) }]
|
|
689
674
|
: []),
|
|
690
|
-
...(config.workflows.definitions.some((item) => Object.values(item.definition.nodes).some((node) => node.
|
|
691
|
-
? [{ code: 'workflow.step-data-transaction', declaration: config.workflows.definitions.filter((item) => Object.values(item.definition.nodes).some((node) => node.
|
|
675
|
+
...(config.workflows.definitions.some((item) => [...Object.values(item.definition.nodes), ...item.definition.authoring?.businessSteps || []].some((node) => node.handler?.dataTransaction))
|
|
676
|
+
? [{ code: 'workflow.step-data-transaction', declaration: config.workflows.definitions.filter((item) => [...Object.values(item.definition.nodes), ...item.definition.authoring?.businessSteps || []].some((node) => node.handler?.dataTransaction)) }]
|
|
692
677
|
: []),
|
|
693
678
|
...(config.workflows.bindings.some((item) => Object.values(item.binding.bindings).some((entry) => entry.routing !== undefined))
|
|
694
679
|
? [{ code: 'workflow.assignment-routing', declaration: config.workflows.bindings.filter((item) => Object.values(item.binding.bindings).some((entry) => entry.routing !== undefined)) }]
|
|
@@ -942,7 +927,8 @@ function validateConfigurationEnvelope(config, appCode) {
|
|
|
942
927
|
'workflows',
|
|
943
928
|
'frontend',
|
|
944
929
|
'runtime',
|
|
945
|
-
], '/config');
|
|
930
|
+
], '/config', ['agents']);
|
|
931
|
+
compileApplicationAgentsV2(appCode, config.agents, config.data?.resources || [], { authz: config.authz });
|
|
946
932
|
equal(config.schemaVersion, CONFIG_SCHEMA, '/config/schemaVersion');
|
|
947
933
|
equal(config.compilerContractVersion, COMPILER_CONTRACT_VERSION, '/config/compilerContractVersion');
|
|
948
934
|
equal(config.appCode, appCode, '/config/appCode');
|
|
@@ -1176,7 +1162,7 @@ function compileExpectedContract(config, configDigest, generatorVersion) {
|
|
|
1176
1162
|
field: trigger.field,
|
|
1177
1163
|
})),
|
|
1178
1164
|
...(config.workflows.activations.length
|
|
1179
|
-
?
|
|
1165
|
+
? workflowProducedEventTypes(config.workflows.definitions).map(eventType => ({
|
|
1180
1166
|
code: `workflow:${eventType}`,
|
|
1181
1167
|
source: 'workflow',
|
|
1182
1168
|
eventType,
|
|
@@ -3646,7 +3632,7 @@ function compileWorkflows(config) {
|
|
|
3646
3632
|
const nodes = object(item.definition.nodes, '/config/workflows/definitions/nodes');
|
|
3647
3633
|
for (const nodeValue of Object.values(nodes)) {
|
|
3648
3634
|
const node = object(nodeValue, '/config/workflows/definitions/nodes/*');
|
|
3649
|
-
if (node.kind !== 'approval')
|
|
3635
|
+
if (node.kind !== 'approval' && node.kind !== 'handle')
|
|
3650
3636
|
continue;
|
|
3651
3637
|
for (const operation of uniqueStrings(node.allowedOperations || [], '/config/workflows/definitions/nodes/*/allowedOperations', 20)) {
|
|
3652
3638
|
operations.add(operation);
|
|
@@ -4758,11 +4744,18 @@ function validateWorkflowReferences(config) {
|
|
|
4758
4744
|
'definitionVersion',
|
|
4759
4745
|
'bindingVersion',
|
|
4760
4746
|
'acceptedCommandDeactivationPolicy',
|
|
4761
|
-
], pointer, ['environmentKey']);
|
|
4747
|
+
], pointer, ['environmentKey', 'sourceBase']);
|
|
4762
4748
|
const code = stableCode(activation.workflowCode, `${pointer}/workflowCode`);
|
|
4763
4749
|
if (activationCodes.has(code))
|
|
4764
4750
|
fail('NATIVE_WORKFLOW_ACTIVATION_DUPLICATE', pointer);
|
|
4765
4751
|
activationCodes.add(code);
|
|
4752
|
+
if (activation.sourceBase !== undefined) {
|
|
4753
|
+
const base = object(activation.sourceBase, `${pointer}/sourceBase`);
|
|
4754
|
+
exactKeys(base, ['definitionDigest', 'bindingDigest'], `${pointer}/sourceBase`);
|
|
4755
|
+
for (const key of ['definitionDigest', 'bindingDigest'])
|
|
4756
|
+
if (!/^(sha256:)?[a-f0-9]{64}$/.test(String(base[key] || '')))
|
|
4757
|
+
fail('NATIVE_WORKFLOW_SOURCE_BASE_INVALID', `${pointer}/sourceBase/${key}`);
|
|
4758
|
+
}
|
|
4766
4759
|
const definitionKey = `${code}:${positiveInteger(activation.definitionVersion, `${pointer}/definitionVersion`)}`;
|
|
4767
4760
|
const bindingKey = `${code}:${positiveInteger(activation.bindingVersion, `${pointer}/bindingVersion`)}`;
|
|
4768
4761
|
if (!definitions.has(definitionKey)) {
|
|
@@ -4952,7 +4945,7 @@ function validateWorkflowDefinition(definition, pointer) {
|
|
|
4952
4945
|
'startAt',
|
|
4953
4946
|
'inputSchema',
|
|
4954
4947
|
'nodes',
|
|
4955
|
-
], pointer, ['organizationContext', 'instanceCommands', 'readability', 'taskPages', 'rejectionNotification', 'commandHandlers', 'launchPreflight', 'approvedDelegation']);
|
|
4948
|
+
], pointer, ['authoring', 'organizationContext', 'instanceCommands', 'readability', 'taskPages', 'rejectionNotification', 'commandHandlers', 'launchPreflight', 'approvedDelegation']);
|
|
4956
4949
|
equal(definition.schemaVersion, 'openxiangda.workflow-definition/v2', `${pointer}/schemaVersion`);
|
|
4957
4950
|
workflowCodeValue(definition.code, `${pointer}/code`);
|
|
4958
4951
|
requiredString(definition.title, `${pointer}/title`, 255);
|
|
@@ -4989,6 +4982,18 @@ function validateWorkflowDefinition(definition, pointer) {
|
|
|
4989
4982
|
const taskPageErrors = validateWorkflowTaskPages(definition);
|
|
4990
4983
|
if (taskPageErrors.length)
|
|
4991
4984
|
fail(taskPageErrors[0], `${pointer}/taskPages`);
|
|
4985
|
+
const returnErrors = validateWorkflowReturnPolicies(definition);
|
|
4986
|
+
if (returnErrors.length)
|
|
4987
|
+
fail(returnErrors[0], `${pointer}/nodes`);
|
|
4988
|
+
const reminderErrors = validateWorkflowReminders(definition);
|
|
4989
|
+
if (reminderErrors.length)
|
|
4990
|
+
fail(reminderErrors[0], `${pointer}/nodes`);
|
|
4991
|
+
const handleErrors = validateWorkflowHandlingNodes(definition);
|
|
4992
|
+
if (handleErrors.length)
|
|
4993
|
+
fail(handleErrors[0], `${pointer}/nodes`);
|
|
4994
|
+
const parallelErrors = validateWorkflowParallel(definition);
|
|
4995
|
+
if (parallelErrors.length)
|
|
4996
|
+
fail(parallelErrors[0], `${pointer}/nodes`);
|
|
4992
4997
|
const stepErrors = validateWorkflowBusinessSteps(definition);
|
|
4993
4998
|
if (stepErrors.length)
|
|
4994
4999
|
fail(stepErrors[0], `${pointer}/nodes`);
|
|
@@ -4999,17 +5004,20 @@ function validateWorkflowDefinition(definition, pointer) {
|
|
|
4999
5004
|
const nodePointer = `${pointer}/nodes/${nodeId}`;
|
|
5000
5005
|
const node = object(rawNode, nodePointer);
|
|
5001
5006
|
equal(node.id, nodeId, `${nodePointer}/id`);
|
|
5002
|
-
if (!['approval', 'condition', 'end', 'cc', 'action', 'correction'].includes(node.kind)) {
|
|
5007
|
+
if (!['approval', 'handle', 'condition', 'end', 'cc', 'action', 'correction', 'parallel', 'join'].includes(node.kind)) {
|
|
5003
5008
|
fail('NATIVE_WORKFLOW_NODE_KIND_INVALID', `${nodePointer}/kind`);
|
|
5004
5009
|
}
|
|
5005
5010
|
const targets = [];
|
|
5006
|
-
if (node.kind === 'approval') {
|
|
5011
|
+
if (node.kind === 'approval' || node.kind === 'handle') {
|
|
5007
5012
|
requiredString(node.title, `${nodePointer}/title`, 255);
|
|
5008
5013
|
workflowBindingCode(node.binding, `${nodePointer}/binding`);
|
|
5009
5014
|
if (!['single', 'any', 'all', 'sequence'].includes(node.mode)) {
|
|
5010
5015
|
fail('NATIVE_WORKFLOW_APPROVAL_MODE_INVALID', `${nodePointer}/mode`);
|
|
5011
5016
|
}
|
|
5012
|
-
|
|
5017
|
+
if (node.kind === 'handle')
|
|
5018
|
+
targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
|
|
5019
|
+
else
|
|
5020
|
+
targets.push(requiredString(node.onApprove, `${nodePointer}/onApprove`, 128), requiredString(node.onReject, `${nodePointer}/onReject`, 128));
|
|
5013
5021
|
for (const returnTarget of uniqueStrings(node.returnTargets || [], `${nodePointer}/returnTargets`, 200)) {
|
|
5014
5022
|
if (!nodes[returnTarget]) {
|
|
5015
5023
|
fail('NATIVE_WORKFLOW_TARGET_MISSING', `${nodePointer}/returnTargets`);
|
|
@@ -5034,6 +5042,20 @@ function validateWorkflowDefinition(definition, pointer) {
|
|
|
5034
5042
|
workflowBindingCode(node.binding, `${nodePointer}/binding`);
|
|
5035
5043
|
targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
|
|
5036
5044
|
}
|
|
5045
|
+
else if (node.kind === 'parallel') {
|
|
5046
|
+
requiredString(node.title, `${nodePointer}/title`, 255);
|
|
5047
|
+
targets.push(requiredString(node.join, `${nodePointer}/join`, 128));
|
|
5048
|
+
for (const [index, raw] of boundedArray(node.branches, `${nodePointer}/branches`, 8).entries()) {
|
|
5049
|
+
const branch = object(raw, `${nodePointer}/branches/${index}`);
|
|
5050
|
+
if (branch.when !== undefined)
|
|
5051
|
+
validateWorkflowExpression(branch.when, `${nodePointer}/branches/${index}/when`, 0);
|
|
5052
|
+
targets.push(requiredString(branch.target, `${nodePointer}/branches/${index}/target`, 128));
|
|
5053
|
+
}
|
|
5054
|
+
}
|
|
5055
|
+
else if (node.kind === 'join') {
|
|
5056
|
+
requiredString(node.title, `${nodePointer}/title`, 255);
|
|
5057
|
+
targets.push(requiredString(node.next, `${nodePointer}/next`, 128));
|
|
5058
|
+
}
|
|
5037
5059
|
else if (node.kind === 'condition') {
|
|
5038
5060
|
const branches = boundedArray(node.branches, `${nodePointer}/branches`, 100);
|
|
5039
5061
|
if (branches.length === 0) {
|
|
@@ -5072,8 +5094,8 @@ function validateWorkflowDefinition(definition, pointer) {
|
|
|
5072
5094
|
walk(startAt);
|
|
5073
5095
|
for (const id of [...reachable]) {
|
|
5074
5096
|
const current = nodes[id];
|
|
5075
|
-
if (current?.kind === 'approval')
|
|
5076
|
-
for (const target of current
|
|
5097
|
+
if (current?.kind === 'approval' || current?.kind === 'handle')
|
|
5098
|
+
for (const target of workflowReturnTargets(current))
|
|
5077
5099
|
if (nodes[target]?.kind === 'correction')
|
|
5078
5100
|
reachable.add(target);
|
|
5079
5101
|
}
|
|
@@ -5123,6 +5145,9 @@ function validateWorkflowBinding(binding, pointer) {
|
|
|
5123
5145
|
for (const [code, raw] of Object.entries(entries)) {
|
|
5124
5146
|
workflowBindingCode(code, `${pointer}/bindings/${code}`);
|
|
5125
5147
|
const entry = object(raw, `${pointer}/bindings/${code}`);
|
|
5148
|
+
const chainErrors = validateWorkflowSupervisorChainBinding(entry);
|
|
5149
|
+
if (chainErrors.length)
|
|
5150
|
+
fail(chainErrors[0], `${pointer}/bindings/${code}`);
|
|
5126
5151
|
const selectionErrors = validateWorkflowRoleInputSelection(entry);
|
|
5127
5152
|
if (selectionErrors.length)
|
|
5128
5153
|
fail(selectionErrors[0], `${pointer}/bindings/${code}/selectedInputPath`);
|
|
@@ -5136,6 +5161,7 @@ function validateWorkflowBinding(binding, pointer) {
|
|
|
5136
5161
|
'input_users',
|
|
5137
5162
|
'form_field_users',
|
|
5138
5163
|
'department_supervisor',
|
|
5164
|
+
'supervisor_chain',
|
|
5139
5165
|
'app_role',
|
|
5140
5166
|
'app_role_in_scope',
|
|
5141
5167
|
'business_relation',
|
|
@@ -5170,6 +5196,9 @@ function validateWorkflowBinding(binding, pointer) {
|
|
|
5170
5196
|
}
|
|
5171
5197
|
}
|
|
5172
5198
|
function validateWorkflowDefinitionBinding(definition, binding, pointer) {
|
|
5199
|
+
const chainErrors = validateWorkflowSupervisorChains(definition, binding);
|
|
5200
|
+
if (chainErrors.length)
|
|
5201
|
+
fail(chainErrors[0], pointer);
|
|
5173
5202
|
equal(binding.workflowCode, definition.code, `${pointer}/workflowCode`);
|
|
5174
5203
|
const entries = object(binding.bindings, `${pointer}/bindings`);
|
|
5175
5204
|
for (const [code, entry] of Object.entries(entries)) {
|
|
@@ -5187,7 +5216,7 @@ function validateWorkflowDefinitionBinding(definition, binding, pointer) {
|
|
|
5187
5216
|
fail(stepErrors[0], pointer);
|
|
5188
5217
|
for (const [nodeId, rawNode] of Object.entries(object(definition.nodes, `${pointer}/nodes`))) {
|
|
5189
5218
|
const node = object(rawNode, `${pointer}/nodes/${nodeId}`);
|
|
5190
|
-
if (['approval', 'cc'].includes(node.kind) && !entries[node.binding]) {
|
|
5219
|
+
if (['approval', 'handle', 'cc'].includes(node.kind) && !entries[node.binding]) {
|
|
5191
5220
|
fail('NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING', `${pointer}/nodes/${nodeId}/binding`);
|
|
5192
5221
|
}
|
|
5193
5222
|
}
|