openxiangda-contracts 2.47.0 → 2.69.1
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 +1 -1
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +4 -3
- package/dist/ai.js.map +1 -1
- package/dist/browser.d.ts +13 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +13 -0
- package/dist/browser.js.map +1 -1
- package/dist/concurrency.d.ts +3 -3
- package/dist/concurrency.d.ts.map +1 -1
- package/dist/data-field-validation.d.ts.map +1 -1
- package/dist/data-field-validation.js +17 -2
- package/dist/data-field-validation.js.map +1 -1
- package/dist/field-value-schemas.d.ts +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/native-compiler/actor-authority.d.ts +11 -0
- package/dist/native-compiler/actor-authority.d.ts.map +1 -0
- package/dist/native-compiler/actor-authority.js +56 -0
- package/dist/native-compiler/actor-authority.js.map +1 -0
- package/dist/native-compiler/artifact-capacity.d.ts +12 -0
- package/dist/native-compiler/artifact-capacity.d.ts.map +1 -0
- package/dist/native-compiler/artifact-capacity.js +34 -0
- package/dist/native-compiler/artifact-capacity.js.map +1 -0
- package/dist/native-compiler/authenticated-public-read.d.ts +18 -0
- package/dist/native-compiler/authenticated-public-read.d.ts.map +1 -0
- package/dist/native-compiler/authenticated-public-read.js +79 -0
- package/dist/native-compiler/authenticated-public-read.js.map +1 -0
- package/dist/native-compiler/compiler.d.ts +3 -22
- package/dist/native-compiler/compiler.d.ts.map +1 -1
- package/dist/native-compiler/compiler.js +441 -59
- package/dist/native-compiler/compiler.js.map +1 -1
- package/dist/native-compiler/data-business-command.d.ts +44 -0
- package/dist/native-compiler/data-business-command.d.ts.map +1 -0
- package/dist/native-compiler/data-business-command.js +88 -0
- package/dist/native-compiler/data-business-command.js.map +1 -0
- package/dist/native-compiler/data-capacity.d.ts +14 -3
- package/dist/native-compiler/data-capacity.d.ts.map +1 -1
- package/dist/native-compiler/data-capacity.js +11 -3
- package/dist/native-compiler/data-capacity.js.map +1 -1
- package/dist/native-compiler/data-field.d.ts +24 -0
- package/dist/native-compiler/data-field.d.ts.map +1 -1
- package/dist/native-compiler/data-field.js +23 -2
- package/dist/native-compiler/data-field.js.map +1 -1
- package/dist/native-compiler/data-surface.d.ts +1 -1
- package/dist/native-compiler/data-surface.d.ts.map +1 -1
- package/dist/native-compiler/data-surface.js +2 -0
- package/dist/native-compiler/data-surface.js.map +1 -1
- package/dist/native-compiler/date-event-projection.d.ts +13 -0
- package/dist/native-compiler/date-event-projection.d.ts.map +1 -0
- package/dist/native-compiler/date-event-projection.js +71 -0
- package/dist/native-compiler/date-event-projection.js.map +1 -0
- package/dist/native-compiler/declaration-capacity.d.ts +60 -0
- package/dist/native-compiler/declaration-capacity.d.ts.map +1 -0
- package/dist/native-compiler/declaration-capacity.js +32 -0
- package/dist/native-compiler/declaration-capacity.js.map +1 -0
- package/dist/native-compiler/development-backend.d.ts +84 -0
- package/dist/native-compiler/development-backend.d.ts.map +1 -0
- package/dist/native-compiler/development-backend.js +77 -0
- package/dist/native-compiler/development-backend.js.map +1 -0
- package/dist/native-compiler/development-configuration.d.ts +65 -0
- package/dist/native-compiler/development-configuration.d.ts.map +1 -0
- package/dist/native-compiler/development-configuration.js +143 -0
- package/dist/native-compiler/development-configuration.js.map +1 -0
- package/dist/native-compiler/index.cjs +6 -6
- package/dist/native-compiler/index.d.ts +22 -0
- package/dist/native-compiler/index.d.ts.map +1 -1
- package/dist/native-compiler/index.js +6 -6
- package/dist/native-compiler/managed-concurrency.js +2 -2
- package/dist/native-compiler/managed-concurrency.js.map +1 -1
- package/dist/native-compiler/record-set-guard.d.ts +5 -0
- package/dist/native-compiler/record-set-guard.d.ts.map +1 -0
- package/dist/native-compiler/record-set-guard.js +27 -0
- package/dist/native-compiler/record-set-guard.js.map +1 -0
- package/dist/native-compiler/resource-view.d.ts +4 -0
- package/dist/native-compiler/resource-view.d.ts.map +1 -0
- package/dist/native-compiler/resource-view.js +20 -0
- package/dist/native-compiler/resource-view.js.map +1 -0
- package/dist/native-compiler/unique-keys.d.ts +21 -0
- package/dist/native-compiler/unique-keys.d.ts.map +1 -1
- package/dist/native-compiler/unique-keys.js +17 -3
- package/dist/native-compiler/unique-keys.js.map +1 -1
- package/dist/native-compiler/user-candidates.d.ts +80 -0
- package/dist/native-compiler/user-candidates.d.ts.map +1 -0
- package/dist/native-compiler/user-candidates.js +197 -0
- package/dist/native-compiler/user-candidates.js.map +1 -0
- package/dist/native-compiler/workflow-approval-empty.d.ts +28 -0
- package/dist/native-compiler/workflow-approval-empty.d.ts.map +1 -0
- package/dist/native-compiler/workflow-approval-empty.js +34 -0
- package/dist/native-compiler/workflow-approval-empty.js.map +1 -0
- package/dist/native-compiler/workflow-approved-delegation.d.ts +39 -0
- package/dist/native-compiler/workflow-approved-delegation.d.ts.map +1 -0
- package/dist/native-compiler/workflow-approved-delegation.js +94 -0
- package/dist/native-compiler/workflow-approved-delegation.js.map +1 -0
- package/dist/native-compiler/workflow-business-command.d.ts +108 -0
- package/dist/native-compiler/workflow-business-command.d.ts.map +1 -0
- package/dist/native-compiler/workflow-business-command.js +62 -0
- package/dist/native-compiler/workflow-business-command.js.map +1 -0
- package/dist/native-compiler/workflow-completion-deadline.d.ts +41 -0
- package/dist/native-compiler/workflow-completion-deadline.d.ts.map +1 -0
- package/dist/native-compiler/workflow-completion-deadline.js +40 -0
- package/dist/native-compiler/workflow-completion-deadline.js.map +1 -0
- package/dist/native-compiler/workflow-correction.d.ts +16 -0
- package/dist/native-compiler/workflow-correction.d.ts.map +1 -0
- package/dist/native-compiler/workflow-correction.js +42 -0
- package/dist/native-compiler/workflow-correction.js.map +1 -0
- package/dist/native-compiler/workflow-delegation-administration.d.ts +73 -0
- package/dist/native-compiler/workflow-delegation-administration.d.ts.map +1 -1
- package/dist/native-compiler/workflow-delegation-administration.js +6 -4
- package/dist/native-compiler/workflow-delegation-administration.js.map +1 -1
- package/dist/native-compiler/workflow-graph.d.ts +21 -2
- package/dist/native-compiler/workflow-graph.d.ts.map +1 -1
- package/dist/native-compiler/workflow-graph.js +20 -3
- package/dist/native-compiler/workflow-graph.js.map +1 -1
- package/dist/native-compiler/workflow-initiator-approval.d.ts +32 -0
- package/dist/native-compiler/workflow-initiator-approval.d.ts.map +1 -0
- package/dist/native-compiler/workflow-initiator-approval.js +45 -0
- package/dist/native-compiler/workflow-initiator-approval.js.map +1 -0
- package/dist/native-compiler/workflow-instance-policy.d.ts +2 -0
- package/dist/native-compiler/workflow-instance-policy.d.ts.map +1 -1
- package/dist/native-compiler/workflow-instance-policy.js +9 -4
- package/dist/native-compiler/workflow-instance-policy.js.map +1 -1
- package/dist/native-compiler/workflow-launch-preflight.d.ts +22 -0
- package/dist/native-compiler/workflow-launch-preflight.d.ts.map +1 -0
- package/dist/native-compiler/workflow-launch-preflight.js +30 -0
- package/dist/native-compiler/workflow-launch-preflight.js.map +1 -0
- package/dist/native-compiler/workflow-native-stage.d.ts +69 -0
- package/dist/native-compiler/workflow-native-stage.d.ts.map +1 -0
- package/dist/native-compiler/workflow-native-stage.js +42 -0
- package/dist/native-compiler/workflow-native-stage.js.map +1 -0
- package/dist/native-compiler/workflow-node-administration.d.ts +11 -1
- package/dist/native-compiler/workflow-node-administration.d.ts.map +1 -1
- package/dist/native-compiler/workflow-node-administration.js +25 -5
- package/dist/native-compiler/workflow-node-administration.js.map +1 -1
- package/dist/native-compiler/workflow-owned-subject.d.ts +60 -0
- package/dist/native-compiler/workflow-owned-subject.d.ts.map +1 -0
- package/dist/native-compiler/workflow-owned-subject.js +69 -0
- package/dist/native-compiler/workflow-owned-subject.js.map +1 -0
- package/dist/native-compiler/workflow-rejection-notification.d.ts +31 -0
- package/dist/native-compiler/workflow-rejection-notification.d.ts.map +1 -0
- package/dist/native-compiler/workflow-rejection-notification.js +47 -0
- package/dist/native-compiler/workflow-rejection-notification.js.map +1 -0
- package/dist/native-compiler/workflow-role-union.d.ts +31 -0
- package/dist/native-compiler/workflow-role-union.d.ts.map +1 -0
- package/dist/native-compiler/workflow-role-union.js +38 -0
- package/dist/native-compiler/workflow-role-union.js.map +1 -0
- package/dist/native-compiler/workflow-task-page.d.ts +10 -3
- package/dist/native-compiler/workflow-task-page.d.ts.map +1 -1
- package/dist/native-compiler/workflow-task-page.js +5 -3
- package/dist/native-compiler/workflow-task-page.js.map +1 -1
- package/dist/native-version.d.ts +36 -1
- package/dist/native-version.d.ts.map +1 -1
- package/dist/native-version.js +36 -1
- package/dist/native-version.js.map +1 -1
- package/dist/native.d.ts +24 -2
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/references.d.ts +2 -0
- package/dist/references.d.ts.map +1 -1
- package/dist/schemas.d.ts +10118 -5656
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +379 -17
- package/dist/schemas.js.map +1 -1
- package/dist/surface.d.ts +4 -2
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +1 -19
- package/dist/surface.js.map +1 -1
- package/dist/types.d.ts +371 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -2
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +61 -2
- package/dist/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-candidates.js","sourceRoot":"","sources":["../../src/native-compiler/user-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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"];
|
|
3
|
+
type Node = {
|
|
4
|
+
kind: string;
|
|
5
|
+
emptyPolicy?: unknown;
|
|
6
|
+
binding?: string;
|
|
7
|
+
};
|
|
8
|
+
type Definition = {
|
|
9
|
+
nodes?: Record<string, Node>;
|
|
10
|
+
};
|
|
11
|
+
type Binding = {
|
|
12
|
+
bindings?: Record<string, {
|
|
13
|
+
provider: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
export declare function validateWorkflowApprovalEmptyPolicy(definition: Definition, binding?: Binding): string[];
|
|
17
|
+
/** An empty selection alone is never evidence that an approval may be skipped. */
|
|
18
|
+
export declare function workflowApprovalCanSkip(node: Node, resolution: {
|
|
19
|
+
provider: string;
|
|
20
|
+
emptyResult?: 'no_candidates';
|
|
21
|
+
candidates: unknown[];
|
|
22
|
+
selected: unknown[];
|
|
23
|
+
warnings: unknown[];
|
|
24
|
+
} | undefined): boolean;
|
|
25
|
+
/** Empty fixed lists must be explicit and used exclusively by skipping approval nodes. */
|
|
26
|
+
export declare function workflowBindingAllowsEmptyUsers(definition: Definition, bindingCode: string): boolean;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=workflow-approval-empty.d.ts.map
|
|
@@ -0,0 +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,8FAEpC,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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Only these sources can currently attest a genuine empty approval result. */
|
|
2
|
+
export const WORKFLOW_APPROVAL_EMPTY_PROVIDERS = [
|
|
3
|
+
'fixed_users', 'input_users', 'form_field_users', 'app_role', 'app_role_in_scope',
|
|
4
|
+
];
|
|
5
|
+
export function validateWorkflowApprovalEmptyPolicy(definition, binding) {
|
|
6
|
+
const errors = [];
|
|
7
|
+
for (const [id, node] of Object.entries(definition?.nodes || {})) {
|
|
8
|
+
if (node.kind === 'cc' || node.emptyPolicy === undefined)
|
|
9
|
+
continue;
|
|
10
|
+
if (node.kind !== 'approval' || !['block', 'skip'].includes(node.emptyPolicy)) {
|
|
11
|
+
errors.push(`WORKFLOW_APPROVAL_EMPTY_POLICY_INVALID:${id}`);
|
|
12
|
+
}
|
|
13
|
+
else if (node.emptyPolicy === 'skip' && binding &&
|
|
14
|
+
!WORKFLOW_APPROVAL_EMPTY_PROVIDERS.includes(binding.bindings?.[node.binding || '']?.provider)) {
|
|
15
|
+
errors.push(`WORKFLOW_APPROVAL_EMPTY_PROVIDER_UNSUPPORTED:${id}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return errors;
|
|
19
|
+
}
|
|
20
|
+
/** An empty selection alone is never evidence that an approval may be skipped. */
|
|
21
|
+
export function workflowApprovalCanSkip(node, resolution) {
|
|
22
|
+
return node.kind === 'approval' && node.emptyPolicy === 'skip' &&
|
|
23
|
+
resolution?.emptyResult === 'no_candidates' &&
|
|
24
|
+
WORKFLOW_APPROVAL_EMPTY_PROVIDERS.includes(resolution.provider) &&
|
|
25
|
+
Array.isArray(resolution.candidates) && resolution.candidates.length === 0 &&
|
|
26
|
+
Array.isArray(resolution.selected) && resolution.selected.length === 0 &&
|
|
27
|
+
Array.isArray(resolution.warnings) && resolution.warnings.length === 0;
|
|
28
|
+
}
|
|
29
|
+
/** Empty fixed lists must be explicit and used exclusively by skipping approval nodes. */
|
|
30
|
+
export function workflowBindingAllowsEmptyUsers(definition, bindingCode) {
|
|
31
|
+
const consumers = Object.values(definition.nodes || {}).filter(node => node.binding === bindingCode);
|
|
32
|
+
return consumers.length > 0 && consumers.every(node => node.kind === 'approval' && node.emptyPolicy === 'skip');
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=workflow-approval-empty.js.map
|
|
@@ -0,0 +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;CACzE,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,39 @@
|
|
|
1
|
+
/** Fixed, code-owned approval effect. Authorization remains owned by the platform. */
|
|
2
|
+
export interface WorkflowApprovedDelegationPolicy {
|
|
3
|
+
confirmationNodeId: string;
|
|
4
|
+
confirmer: 'initiator' | 'delegate';
|
|
5
|
+
requestsField: string;
|
|
6
|
+
maxRequests: number;
|
|
7
|
+
}
|
|
8
|
+
export interface WorkflowApprovedDelegationRequest {
|
|
9
|
+
key?: string;
|
|
10
|
+
delegatorRoleSubjectKey: string;
|
|
11
|
+
delegatorRoleSubjectRevision: number;
|
|
12
|
+
delegate: {
|
|
13
|
+
value: string;
|
|
14
|
+
label: string;
|
|
15
|
+
};
|
|
16
|
+
delegateRoleSubjectKey: string;
|
|
17
|
+
expectedDelegateRevision: number;
|
|
18
|
+
workflowCode: string | null;
|
|
19
|
+
nodeId: string | null;
|
|
20
|
+
validFrom: string;
|
|
21
|
+
validTo: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
}
|
|
24
|
+
type Definition = {
|
|
25
|
+
approvedDelegation?: WorkflowApprovedDelegationPolicy;
|
|
26
|
+
startAt: string;
|
|
27
|
+
inputSchema: Record<string, any>;
|
|
28
|
+
nodes: Record<string, any>;
|
|
29
|
+
subject?: {
|
|
30
|
+
factProjection: Record<string, string>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export declare const WORKFLOW_APPROVED_DELEGATION_MAX_REQUESTS = 500;
|
|
34
|
+
export declare const WORKFLOW_APPROVED_DELEGATION_MAX_BYTES: number;
|
|
35
|
+
export declare function validateWorkflowApprovedDelegation(definition: Definition): string[];
|
|
36
|
+
/** Read only canonical instance facts. Reject coercion, unknown fields and scope expansion. */
|
|
37
|
+
export declare function workflowApprovedDelegationRequests(policy: WorkflowApprovedDelegationPolicy, facts: Record<string, any>): WorkflowApprovedDelegationRequest[];
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=workflow-approved-delegation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-approved-delegation.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-approved-delegation.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,WAAW,gCAAgC;IAC/C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB,EAAE,MAAM,CAAC;IAChC,4BAA4B,EAAE,MAAM,CAAC;IACrC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,UAAU,GAAG;IAChB,kBAAkB,CAAC,EAAE,gCAAgC,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CACtD,CAAC;AAKF,eAAO,MAAM,yCAAyC,MAAM,CAAC;AAC7D,eAAO,MAAM,sCAAsC,QAAa,CAAC;AAEjE,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CA4BnF;AAED,+FAA+F;AAC/F,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,gCAAgC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,iCAAiC,EAAE,CAoC5J"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
2
|
+
const field = /^[A-Za-z][A-Za-z0-9_]{0,62}$/;
|
|
3
|
+
const code = /^[A-Za-z][A-Za-z0-9_-]{0,127}$/;
|
|
4
|
+
const membership = /^membership:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
5
|
+
export const WORKFLOW_APPROVED_DELEGATION_MAX_REQUESTS = 500;
|
|
6
|
+
export const WORKFLOW_APPROVED_DELEGATION_MAX_BYTES = 256 * 1024;
|
|
7
|
+
export function validateWorkflowApprovedDelegation(definition) {
|
|
8
|
+
if (definition?.approvedDelegation === undefined)
|
|
9
|
+
return [];
|
|
10
|
+
const policy = definition.approvedDelegation;
|
|
11
|
+
if (!object(policy) || Object.keys(policy).some(key => !['confirmationNodeId', 'confirmer', 'requestsField', 'maxRequests'].includes(key)) ||
|
|
12
|
+
!code.test(policy.confirmationNodeId || '') || !['initiator', 'delegate'].includes(policy.confirmer) ||
|
|
13
|
+
!field.test(policy.requestsField || '') || !Number.isSafeInteger(policy.maxRequests) || policy.maxRequests < 1 || policy.maxRequests > WORKFLOW_APPROVED_DELEGATION_MAX_REQUESTS)
|
|
14
|
+
return ['WORKFLOW_APPROVED_DELEGATION_POLICY_INVALID'];
|
|
15
|
+
const errors = [];
|
|
16
|
+
const node = definition.nodes?.[policy.confirmationNodeId];
|
|
17
|
+
if (!node || node.kind !== 'approval' || node.mode !== 'single' || node.emptyPolicy === 'skip' || node.initiatorApprovalPolicy === 'auto_approve' || node.completionDeadline ||
|
|
18
|
+
node.administration?.assigneeProviders?.length || node.administration?.modes?.some((mode) => mode !== 'single') ||
|
|
19
|
+
node.allowedOperations?.some((op) => ['transfer', 'delegate', 'add_assignee', 'admin_override'].includes(op)))
|
|
20
|
+
errors.push('WORKFLOW_APPROVED_DELEGATION_CONFIRMATION_INVALID');
|
|
21
|
+
const rows = definition.inputSchema?.properties?.[policy.requestsField];
|
|
22
|
+
if (!rows || rows.type !== 'array' || !Number.isSafeInteger(rows.maxItems) || rows.maxItems < 1 || rows.maxItems > policy.maxRequests ||
|
|
23
|
+
!rows.items || rows.items.type !== 'object' || rows.items.additionalProperties !== false || !definition.subject?.factProjection?.[policy.requestsField])
|
|
24
|
+
errors.push('WORKFLOW_APPROVED_DELEGATION_REQUEST_SCHEMA_INVALID');
|
|
25
|
+
const approved = Object.values(definition.nodes || {}).some(node => node.kind === 'end' && node.outcome === 'approved');
|
|
26
|
+
if (!approved)
|
|
27
|
+
errors.push('WORKFLOW_APPROVED_DELEGATION_APPROVED_END_REQUIRED');
|
|
28
|
+
// A graph path is declaration validation, never evidence of a human decision.
|
|
29
|
+
const pending = [definition.startAt];
|
|
30
|
+
const visited = new Set();
|
|
31
|
+
while (pending.length) {
|
|
32
|
+
const id = pending.pop();
|
|
33
|
+
if (id === policy.confirmationNodeId || visited.has(id))
|
|
34
|
+
continue;
|
|
35
|
+
visited.add(id);
|
|
36
|
+
const current = definition.nodes?.[id];
|
|
37
|
+
if (!current)
|
|
38
|
+
continue;
|
|
39
|
+
if (current.kind === 'end' && current.outcome === 'approved')
|
|
40
|
+
errors.push('WORKFLOW_APPROVED_DELEGATION_CONFIRMATION_BYPASS');
|
|
41
|
+
if (current.kind === 'approval')
|
|
42
|
+
pending.push(current.onApprove, current.onReject);
|
|
43
|
+
if (current.kind === 'condition')
|
|
44
|
+
pending.push(current.otherwise, ...(current.branches || []).map((branch) => branch.target));
|
|
45
|
+
if (current.kind === 'cc' || current.kind === 'action')
|
|
46
|
+
pending.push(current.next);
|
|
47
|
+
}
|
|
48
|
+
return [...new Set(errors)];
|
|
49
|
+
}
|
|
50
|
+
/** Read only canonical instance facts. Reject coercion, unknown fields and scope expansion. */
|
|
51
|
+
export function workflowApprovedDelegationRequests(policy, facts) {
|
|
52
|
+
const rows = facts?.data?.[policy.requestsField];
|
|
53
|
+
const fail = () => { throw new Error('WORKFLOW_APPROVED_DELEGATION_REQUEST_INVALID'); };
|
|
54
|
+
if (!Array.isArray(rows) || !rows.length || rows.length > policy.maxRequests || rows.length > WORKFLOW_APPROVED_DELEGATION_MAX_REQUESTS ||
|
|
55
|
+
new TextEncoder().encode(JSON.stringify(rows)).byteLength > WORKFLOW_APPROVED_DELEGATION_MAX_BYTES)
|
|
56
|
+
fail();
|
|
57
|
+
const allowed = ['key', 'delegatorRoleSubjectKey', 'delegatorRoleSubjectRevision', 'delegate', 'delegateRoleSubjectKey', 'expectedDelegateRevision', 'workflowCode', 'nodeId', 'validFrom', 'validTo', 'reason'];
|
|
58
|
+
const text = (value, max) => typeof value === 'string' && value.trim().length > 0 && value.length <= max;
|
|
59
|
+
const date = (value) => {
|
|
60
|
+
if (typeof value !== 'string')
|
|
61
|
+
return false;
|
|
62
|
+
const parts = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.\d{1,3})?(?:Z|[+-](\d\d):(\d\d))$/.exec(value);
|
|
63
|
+
if (!parts)
|
|
64
|
+
return false;
|
|
65
|
+
const [, yearText, monthText, dayText, hourText, minuteText, secondText, offsetHour, offsetMinute] = parts;
|
|
66
|
+
const year = Number(yearText), month = Number(monthText), day = Number(dayText);
|
|
67
|
+
const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
68
|
+
const monthDays = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
69
|
+
return month >= 1 && month <= 12 && day >= 1 && day <= monthDays[month - 1] &&
|
|
70
|
+
Number(hourText) <= 23 && Number(minuteText) <= 59 && Number(secondText) <= 59 &&
|
|
71
|
+
(offsetHour === undefined || Number(offsetHour) <= 23 && Number(offsetMinute) <= 59) && Number.isFinite(Date.parse(value));
|
|
72
|
+
};
|
|
73
|
+
const normalized = rows.map(row => {
|
|
74
|
+
if (!object(row))
|
|
75
|
+
return fail();
|
|
76
|
+
if (Object.keys(row).some(key => !allowed.includes(key)) ||
|
|
77
|
+
!text(row.delegatorRoleSubjectKey, 255) || !membership.test(row.delegatorRoleSubjectKey) ||
|
|
78
|
+
!text(row.delegateRoleSubjectKey, 255) || !membership.test(row.delegateRoleSubjectKey) ||
|
|
79
|
+
!Number.isSafeInteger(row.delegatorRoleSubjectRevision) || row.delegatorRoleSubjectRevision < 1 ||
|
|
80
|
+
!Number.isSafeInteger(row.expectedDelegateRevision) || row.expectedDelegateRevision < 1 ||
|
|
81
|
+
!object(row.delegate) || Object.keys(row.delegate).some(key => !['value', 'label'].includes(key)) || !text(row.delegate.value, 255) || !text(row.delegate.label, 200) ||
|
|
82
|
+
!(row.workflowCode === null || text(row.workflowCode, 128) && code.test(row.workflowCode)) ||
|
|
83
|
+
!(row.nodeId === null || text(row.nodeId, 128) && /^[A-Za-z0-9._:-]{1,128}$/.test(row.nodeId) && row.workflowCode) ||
|
|
84
|
+
!date(row.validFrom) || !date(row.validTo) || Date.parse(row.validFrom) >= Date.parse(row.validTo) || !text(row.reason, 4000) ||
|
|
85
|
+
row.key !== undefined && !text(row.key, 128))
|
|
86
|
+
fail();
|
|
87
|
+
return { ...row, delegate: { value: row.delegate.value, label: row.delegate.label },
|
|
88
|
+
validFrom: new Date(row.validFrom).toISOString(), validTo: new Date(row.validTo).toISOString() };
|
|
89
|
+
});
|
|
90
|
+
if (policy.confirmer === 'delegate' && new Set(normalized.map(row => row.delegate.value)).size !== 1)
|
|
91
|
+
fail();
|
|
92
|
+
return normalized;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=workflow-approved-delegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-approved-delegation.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-approved-delegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/** Opt-in, fixed-definition dispatch; Workflow continues to own the decision. */
|
|
2
|
+
export type WorkflowBusinessCommand = 'approve' | 'reject' | 'withdraw' | 'resubmit';
|
|
3
|
+
export type WorkflowCommandHandlers = Partial<Record<WorkflowBusinessCommand, {
|
|
4
|
+
operationCode: string;
|
|
5
|
+
}>>;
|
|
6
|
+
type Definition = {
|
|
7
|
+
code: string;
|
|
8
|
+
subject?: {
|
|
9
|
+
resourceCode: string;
|
|
10
|
+
};
|
|
11
|
+
commandHandlers?: WorkflowCommandHandlers;
|
|
12
|
+
nodes: Record<string, {
|
|
13
|
+
kind: string;
|
|
14
|
+
emptyPolicy?: string;
|
|
15
|
+
initiatorApprovalPolicy?: string;
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
type Operation = {
|
|
19
|
+
code: string;
|
|
20
|
+
method: string;
|
|
21
|
+
browser?: {
|
|
22
|
+
exposure: string;
|
|
23
|
+
behavior: string;
|
|
24
|
+
idempotency: string;
|
|
25
|
+
subject: {
|
|
26
|
+
resourceCode: string;
|
|
27
|
+
inputField: string;
|
|
28
|
+
};
|
|
29
|
+
fileIntent?: unknown;
|
|
30
|
+
};
|
|
31
|
+
platformAccess?: {
|
|
32
|
+
workflow?: {
|
|
33
|
+
codes: readonly string[];
|
|
34
|
+
businessCommands?: readonly WorkflowBusinessCommand[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export declare function validateWorkflowCommandHandlers(definition: Definition, operations?: readonly Operation[]): string[];
|
|
39
|
+
/** Closed invocation passed by the shared browser client to a verified Named Action. */
|
|
40
|
+
export declare const workflowBusinessCommandInvocationSchema: {
|
|
41
|
+
readonly type: "object";
|
|
42
|
+
readonly additionalProperties: false;
|
|
43
|
+
readonly required: readonly ["workflowCode", "target", "recordId", "expectedRevision", "commandToken", "idempotencyKey", "input"];
|
|
44
|
+
readonly properties: {
|
|
45
|
+
readonly workflowCode: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
readonly pattern: "^[A-Za-z][A-Za-z0-9_-]{0,127}$";
|
|
48
|
+
};
|
|
49
|
+
readonly target: {
|
|
50
|
+
readonly oneOf: readonly [{
|
|
51
|
+
readonly type: "object";
|
|
52
|
+
readonly additionalProperties: false;
|
|
53
|
+
readonly required: readonly ["kind", "id", "command"];
|
|
54
|
+
readonly properties: {
|
|
55
|
+
readonly kind: {
|
|
56
|
+
readonly const: "task";
|
|
57
|
+
};
|
|
58
|
+
readonly id: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
readonly format: "uuid";
|
|
61
|
+
};
|
|
62
|
+
readonly command: {
|
|
63
|
+
readonly enum: readonly ["approve", "reject", "resubmit"];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}, {
|
|
67
|
+
readonly type: "object";
|
|
68
|
+
readonly additionalProperties: false;
|
|
69
|
+
readonly required: readonly ["kind", "id", "command"];
|
|
70
|
+
readonly properties: {
|
|
71
|
+
readonly kind: {
|
|
72
|
+
readonly const: "instance";
|
|
73
|
+
};
|
|
74
|
+
readonly id: {
|
|
75
|
+
readonly type: "string";
|
|
76
|
+
readonly format: "uuid";
|
|
77
|
+
};
|
|
78
|
+
readonly command: {
|
|
79
|
+
readonly const: "withdraw";
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
}];
|
|
83
|
+
};
|
|
84
|
+
readonly recordId: {
|
|
85
|
+
readonly type: "string";
|
|
86
|
+
readonly format: "uuid";
|
|
87
|
+
};
|
|
88
|
+
readonly expectedRevision: {
|
|
89
|
+
readonly type: "integer";
|
|
90
|
+
readonly minimum: 1;
|
|
91
|
+
};
|
|
92
|
+
readonly commandToken: {
|
|
93
|
+
readonly type: "string";
|
|
94
|
+
readonly pattern: "^[A-Za-z0-9_-]{43}$";
|
|
95
|
+
};
|
|
96
|
+
readonly idempotencyKey: {
|
|
97
|
+
readonly type: "string";
|
|
98
|
+
readonly minLength: 1;
|
|
99
|
+
readonly maxLength: 128;
|
|
100
|
+
};
|
|
101
|
+
readonly input: {
|
|
102
|
+
readonly type: "object";
|
|
103
|
+
readonly maxProperties: 64;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export {};
|
|
108
|
+
//# sourceMappingURL=workflow-business-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-business-command.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-business-command.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AACrF,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAE1G,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjG,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACnJ,cAAc,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE;YAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,gBAAgB,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CACrH,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CA8BnH;AAED,wFAAwF;AACxF,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqB1C,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function validateWorkflowCommandHandlers(definition, operations) {
|
|
2
|
+
const handlers = definition.commandHandlers;
|
|
3
|
+
if (handlers === undefined)
|
|
4
|
+
return [];
|
|
5
|
+
if (!handlers || typeof handlers !== 'object' || Array.isArray(handlers) || !Object.keys(handlers).length ||
|
|
6
|
+
Object.keys(handlers).some(key => !['approve', 'reject', 'withdraw', 'resubmit'].includes(key)))
|
|
7
|
+
return ['WORKFLOW_BUSINESS_COMMAND_HANDLERS_INVALID'];
|
|
8
|
+
const errors = [];
|
|
9
|
+
if (handlers.resubmit && !Object.values(definition.nodes || {}).some(node => node.kind === 'correction')) {
|
|
10
|
+
errors.push('WORKFLOW_BUSINESS_CORRECTION_REQUIRED');
|
|
11
|
+
}
|
|
12
|
+
for (const [command, handler] of Object.entries(handlers)) {
|
|
13
|
+
if (!handler || typeof handler !== 'object' || Array.isArray(handler) || Object.keys(handler).join(',') !== 'operationCode' ||
|
|
14
|
+
!/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/.test(handler.operationCode || '')) {
|
|
15
|
+
errors.push('WORKFLOW_BUSINESS_COMMAND_HANDLER_INVALID');
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (!operations)
|
|
19
|
+
continue;
|
|
20
|
+
const operation = operations.find(item => item.code === handler.operationCode);
|
|
21
|
+
if (!operation) {
|
|
22
|
+
errors.push('WORKFLOW_BUSINESS_COMMAND_OPERATION_MISSING');
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (operation.method !== 'POST' || operation.browser?.exposure !== 'authenticated' ||
|
|
26
|
+
operation.browser.behavior !== 'controlled' || operation.browser.idempotency !== 'required' || operation.browser.fileIntent ||
|
|
27
|
+
operation.browser.subject?.resourceCode !== definition.subject?.resourceCode || operation.browser.subject?.inputField !== 'recordId' ||
|
|
28
|
+
!operation.platformAccess?.workflow?.codes?.includes(definition.code) ||
|
|
29
|
+
!operation.platformAccess.workflow.businessCommands?.includes(command)) {
|
|
30
|
+
errors.push('WORKFLOW_BUSINESS_COMMAND_OPERATION_INVALID');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (['approve', 'reject', 'withdraw'].some(command => Object.hasOwn(handlers, command)) &&
|
|
34
|
+
Object.values(definition.nodes || {}).some(node => node.kind === 'approval' &&
|
|
35
|
+
(node.emptyPolicy === 'skip' || node.initiatorApprovalPolicy === 'auto_approve')))
|
|
36
|
+
errors.push('WORKFLOW_BUSINESS_COMMAND_AUTOMATIC_DECISION_FORBIDDEN');
|
|
37
|
+
return [...new Set(errors)];
|
|
38
|
+
}
|
|
39
|
+
/** Closed invocation passed by the shared browser client to a verified Named Action. */
|
|
40
|
+
export const workflowBusinessCommandInvocationSchema = {
|
|
41
|
+
type: 'object', additionalProperties: false,
|
|
42
|
+
required: ['workflowCode', 'target', 'recordId', 'expectedRevision', 'commandToken', 'idempotencyKey', 'input'],
|
|
43
|
+
properties: {
|
|
44
|
+
workflowCode: { type: 'string', pattern: '^[A-Za-z][A-Za-z0-9_-]{0,127}$' },
|
|
45
|
+
target: {
|
|
46
|
+
oneOf: [
|
|
47
|
+
{ type: 'object', additionalProperties: false, required: ['kind', 'id', 'command'], properties: {
|
|
48
|
+
kind: { const: 'task' }, id: { type: 'string', format: 'uuid' }, command: { enum: ['approve', 'reject', 'resubmit'] },
|
|
49
|
+
} },
|
|
50
|
+
{ type: 'object', additionalProperties: false, required: ['kind', 'id', 'command'], properties: {
|
|
51
|
+
kind: { const: 'instance' }, id: { type: 'string', format: 'uuid' }, command: { const: 'withdraw' },
|
|
52
|
+
} },
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
recordId: { type: 'string', format: 'uuid' },
|
|
56
|
+
expectedRevision: { type: 'integer', minimum: 1 },
|
|
57
|
+
commandToken: { type: 'string', pattern: '^[A-Za-z0-9_-]{43}$' },
|
|
58
|
+
idempotencyKey: { type: 'string', minLength: 1, maxLength: 128 },
|
|
59
|
+
input: { type: 'object', maxProperties: 64 },
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=workflow-business-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-business-command.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-business-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Immutable application rule. An automatic completion never fabricates a human vote. */
|
|
2
|
+
export interface WorkflowCompletionDeadline {
|
|
3
|
+
afterSeconds: number;
|
|
4
|
+
action: 'approve';
|
|
5
|
+
}
|
|
6
|
+
export interface WorkflowCompletionDeadlineState {
|
|
7
|
+
deadlineAt: string;
|
|
8
|
+
action: 'approve';
|
|
9
|
+
status: 'pending' | 'completed' | 'cancelled' | 'failed';
|
|
10
|
+
attempts: number;
|
|
11
|
+
lastErrorCode?: string;
|
|
12
|
+
}
|
|
13
|
+
type Node = {
|
|
14
|
+
kind: string;
|
|
15
|
+
completionDeadline?: unknown;
|
|
16
|
+
allowedOperations?: readonly string[];
|
|
17
|
+
taskPageCode?: string;
|
|
18
|
+
fieldPolicy?: {
|
|
19
|
+
default?: string;
|
|
20
|
+
fields?: Record<string, string>;
|
|
21
|
+
};
|
|
22
|
+
operationPolicy?: {
|
|
23
|
+
approve?: {
|
|
24
|
+
commentRequired?: boolean;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
type Definition = {
|
|
29
|
+
nodes?: Record<string, Node>;
|
|
30
|
+
taskPages?: Record<string, {
|
|
31
|
+
fields: unknown[];
|
|
32
|
+
}>;
|
|
33
|
+
commandHandlers?: {
|
|
34
|
+
approve?: unknown;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export declare function formatWorkflowCompletionDeadline(rule: WorkflowCompletionDeadline): string;
|
|
38
|
+
/** Conservatively disallow anything that an automatic decision cannot supply. */
|
|
39
|
+
export declare function validateWorkflowCompletionDeadlines(definition: Definition): string[];
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=workflow-completion-deadline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-completion-deadline.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-completion-deadline.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACpE,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE,CAAC;CAC/D,CAAC;AACF,KAAK,UAAU,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACzC,CAAC;AASF,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,CAIzF;AAED,iFAAiF;AACjF,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAuBpF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function requiresInput(fields, depth = 0) {
|
|
2
|
+
if (!Array.isArray(fields) || fields.length > 64 || depth > 1)
|
|
3
|
+
return true;
|
|
4
|
+
return fields.some(field => !field || typeof field !== 'object' || Array.isArray(field) ||
|
|
5
|
+
field.required === true || field.requiredWhen !== undefined ||
|
|
6
|
+
field.subtable !== undefined && (!field.subtable || requiresInput(field.subtable.fields, depth + 1)));
|
|
7
|
+
}
|
|
8
|
+
export function formatWorkflowCompletionDeadline(rule) {
|
|
9
|
+
const seconds = rule.afterSeconds;
|
|
10
|
+
const duration = seconds % 86400 === 0 ? `${seconds / 86400} 天` : seconds % 3600 === 0 ? `${seconds / 3600} 小时` : seconds % 60 === 0 ? `${seconds / 60} 分钟` : `${seconds} 秒`;
|
|
11
|
+
return `进入后 ${duration}未完成,自动同意`;
|
|
12
|
+
}
|
|
13
|
+
/** Conservatively disallow anything that an automatic decision cannot supply. */
|
|
14
|
+
export function validateWorkflowCompletionDeadlines(definition) {
|
|
15
|
+
const errors = [];
|
|
16
|
+
for (const [id, node] of Object.entries(definition?.nodes || {})) {
|
|
17
|
+
if (!node || typeof node !== 'object')
|
|
18
|
+
continue;
|
|
19
|
+
if (node.completionDeadline === undefined)
|
|
20
|
+
continue;
|
|
21
|
+
const rule = node.completionDeadline;
|
|
22
|
+
if (node.kind !== 'approval' || !rule || typeof rule !== 'object' || Array.isArray(rule) ||
|
|
23
|
+
Object.keys(rule).length !== 2 || Object.keys(rule).some(key => !['afterSeconds', 'action'].includes(key)) ||
|
|
24
|
+
rule.action !== 'approve' || !Number.isInteger(rule.afterSeconds) || rule.afterSeconds < 1 || rule.afterSeconds > 2_592_000) {
|
|
25
|
+
errors.push(`WORKFLOW_COMPLETION_DEADLINE_INVALID:${id}`);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (node.allowedOperations && !node.allowedOperations.includes('approve')) {
|
|
29
|
+
errors.push(`WORKFLOW_COMPLETION_DEADLINE_APPROVE_UNAVAILABLE:${id}`);
|
|
30
|
+
}
|
|
31
|
+
const page = node.taskPageCode ? definition.taskPages?.[node.taskPageCode] : undefined;
|
|
32
|
+
if (node.taskPageCode && (!page || requiresInput(page.fields)) ||
|
|
33
|
+
[node.fieldPolicy?.default, ...Object.values(node.fieldPolicy?.fields || {})].includes('edit_required') ||
|
|
34
|
+
node.operationPolicy?.approve?.commentRequired === true || definition.commandHandlers?.approve !== undefined) {
|
|
35
|
+
errors.push(`WORKFLOW_COMPLETION_DEADLINE_INPUT_REQUIRED:${id}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return errors;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=workflow-completion-deadline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-completion-deadline.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-completion-deadline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Fixed data correction task; assignment always belongs to the instance initiator. */
|
|
2
|
+
export interface WorkflowCorrectionNode {
|
|
3
|
+
id: string;
|
|
4
|
+
kind: 'correction';
|
|
5
|
+
title: string;
|
|
6
|
+
taskPageCode: string;
|
|
7
|
+
next: string;
|
|
8
|
+
}
|
|
9
|
+
type Definition = {
|
|
10
|
+
startAt: string;
|
|
11
|
+
nodes: Record<string, any>;
|
|
12
|
+
taskPages?: Record<string, any>;
|
|
13
|
+
};
|
|
14
|
+
export declare function validateWorkflowCorrections(definition: Definition): string[];
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=workflow-correction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-correction.d.ts","sourceRoot":"","sources":["../../src/native-compiler/workflow-correction.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC;AAEnG,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAiC5E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const object = (value) => !!value && typeof value === 'object' && !Array.isArray(value) && [null, Object.prototype].includes(Object.getPrototypeOf(value));
|
|
2
|
+
export function validateWorkflowCorrections(definition) {
|
|
3
|
+
const nodes = definition?.nodes || {};
|
|
4
|
+
const corrections = Object.values(nodes).filter(node => node?.kind === 'correction');
|
|
5
|
+
if (!corrections.length)
|
|
6
|
+
return [];
|
|
7
|
+
const errors = [];
|
|
8
|
+
const targets = (node) => node?.kind === 'approval' ? [node.onApprove, node.onReject]
|
|
9
|
+
: node?.kind === 'condition' ? [...(Array.isArray(node.branches) ? node.branches : []).map((branch) => branch.target), node.otherwise]
|
|
10
|
+
: node?.kind === 'action' || node?.kind === 'cc' ? [node.next] : [];
|
|
11
|
+
const forward = new Set();
|
|
12
|
+
const pending = [definition.startAt];
|
|
13
|
+
while (pending.length) {
|
|
14
|
+
const id = pending.pop();
|
|
15
|
+
if (forward.has(id))
|
|
16
|
+
continue;
|
|
17
|
+
forward.add(id);
|
|
18
|
+
pending.push(...targets(nodes[id]));
|
|
19
|
+
}
|
|
20
|
+
for (const node of corrections) {
|
|
21
|
+
if (!object(node) || Object.keys(node).some(key => !['id', 'kind', 'title', 'taskPageCode', 'next'].includes(key)) ||
|
|
22
|
+
typeof node.id !== 'string' || !/^[A-Za-z][A-Za-z0-9_-]{0,127}$/.test(node.id) ||
|
|
23
|
+
['__proto__', 'prototype', 'constructor'].includes(node.id) || nodes[node.id] !== node ||
|
|
24
|
+
typeof node.title !== 'string' || !node.title.trim() || node.title.length > 255 ||
|
|
25
|
+
typeof node.taskPageCode !== 'string' || !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(node.taskPageCode))
|
|
26
|
+
errors.push('WORKFLOW_CORRECTION_NODE_INVALID');
|
|
27
|
+
if (node.next !== definition.startAt || nodes[node.next]?.kind === 'correction')
|
|
28
|
+
errors.push('WORKFLOW_CORRECTION_REPLAY_TARGET_INVALID');
|
|
29
|
+
if (forward.has(node.id) || Object.values(nodes).some(current => targets(current).includes(node.id)))
|
|
30
|
+
errors.push('WORKFLOW_CORRECTION_FORWARD_ENTRY_FORBIDDEN');
|
|
31
|
+
if (!Object.values(nodes).some(current => current?.kind === 'approval' && forward.has(current.id) &&
|
|
32
|
+
Array.isArray(current.returnTargets) && current.returnTargets.includes(node.id)))
|
|
33
|
+
errors.push('WORKFLOW_CORRECTION_RETURN_SOURCE_REQUIRED');
|
|
34
|
+
const page = definition.taskPages?.[node.taskPageCode];
|
|
35
|
+
if (!page || !Array.isArray(page.fields))
|
|
36
|
+
errors.push('WORKFLOW_CORRECTION_PAGE_REQUIRED');
|
|
37
|
+
else if (page.fields.some((field) => field?.subtable))
|
|
38
|
+
errors.push('WORKFLOW_CORRECTION_OWNED_FACTS_UNSUPPORTED');
|
|
39
|
+
}
|
|
40
|
+
return [...new Set(errors)];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=workflow-correction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-correction.js","sourceRoot":"","sources":["../../src/native-compiler/workflow-correction.ts"],"names":[],"mappings":"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"}
|