openxiangda-contracts 2.33.0 → 2.35.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.
Files changed (36) hide show
  1. package/dist/browser.d.ts +2 -0
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +2 -0
  4. package/dist/browser.js.map +1 -1
  5. package/dist/concurrency.d.ts +109 -2
  6. package/dist/concurrency.d.ts.map +1 -1
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/native-compiler/compiler.d.ts.map +1 -1
  12. package/dist/native-compiler/compiler.js +18 -1
  13. package/dist/native-compiler/compiler.js.map +1 -1
  14. package/dist/native-compiler/index.cjs +6 -6
  15. package/dist/native-compiler/index.d.ts +2 -0
  16. package/dist/native-compiler/index.d.ts.map +1 -1
  17. package/dist/native-compiler/index.js +6 -6
  18. package/dist/native-compiler/managed-concurrency.d.ts.map +1 -1
  19. package/dist/native-compiler/managed-concurrency.js +72 -5
  20. package/dist/native-compiler/managed-concurrency.js.map +1 -1
  21. package/dist/native-compiler/workflow-graph.d.ts +156 -0
  22. package/dist/native-compiler/workflow-graph.d.ts.map +1 -0
  23. package/dist/native-compiler/workflow-graph.js +183 -0
  24. package/dist/native-compiler/workflow-graph.js.map +1 -0
  25. package/dist/native-compiler/workflow-node-administration.d.ts +46 -0
  26. package/dist/native-compiler/workflow-node-administration.d.ts.map +1 -0
  27. package/dist/native-compiler/workflow-node-administration.js +96 -0
  28. package/dist/native-compiler/workflow-node-administration.js.map +1 -0
  29. package/dist/native-version.d.ts +2 -0
  30. package/dist/native-version.d.ts.map +1 -1
  31. package/dist/native-version.js +2 -0
  32. package/dist/native-version.js.map +1 -1
  33. package/dist/types.d.ts +44 -0
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/types.js.map +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ export const WORKFLOW_CONFIGURABLE_OPERATIONS = ['approve', 'reject', 'return', 'transfer', 'delegate', 'add_assignee'];
2
+ export const WORKFLOW_CONFIGURABLE_PROVIDERS = ['fixed_users', 'app_role', 'app_role_in_scope'];
3
+ const modes = ['single', 'any', 'all', 'sequence'];
4
+ const record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
5
+ const keys = (value, allowed) => Object.keys(value).every(key => allowed.includes(key));
6
+ const boundedList = (value, allowed, limit) => Array.isArray(value) && value.length > 0 && value.length <= limit && new Set(value).size === value.length && value.every(item => typeof item === 'string' && allowed.includes(item));
7
+ export function workflowNodeAllowedOperations(node) {
8
+ return node.allowedOperations || [...WORKFLOW_CONFIGURABLE_OPERATIONS];
9
+ }
10
+ function policyValid(value, operation, defaults = {}, configurable = false) {
11
+ if (!record(value) || !Object.keys(value).length || !keys(value, configurable ? ['enabled', 'label', 'commentRequired'] : ['label', 'commentRequired']))
12
+ return false;
13
+ if (value.label !== undefined && (typeof value.label !== 'string' || !value.label.trim() || value.label.length > 40 || /[\u0000-\u001f\u007f]/.test(value.label)))
14
+ return false;
15
+ if (value.enabled !== undefined && (typeof value.enabled !== 'boolean' || (['approve', 'reject'].includes(operation) && !value.enabled)))
16
+ return false;
17
+ if (value.commentRequired !== undefined && (typeof value.commentRequired !== 'boolean' || !['approve', 'reject'].includes(operation) || ((operation === 'reject' || defaults.commentRequired) && !value.commentRequired)))
18
+ return false;
19
+ return true;
20
+ }
21
+ /** Pure shared rule used before compilation, activation and configuration writes. */
22
+ export function validateWorkflowAdministration(definition, bindings) {
23
+ const errors = [];
24
+ for (const [id, node] of Object.entries(definition?.nodes || {})) {
25
+ if (!record(node))
26
+ continue;
27
+ const admin = node.administration;
28
+ const policy = node.operationPolicy;
29
+ if (node.kind !== 'approval') {
30
+ if (admin !== undefined || policy !== undefined)
31
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_APPROVAL_REQUIRED:${id}`);
32
+ continue;
33
+ }
34
+ if (policy !== undefined && (!record(policy) || Object.keys(policy).length > 8 || Object.entries(policy).some(([operation, value]) => !WORKFLOW_CONFIGURABLE_OPERATIONS.includes(operation) || !workflowNodeAllowedOperations(node).includes(operation) || !policyValid(value, operation))))
35
+ errors.push(`WORKFLOW_NODE_OPERATION_POLICY_INVALID:${id}`);
36
+ if (admin === undefined)
37
+ continue;
38
+ if (!record(admin) || !keys(admin, ['modes', 'assigneeProviders', 'operations'])) {
39
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_INVALID:${id}`);
40
+ continue;
41
+ }
42
+ if (admin.modes !== undefined && (!boundedList(admin.modes, modes, 4) || !admin.modes.includes(node.mode)))
43
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_MODES_INVALID:${id}`);
44
+ if (admin.assigneeProviders !== undefined && !boundedList(admin.assigneeProviders, WORKFLOW_CONFIGURABLE_PROVIDERS, 3))
45
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_PROVIDERS_INVALID:${id}`);
46
+ const binding = bindings?.bindings[node.binding || ''];
47
+ if (binding && Array.isArray(admin.assigneeProviders) && admin.assigneeProviders.includes('app_role_in_scope') && !binding.scope)
48
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_SCOPE_REQUIRED:${id}`);
49
+ if (admin.operations !== undefined && (!boundedList(admin.operations, WORKFLOW_CONFIGURABLE_OPERATIONS, 8) || admin.operations.some(operation => !workflowNodeAllowedOperations(node).includes(operation))))
50
+ errors.push(`WORKFLOW_NODE_ADMINISTRATION_OPERATIONS_INVALID:${id}`);
51
+ }
52
+ return errors;
53
+ }
54
+ export function validateWorkflowNodeConfigurationPatch(node, binding, input) {
55
+ const errors = [];
56
+ if (!node || !record(input) || !Object.keys(input).length || !keys(input, ['title', 'description', 'assignee', 'mode', 'operations']))
57
+ return ['WORKFLOW_V2_NODE_CONFIGURATION_PATCH_INVALID'];
58
+ const patch = input;
59
+ for (const key of ['title', 'description'])
60
+ if (patch[key] !== undefined && (typeof patch[key] !== 'string' || patch[key].length > (key === 'title' ? 255 : 1000) || (key === 'title' && !patch[key].trim())))
61
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_PATCH_INVALID');
62
+ const admin = node.administration;
63
+ if (patch.mode !== undefined && (node.kind !== 'approval' || !admin?.modes?.includes(patch.mode)))
64
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_MODE_READONLY');
65
+ if (patch.operations !== undefined && (node.kind !== 'approval' || !record(patch.operations) || !Object.keys(patch.operations).length || Object.keys(patch.operations).length > 8 || Object.entries(patch.operations).some(([operation, value]) => !admin?.operations?.includes(operation) || !workflowNodeAllowedOperations(node).includes(operation) || !policyValid(value, operation, node.operationPolicy?.[operation], true))))
66
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_OPERATION_INVALID');
67
+ if (patch.assignee !== undefined) {
68
+ const value = patch.assignee;
69
+ const allowed = admin?.assigneeProviders || (binding && WORKFLOW_CONFIGURABLE_PROVIDERS.includes(binding.provider) ? [binding.provider] : []);
70
+ if (!record(value) || node.kind !== 'approval' || !allowed.includes(value.provider) || (value.provider === 'app_role_in_scope' && !binding?.scope))
71
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_PROVIDER_READONLY');
72
+ else if (value.provider === 'fixed_users') {
73
+ if (!keys(value, ['provider', 'users']) || !Array.isArray(value.users) || value.users.length < 1 || value.users.length > 200 || new Set(value.users).size !== value.users.length || value.users.some(id => typeof id !== 'string' || !id.trim() || id.length > 255))
74
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_USERS_INVALID');
75
+ }
76
+ else if (!keys(value, ['provider', 'roleCode']) || typeof value.roleCode !== 'string' || !/^[a-z][a-z0-9_-]{0,127}$/.test(value.roleCode))
77
+ errors.push('WORKFLOW_V2_NODE_CONFIGURATION_ROLE_INVALID');
78
+ }
79
+ return errors;
80
+ }
81
+ /** Applies only validated fields; never mutates the immutable definition. */
82
+ export function projectWorkflowNodePolicy(node, patch) {
83
+ const operations = Object.fromEntries(workflowNodeAllowedOperations(node).flatMap(operation => {
84
+ const code = operation;
85
+ const configured = patch?.operations?.[code];
86
+ const policy = { ...node.operationPolicy?.[code], ...(configured?.label !== undefined ? { label: configured.label } : {}), ...(configured?.commentRequired !== undefined ? { commentRequired: configured.commentRequired } : {}) };
87
+ return Object.keys(policy).length ? [[code, policy]] : [];
88
+ }));
89
+ return {
90
+ mode: patch?.mode || node.mode,
91
+ allowedOperations: workflowNodeAllowedOperations(node).filter(operation => patch?.operations?.[operation]?.enabled !== false),
92
+ operationPolicy: operations,
93
+ fieldPolicy: { default: node.fieldPolicy?.default || 'readonly', fields: { ...node.fieldPolicy?.fields } },
94
+ };
95
+ }
96
+ //# sourceMappingURL=workflow-node-administration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-node-administration.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-node-administration.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare const PLATFORM_CAPABILITY_CONTRACT_VERSIONS: {
16
16
  readonly "data.decimal-reservation-lifecycle": "1.0.0";
17
17
  readonly "data.unique-keys": "1.0.0";
18
18
  readonly "data.managed-concurrency": "1.0.0";
19
+ readonly "data.managed-concurrency.durable": "1.0.0";
19
20
  readonly "workflow.named-input-sources": "1.0.0";
20
21
  readonly "directory-v2": "1.0.0";
21
22
  readonly "directory.selected-user": "1.0.0";
@@ -25,6 +26,7 @@ export declare const PLATFORM_CAPABILITY_CONTRACT_VERSIONS: {
25
26
  readonly "events.native-data-actions": "1.0.0";
26
27
  readonly "workflow-kernel-v2": "1.0.0";
27
28
  readonly "workflow.instance-cancellation-policy": "1.0.0";
29
+ readonly "workflow.node-administration": "1.0.0";
28
30
  readonly "business-process.durable-command": "1.1.0";
29
31
  readonly "workflow.fresh-command-token": "1.0.0";
30
32
  readonly "notification-hub-v2": "1.0.0";
@@ -1 +1 @@
1
- {"version":3,"file":"native-version.d.ts","sourceRoot":"","sources":["../src/native-version.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,eAAO,MAAM,qCAAqC,EAAG,UAAmB,CAAC;AAEzE,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BxC,CAAC"}
1
+ {"version":3,"file":"native-version.d.ts","sourceRoot":"","sources":["../src/native-version.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,eAAO,MAAM,qCAAqC,EAAG,UAAmB,CAAC;AAEzE,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,CAAC"}
@@ -16,6 +16,7 @@ export const PLATFORM_CAPABILITY_CONTRACT_VERSIONS = {
16
16
  "data.decimal-reservation-lifecycle": "1.0.0",
17
17
  "data.unique-keys": "1.0.0",
18
18
  "data.managed-concurrency": "1.0.0",
19
+ "data.managed-concurrency.durable": "1.0.0",
19
20
  "workflow.named-input-sources": "1.0.0",
20
21
  "directory-v2": "1.0.0",
21
22
  "directory.selected-user": "1.0.0",
@@ -25,6 +26,7 @@ export const PLATFORM_CAPABILITY_CONTRACT_VERSIONS = {
25
26
  "events.native-data-actions": "1.0.0",
26
27
  "workflow-kernel-v2": "1.0.0",
27
28
  "workflow.instance-cancellation-policy": "1.0.0",
29
+ "workflow.node-administration": "1.0.0",
28
30
  "business-process.durable-command": "1.1.0",
29
31
  "workflow.fresh-command-token": "1.0.0",
30
32
  "notification-hub-v2": "1.0.0",
@@ -1 +1 @@
1
- {"version":3,"file":"native-version.js","sourceRoot":"","sources":["../src/native-version.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,CAAC,MAAM,qCAAqC,GAAG,UAAmB,CAAC;AAEzE,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,sBAAsB,EAAE,OAAO;IAC/B,4BAA4B,EAAE,OAAO;IACrC,yBAAyB,EAAE,OAAO;IAClC,yBAAyB,EAAE,OAAO;IAClC,8BAA8B,EAAE,OAAO;IACvC,kCAAkC,EAAE,OAAO;IAC3C,+BAA+B,EAAE,OAAO;IACxC,aAAa,EAAE,OAAO;IACtB,yBAAyB,EAAE,OAAO;IAClC,wBAAwB,EAAE,OAAO;IACjC,oBAAoB,EAAE,OAAO;IAC7B,2BAA2B,EAAE,OAAO;IACpC,oCAAoC,EAAE,OAAO;IAC7C,kBAAkB,EAAE,OAAO;IAC3B,0BAA0B,EAAE,OAAO;IACnC,8BAA8B,EAAE,OAAO;IACvC,cAAc,EAAE,OAAO;IACvB,yBAAyB,EAAE,OAAO;IAClC,WAAW,EAAE,OAAO;IACpB,yBAAyB,EAAE,OAAO;IAClC,uBAAuB,EAAE,OAAO;IAChC,4BAA4B,EAAE,OAAO;IACrC,oBAAoB,EAAE,OAAO;IAC7B,uCAAuC,EAAE,OAAO;IAChD,kCAAkC,EAAE,OAAO;IAC3C,8BAA8B,EAAE,OAAO;IACvC,qBAAqB,EAAE,OAAO;IAC9B,0CAA0C,EAAE,OAAO;IACnD,uCAAuC,EAAE,OAAO;CACxC,CAAC"}
1
+ {"version":3,"file":"native-version.js","sourceRoot":"","sources":["../src/native-version.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,CAAC,MAAM,qCAAqC,GAAG,UAAmB,CAAC;AAEzE,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,sBAAsB,EAAE,OAAO;IAC/B,4BAA4B,EAAE,OAAO;IACrC,yBAAyB,EAAE,OAAO;IAClC,yBAAyB,EAAE,OAAO;IAClC,8BAA8B,EAAE,OAAO;IACvC,kCAAkC,EAAE,OAAO;IAC3C,+BAA+B,EAAE,OAAO;IACxC,aAAa,EAAE,OAAO;IACtB,yBAAyB,EAAE,OAAO;IAClC,wBAAwB,EAAE,OAAO;IACjC,oBAAoB,EAAE,OAAO;IAC7B,2BAA2B,EAAE,OAAO;IACpC,oCAAoC,EAAE,OAAO;IAC7C,kBAAkB,EAAE,OAAO;IAC3B,0BAA0B,EAAE,OAAO;IACnC,kCAAkC,EAAE,OAAO;IAC3C,8BAA8B,EAAE,OAAO;IACvC,cAAc,EAAE,OAAO;IACvB,yBAAyB,EAAE,OAAO;IAClC,WAAW,EAAE,OAAO;IACpB,yBAAyB,EAAE,OAAO;IAClC,uBAAuB,EAAE,OAAO;IAChC,4BAA4B,EAAE,OAAO;IACrC,oBAAoB,EAAE,OAAO;IAC7B,uCAAuC,EAAE,OAAO;IAChD,8BAA8B,EAAE,OAAO;IACvC,kCAAkC,EAAE,OAAO;IAC3C,8BAA8B,EAAE,OAAO;IACvC,qBAAqB,EAAE,OAAO;IAC9B,0CAA0C,EAAE,OAAO;IACnD,uCAAuC,EAAE,OAAO;CACxC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1812,11 +1812,27 @@ export interface WorkflowApprovalNode {
1812
1812
  onReject: string;
1813
1813
  allowedOperations?: WorkflowCommand[];
1814
1814
  returnTargets?: string[];
1815
+ /** Code-owned defaults; labels never change the stable command semantics. */
1816
+ operationPolicy?: Partial<Record<WorkflowConfigurableOperation, WorkflowNodeOperationPolicy>>;
1817
+ /** Explicit upper bound for administrator changes. Topology remains immutable. */
1818
+ administration?: WorkflowApprovalAdministration;
1815
1819
  fieldPolicy?: {
1816
1820
  default?: WorkflowFieldPolicy;
1817
1821
  fields?: Record<string, WorkflowFieldPolicy>;
1818
1822
  };
1819
1823
  }
1824
+ export type WorkflowConfigurableOperation = 'approve' | 'reject' | 'return' | 'transfer' | 'delegate' | 'add_assignee';
1825
+ export type WorkflowConfigurableAssigneeProvider = 'fixed_users' | 'app_role' | 'app_role_in_scope';
1826
+ export interface WorkflowNodeOperationPolicy {
1827
+ label?: string;
1828
+ /** Only approve/reject have comments; existing required reasons stay required. */
1829
+ commentRequired?: boolean;
1830
+ }
1831
+ export interface WorkflowApprovalAdministration {
1832
+ modes?: WorkflowApprovalMode[];
1833
+ assigneeProviders?: WorkflowConfigurableAssigneeProvider[];
1834
+ operations?: WorkflowConfigurableOperation[];
1835
+ }
1820
1836
  export interface WorkflowConditionNode {
1821
1837
  id: string;
1822
1838
  kind: "condition";
@@ -1858,6 +1874,8 @@ export interface WorkflowDefinition {
1858
1874
  };
1859
1875
  };
1860
1876
  nodes: Record<string, WorkflowNode>;
1877
+ /** Read-only explanations versioned with the executing definition. */
1878
+ readability?: import('./native-compiler/workflow-graph.js').WorkflowReadability;
1861
1879
  }
1862
1880
  export interface WorkflowInstanceCommandPolicies {
1863
1881
  withdraw?: {
@@ -1908,6 +1926,10 @@ export interface WorkflowBinding {
1908
1926
  export interface WorkflowNodeConfigurationPatch {
1909
1927
  title?: string;
1910
1928
  description?: string;
1929
+ mode?: WorkflowApprovalMode;
1930
+ operations?: Partial<Record<WorkflowConfigurableOperation, WorkflowNodeOperationPolicy & {
1931
+ enabled?: boolean;
1932
+ }>>;
1911
1933
  assignee?: {
1912
1934
  provider: "fixed_users";
1913
1935
  users: string[];
@@ -1934,7 +1956,12 @@ export interface WorkflowNodeConfigurations {
1934
1956
  defaults: {
1935
1957
  title: string;
1936
1958
  binding?: WorkflowBindingEntry;
1959
+ mode?: WorkflowApprovalMode;
1960
+ allowedOperations?: WorkflowCommand[];
1961
+ operationPolicy?: Partial<Record<WorkflowConfigurableOperation, WorkflowNodeOperationPolicy>>;
1962
+ fieldPolicy?: WorkflowApprovalNode['fieldPolicy'];
1937
1963
  };
1964
+ administration?: WorkflowApprovalAdministration;
1938
1965
  configuration: WorkflowNodeConfigurationState;
1939
1966
  effective: {
1940
1967
  revision: number;
@@ -1942,6 +1969,10 @@ export interface WorkflowNodeConfigurations {
1942
1969
  description?: string;
1943
1970
  binding?: WorkflowBindingEntry;
1944
1971
  bindingDigest?: string;
1972
+ mode?: WorkflowApprovalMode;
1973
+ allowedOperations?: WorkflowCommand[];
1974
+ operationPolicy?: Partial<Record<WorkflowConfigurableOperation, WorkflowNodeOperationPolicy>>;
1975
+ fieldPolicy?: WorkflowApprovalNode['fieldPolicy'];
1945
1976
  };
1946
1977
  }>;
1947
1978
  principals: {
@@ -1969,6 +2000,19 @@ export interface WorkflowNodeConfigurations {
1969
2000
  createdAt: IsoDateTime;
1970
2001
  }>;
1971
2002
  }
2003
+ export interface WorkflowNodeConfigurationMutation {
2004
+ expectedHeadRevision: number;
2005
+ expectedRevision: number;
2006
+ operationId: string;
2007
+ reason: string;
2008
+ patch: WorkflowNodeConfigurationPatch | null;
2009
+ }
2010
+ export interface WorkflowNodeConfigurationReceipt extends WorkflowNodeConfigurationState {
2011
+ workflowCode: string;
2012
+ nodeId: string;
2013
+ effect: 'future_node_entries_keep_existing_tasks';
2014
+ replayed: boolean;
2015
+ }
1972
2016
  export type ApplicationAdministrationPage = "overview" | "data" | "workflows" | "instances" | "automation" | "roles" | "versions" | "runtime" | "audit";
1973
2017
  export interface ApplicationAdministrationContext {
1974
2018
  schemaVersion: "openxiangda.application-admin-context/v2";