@rytass/bpm-core-nestjs-module 0.17.9 → 0.18.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/CHANGELOG.md +53 -0
- package/README.md +29 -2
- package/package.json +2 -2
- package/src/lib/delegation/delegation.service.d.ts +41 -1
- package/src/lib/delegation/delegation.service.js +147 -23
- package/src/lib/delegation/delegation.service.js.map +1 -1
- package/src/lib/form/form-schema.validator.js +66 -6
- package/src/lib/form/form-schema.validator.js.map +1 -1
- package/src/lib/workflow-engine/text-field-pattern-test.d.ts +23 -0
- package/src/lib/workflow-engine/text-field-pattern-test.js +75 -0
- package/src/lib/workflow-engine/text-field-pattern-test.js.map +1 -0
- package/src/lib/workflow-engine/workflow-engine.service.js +148 -29
- package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,56 @@
|
|
|
1
|
+
## 0.18.0 (2026-10-28)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **bpm-core-client:** check text field formats in a Web Worker ([a3c3d65](https://github.com/Rytass/BPMCore/commit/a3c3d65))
|
|
6
|
+
- **bpm-core-react:** name text length and format errors on the case pages ([074d4b9](https://github.com/Rytass/BPMCore/commit/074d4b9))
|
|
7
|
+
- ⚠️ **bpm-core:** enforce text length and format on submit and fill ([c8ec5b3](https://github.com/Rytass/BPMCore/commit/c8ec5b3))
|
|
8
|
+
- **bpm-core:** refuse text formats that cannot be checked ([88635de](https://github.com/Rytass/BPMCore/commit/88635de))
|
|
9
|
+
- ⚠️ **bpm-core:** refuse ANY returns outside the applicant and earlier user tasks ([e6d5af0](https://github.com/Rytass/BPMCore/commit/e6d5af0))
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **bpm-core:** ask the directory only about delegation rules in scope ([022304e](https://github.com/Rytass/BPMCore/commit/022304e))
|
|
14
|
+
- **bpm-core:** hold service-task text writes to the field's rules ([fcde1df](https://github.com/Rytass/BPMCore/commit/fcde1df))
|
|
15
|
+
- **bpm-core-react:** check formats off the main thread on the case pages ([58a1a9d](https://github.com/Rytass/BPMCore/commit/58a1a9d))
|
|
16
|
+
- **bpm-core:** keep the directory's error out of the delegation refusal ([14ccd0e](https://github.com/Rytass/BPMCore/commit/14ccd0e))
|
|
17
|
+
- **bpm-core:** refuse to dispatch when the delegation directory lookup fails ([8ef8a88](https://github.com/Rytass/BPMCore/commit/8ef8a88))
|
|
18
|
+
- **bpm-core:** stop waiting for a delegation directory lookup after 5 seconds ([c1473c6](https://github.com/Rytass/BPMCore/commit/c1473c6))
|
|
19
|
+
- **shared:** refuse a text pattern whose parentheses close the anchoring early ([330ef06](https://github.com/Rytass/BPMCore/commit/330ef06))
|
|
20
|
+
- **bpm-core:** check the type of a text field whose visibleWhen is false ([b256040](https://github.com/Rytass/BPMCore/commit/b256040))
|
|
21
|
+
- **bpm-core:** keep the task with the principal when the directory lookup fails ([aacccbe](https://github.com/Rytass/BPMCore/commit/aacccbe))
|
|
22
|
+
- **bpm-core:** refuse a table over its row limit before checking its rows ([d22afa7](https://github.com/Rytass/BPMCore/commit/d22afa7))
|
|
23
|
+
- **bpm-core:** charge only matching time to the pattern budget ([eddfb07](https://github.com/Rytass/BPMCore/commit/eddfb07))
|
|
24
|
+
- **bpm-core:** share one pattern time budget per validation pass ([8f81919](https://github.com/Rytass/BPMCore/commit/8f81919))
|
|
25
|
+
- **shared:** refuse every repeated group in a text field pattern ([d0daa77](https://github.com/Rytass/BPMCore/commit/d0daa77))
|
|
26
|
+
- **bpm-core:** run text field patterns under a time limit ([327d0a6](https://github.com/Rytass/BPMCore/commit/327d0a6))
|
|
27
|
+
- **bpm-core:** check the type of a hidden text field with rules ([1282eea](https://github.com/Rytass/BPMCore/commit/1282eea))
|
|
28
|
+
- **bpm-core:** refuse a format on a table column that is not text ([8308db8](https://github.com/Rytass/BPMCore/commit/8308db8))
|
|
29
|
+
- **shared:** refuse repeated alternations whose branches can start alike ([5e6e12e](https://github.com/Rytass/BPMCore/commit/5e6e12e))
|
|
30
|
+
- **bpm-core:** refuse nested text formats and formats on non-text fields ([471222c](https://github.com/Rytass/BPMCore/commit/471222c))
|
|
31
|
+
- **bpm-core:** refuse non-text values and leave approver-filled text to its fill step ([bad4656](https://github.com/Rytass/BPMCore/commit/bad4656))
|
|
32
|
+
- **shared:** keep a later stage that loops back out of the return targets ([86c2fd0](https://github.com/Rytass/BPMCore/commit/86c2fd0))
|
|
33
|
+
- **bpm-core:** skip delegation rules whose agent has been deactivated ([3434b25](https://github.com/Rytass/BPMCore/commit/3434b25))
|
|
34
|
+
|
|
35
|
+
### 🔥 Performance
|
|
36
|
+
|
|
37
|
+
- **bpm-core:** create the pattern test's vm context on its first run ([cbc8633](https://github.com/Rytass/BPMCore/commit/cbc8633))
|
|
38
|
+
- **bpm-core:** ask the host directory once per node when resolving delegation ([cb62b00](https://github.com/Rytass/BPMCore/commit/cb62b00))
|
|
39
|
+
|
|
40
|
+
### ⚠️ Breaking Changes
|
|
41
|
+
|
|
42
|
+
- **bpm-core:** enforce text length and format on submit and fill ([c8ec5b3](https://github.com/Rytass/BPMCore/commit/c8ec5b3))
|
|
43
|
+
a text value outside minLength / maxLength, or one that does
|
|
44
|
+
not match pattern, is refused with 400.
|
|
45
|
+
- **bpm-core:** refuse ANY returns outside the applicant and earlier user tasks ([e6d5af0](https://github.com/Rytass/BPMCore/commit/e6d5af0))
|
|
46
|
+
decideTask RETURN with allowedTargets ANY refuses a target
|
|
47
|
+
that is not the start event or a user task upstream of the returning node.
|
|
48
|
+
|
|
49
|
+
### ❤️ Thank You
|
|
50
|
+
|
|
51
|
+
- Chia Yu Pai @fantasywind
|
|
52
|
+
- Kai-Chieh Yang
|
|
53
|
+
|
|
1
54
|
## 0.17.9 (2026-10-27)
|
|
2
55
|
|
|
3
56
|
### 🚀 Features
|
package/README.md
CHANGED
|
@@ -701,8 +701,9 @@ export interface BPMMemberResolver {
|
|
|
701
701
|
resolveMany(memberIds: readonly string[]): Promise<ReadonlyMap<string, MemberMetadata>>;
|
|
702
702
|
search?(searchText: string): Promise<readonly MemberMetadata[]>;
|
|
703
703
|
// Of memberIds, the members the host has deactivated. Backs
|
|
704
|
-
// inactiveMembersWithOpenTasks
|
|
705
|
-
// resolveInactiveMembers
|
|
704
|
+
// inactiveMembersWithOpenTasks and lets delegation skip a deactivated
|
|
705
|
+
// agent; on a member-base directory, implement resolveInactiveMembers
|
|
706
|
+
// instead. Once implemented, dispatch depends on it: see Delegation Rules.
|
|
706
707
|
resolveInactive?(memberIds: readonly string[]): Promise<readonly MemberMetadata[]>;
|
|
707
708
|
}
|
|
708
709
|
```
|
|
@@ -1689,6 +1690,32 @@ A rule's condition may read only these roots: `env`, `form`, `formData`,
|
|
|
1689
1690
|
Saving a rule with any other root is refused. Rules saved before that check was
|
|
1690
1691
|
added are not changed. They still fail when evaluated.
|
|
1691
1692
|
|
|
1693
|
+
> Unreleased (PR #127): deactivated agents.
|
|
1694
|
+
|
|
1695
|
+
A rule whose agent the host reports as deactivated is skipped: the next rule of
|
|
1696
|
+
the principal applies, and when none is left the principal keeps the task. In a
|
|
1697
|
+
chain A → B → C where C is deactivated, the task stops at B. BPM asks the
|
|
1698
|
+
optional `resolveInactive` on the member resolver (`resolveInactiveMembers` on a
|
|
1699
|
+
member-base directory) about the agents of the rules whose scope applies to the
|
|
1700
|
+
case — once per node for the first hop of every candidate's chain, and once per
|
|
1701
|
+
further hop that has such a rule. A rule out of scope is never looked up, so a
|
|
1702
|
+
principal none of whose rules apply is never held up by the directory. Every
|
|
1703
|
+
scope is evaluated first; a scope condition that fails to evaluate fails the
|
|
1704
|
+
dispatch only when its rule is the one that would apply. Tasks already assigned
|
|
1705
|
+
to a deactivated agent are not taken back. Without `resolveInactive`, or without
|
|
1706
|
+
the identity module, delegation behaves as before.
|
|
1707
|
+
|
|
1708
|
+
Once a host implements it, dispatch depends on it. When `resolveInactive`
|
|
1709
|
+
throws, or has not answered within 5 seconds, the launch, advance or
|
|
1710
|
+
next-candidate step that needed it fails with a `ServiceUnavailableException`
|
|
1711
|
+
(503) naming the member directory lookup, and its transaction rolls back. The
|
|
1712
|
+
agent ids and the host's own error go to the server log only, never to the
|
|
1713
|
+
caller, since a host error can carry internal details such as the directory's
|
|
1714
|
+
address. A task is never handed to an agent who could not be
|
|
1715
|
+
confirmed active, nor silently left with the principal. Keep the lookup
|
|
1716
|
+
available: during a directory outage, no case can be dispatched to a node where
|
|
1717
|
+
someone has a delegation rule that applies to it.
|
|
1718
|
+
|
|
1692
1719
|
## GraphQL Surface
|
|
1693
1720
|
|
|
1694
1721
|
Importing `BPMRootModule` registers GraphQL resolvers for:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rytass/bpm-core-nestjs-module",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Embeddable NestJS BPM approval workflow module: workflow engine, approval templates, forms, organization/member contracts, attachments, signatures, notifications, delegation, and TypeORM migrations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bpm",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"@nestjs/core": ">=10.0.0",
|
|
163
163
|
"@nestjs/graphql": ">=12.0.0",
|
|
164
164
|
"@nestjs/typeorm": ">=10.0.0",
|
|
165
|
-
"@rytass/bpm-core-shared": "^0.
|
|
165
|
+
"@rytass/bpm-core-shared": "^0.18.0",
|
|
166
166
|
"@rytass/secret-adapter-vault-nestjs": ">=0.4.5",
|
|
167
167
|
"express": ">=4.0.0",
|
|
168
168
|
"graphql": ">=16.0.0",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ModuleRef } from '@nestjs/core';
|
|
1
2
|
import { Repository } from 'typeorm';
|
|
2
3
|
import { ConditionService } from '../condition/condition.service';
|
|
3
4
|
import { CreateDelegationRuleInput, UpdateDelegationRuleInput } from './dto/delegation-rule.input';
|
|
@@ -40,7 +41,9 @@ interface ListDelegationRulesOptions {
|
|
|
40
41
|
export declare class DelegationService {
|
|
41
42
|
private readonly delegationRuleRepository;
|
|
42
43
|
private readonly conditionService;
|
|
43
|
-
|
|
44
|
+
private readonly moduleRef?;
|
|
45
|
+
private readonly logger;
|
|
46
|
+
constructor(delegationRuleRepository: Repository<DelegationRuleEntity>, conditionService: ConditionService, moduleRef?: ModuleRef | undefined);
|
|
44
47
|
listDelegationRules(options?: ListDelegationRulesOptions): Promise<readonly DelegationRuleEntity[]>;
|
|
45
48
|
countDelegationRules(options?: Pick<ListDelegationRulesOptions, 'agentMemberId' | 'includeInactive' | 'principalMemberId' | 'scopeType' | 'status'>): Promise<number>;
|
|
46
49
|
createDelegationRule(input: CreateDelegationRuleInput): Promise<DelegationRuleEntity>;
|
|
@@ -51,7 +54,44 @@ export declare class DelegationService {
|
|
|
51
54
|
readonly revokedByMemberId?: string | null;
|
|
52
55
|
}): Promise<DelegationRuleEntity>;
|
|
53
56
|
resolveAssignee(originalAssigneeMemberId: string, context: DelegationResolutionContext, at?: Date): Promise<DelegationResolution>;
|
|
57
|
+
/**
|
|
58
|
+
* {@link resolveAssignee} for every member of `originalAssigneeMemberIds`,
|
|
59
|
+
* in the same order. The first hop of every chain shares one
|
|
60
|
+
* `resolveInactive` call, so a node with many candidates asks the host
|
|
61
|
+
* directory once rather than once per candidate; only a hop beyond the
|
|
62
|
+
* first asks again.
|
|
63
|
+
*/
|
|
64
|
+
resolveAssignees(originalAssigneeMemberIds: readonly string[], context: DelegationResolutionContext, at?: Date): Promise<readonly DelegationResolution[]>;
|
|
54
65
|
private walkDelegationChain;
|
|
66
|
+
/**
|
|
67
|
+
* The principal's rules in force at `at` that can apply in `context`, the
|
|
68
|
+
* applicable one first. Every scope is evaluated up front so the directory is
|
|
69
|
+
* asked only about agents that matter: a principal whose rules are all out
|
|
70
|
+
* of scope never waits on, or is refused by, the host directory.
|
|
71
|
+
*/
|
|
72
|
+
private readScopedRules;
|
|
73
|
+
/** The principal's rules in force at `at`, the applicable one first. */
|
|
74
|
+
private readCurrentRules;
|
|
75
|
+
/**
|
|
76
|
+
* Agents of `rules` the host reports as deactivated. Empty when there is no
|
|
77
|
+
* rule to check, or no identity module (or no `resolveInactive` on the host
|
|
78
|
+
* resolver): delegation then behaves as it did before this check existed.
|
|
79
|
+
*
|
|
80
|
+
* When the host directory fails to answer, or has not answered within
|
|
81
|
+
* {@link DIRECTORY_LOOKUP_TIMEOUT_MS}, the dispatch is refused with a
|
|
82
|
+
* `ServiceUnavailableException` that names the directory lookup (the agent
|
|
83
|
+
* ids and the host's error go to the server log only): a task is
|
|
84
|
+
* never handed to an agent who could not be confirmed active, nor quietly
|
|
85
|
+
* left with a principal whose rule says it should move. The launch or
|
|
86
|
+
* advance that needed it rolls back and can be retried.
|
|
87
|
+
*/
|
|
88
|
+
private readInactiveAgentIds;
|
|
89
|
+
/**
|
|
90
|
+
* Looked up at call time rather than injected: `IdentityModule` is a dynamic
|
|
91
|
+
* module the root configures with the host's options, so this module cannot
|
|
92
|
+
* import it (same as `WorkflowEngineQueries.readIdentityService`).
|
|
93
|
+
*/
|
|
94
|
+
private readIdentityService;
|
|
55
95
|
private matchesRuleScope;
|
|
56
96
|
private assertNoActiveCycle;
|
|
57
97
|
private readRuleOrThrow;
|
|
@@ -1,17 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var DelegationService_1;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.DelegationService = void 0;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const common_1 = require("@nestjs/common");
|
|
7
|
+
const core_1 = require("@nestjs/core");
|
|
8
|
+
const unknown_element_exception_js_1 = require("@nestjs/core/errors/exceptions/unknown-element.exception.js");
|
|
6
9
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
10
|
const typeorm_2 = require("typeorm");
|
|
8
11
|
const condition_service_1 = require("../condition/condition.service");
|
|
12
|
+
const identity_service_1 = require("../identity/identity.service");
|
|
9
13
|
const delegation_rule_entity_1 = require("./delegation-rule.entity");
|
|
10
14
|
const delegation_enums_1 = require("./delegation.enums");
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
/**
|
|
16
|
+
* How long a delegation waits for the host's `resolveInactive`. Resolution runs
|
|
17
|
+
* inside a launch or advance transaction, so a directory that hangs must not
|
|
18
|
+
* hold its connection and locks: past this it counts as a failed lookup.
|
|
19
|
+
*/
|
|
20
|
+
const DIRECTORY_LOOKUP_TIMEOUT_MS = 5_000;
|
|
21
|
+
/** `pending`, or a rejection once `timeoutMs` has passed without an answer. */
|
|
22
|
+
function readWithinTime(pending, timeoutMs) {
|
|
23
|
+
let timeoutId;
|
|
24
|
+
return Promise.race([
|
|
25
|
+
pending,
|
|
26
|
+
new Promise((_resolve, reject) => {
|
|
27
|
+
timeoutId = setTimeout(() => reject(new Error(`no answer within ${timeoutMs} ms`)), timeoutMs);
|
|
28
|
+
}),
|
|
29
|
+
]).finally(() => clearTimeout(timeoutId));
|
|
30
|
+
}
|
|
31
|
+
let DelegationService = DelegationService_1 = class DelegationService {
|
|
32
|
+
constructor(delegationRuleRepository, conditionService, moduleRef) {
|
|
13
33
|
this.delegationRuleRepository = delegationRuleRepository;
|
|
14
34
|
this.conditionService = conditionService;
|
|
35
|
+
this.moduleRef = moduleRef;
|
|
36
|
+
this.logger = new common_1.Logger(DelegationService_1.name);
|
|
15
37
|
}
|
|
16
38
|
async listDelegationRules(options = {}) {
|
|
17
39
|
const isPaginated = typeof options.page === 'number' || typeof options.pageSize === 'number';
|
|
@@ -77,26 +99,35 @@ let DelegationService = class DelegationService {
|
|
|
77
99
|
}));
|
|
78
100
|
}
|
|
79
101
|
async resolveAssignee(originalAssigneeMemberId, context, at = new Date()) {
|
|
80
|
-
|
|
102
|
+
const [resolution] = await this.resolveAssignees([originalAssigneeMemberId], context, at);
|
|
103
|
+
return resolution;
|
|
81
104
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
.
|
|
99
|
-
|
|
105
|
+
/**
|
|
106
|
+
* {@link resolveAssignee} for every member of `originalAssigneeMemberIds`,
|
|
107
|
+
* in the same order. The first hop of every chain shares one
|
|
108
|
+
* `resolveInactive` call, so a node with many candidates asks the host
|
|
109
|
+
* directory once rather than once per candidate; only a hop beyond the
|
|
110
|
+
* first asks again.
|
|
111
|
+
*/
|
|
112
|
+
async resolveAssignees(originalAssigneeMemberIds, context, at = new Date()) {
|
|
113
|
+
const rulesByPrincipal = await Promise.all(originalAssigneeMemberIds.map((memberId) => this.readScopedRules(memberId, context, at)));
|
|
114
|
+
const inactiveAgentIds = await this.readInactiveAgentIds(rulesByPrincipal.flat().map(({ rule }) => rule));
|
|
115
|
+
return Promise.all(originalAssigneeMemberIds.map((memberId, index) => this.walkDelegationChain(memberId, context, at, new Set([memberId]), [], { inactiveAgentIds, rules: rulesByPrincipal[index] })));
|
|
116
|
+
}
|
|
117
|
+
async walkDelegationChain(principalMemberId, context, at, visitedMemberIds, chain, preloadedHop) {
|
|
118
|
+
const currentRules = preloadedHop?.rules ??
|
|
119
|
+
(await this.readScopedRules(principalMemberId, context, at));
|
|
120
|
+
const inactiveAgentIds = preloadedHop?.inactiveAgentIds ??
|
|
121
|
+
(await this.readInactiveAgentIds(currentRules.map(({ rule }) => rule)));
|
|
122
|
+
// A rule whose agent the host has deactivated no longer applies: handing
|
|
123
|
+
// the task to them would leave it with someone who can no longer sign in.
|
|
124
|
+
const applicable = currentRules.find(({ rule }) => !inactiveAgentIds.has(rule.agentMemberId));
|
|
125
|
+
// A scope condition that failed to evaluate fails the walk only when its
|
|
126
|
+
// rule is the one that would apply, as when scopes were evaluated in turn.
|
|
127
|
+
if (applicable?.scopeError) {
|
|
128
|
+
throw applicable.scopeError.error;
|
|
129
|
+
}
|
|
130
|
+
const applicableRule = applicable?.rule;
|
|
100
131
|
if (!applicableRule) {
|
|
101
132
|
return {
|
|
102
133
|
delegationChain: chain,
|
|
@@ -117,6 +148,97 @@ let DelegationService = class DelegationService {
|
|
|
117
148
|
];
|
|
118
149
|
return this.walkDelegationChain(applicableRule.agentMemberId, context, at, new Set(visitedMemberIds).add(applicableRule.agentMemberId), nextChain);
|
|
119
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* The principal's rules in force at `at` that can apply in `context`, the
|
|
153
|
+
* applicable one first. Every scope is evaluated up front so the directory is
|
|
154
|
+
* asked only about agents that matter: a principal whose rules are all out
|
|
155
|
+
* of scope never waits on, or is refused by, the host directory.
|
|
156
|
+
*/
|
|
157
|
+
async readScopedRules(principalMemberId, context, at) {
|
|
158
|
+
const rules = await this.readCurrentRules(principalMemberId, at);
|
|
159
|
+
return rules.flatMap((rule) => {
|
|
160
|
+
try {
|
|
161
|
+
return this.matchesRuleScope(rule, context)
|
|
162
|
+
? [{ rule, scopeError: null }]
|
|
163
|
+
: [];
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
return [{ rule, scopeError: { error } }];
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/** The principal's rules in force at `at`, the applicable one first. */
|
|
171
|
+
async readCurrentRules(principalMemberId, at) {
|
|
172
|
+
return (await this.delegationRuleRepository.find({
|
|
173
|
+
// Higher priority wins, as with manager rules; among equal priorities
|
|
174
|
+
// the rule created first wins. TypeORM sorts by key order, so
|
|
175
|
+
// `priority` has to be the first key — it used to come second and
|
|
176
|
+
// only broke ties between rules created in the same instant.
|
|
177
|
+
order: {
|
|
178
|
+
priority: 'DESC',
|
|
179
|
+
createdAt: 'ASC',
|
|
180
|
+
},
|
|
181
|
+
where: {
|
|
182
|
+
principalMemberId,
|
|
183
|
+
startAt: (0, typeorm_2.LessThanOrEqual)(at),
|
|
184
|
+
status: delegation_enums_1.DelegationRuleStatusEnum.ACTIVE,
|
|
185
|
+
},
|
|
186
|
+
})).filter((rule) => !rule.endAt || rule.endAt.getTime() > at.getTime());
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Agents of `rules` the host reports as deactivated. Empty when there is no
|
|
190
|
+
* rule to check, or no identity module (or no `resolveInactive` on the host
|
|
191
|
+
* resolver): delegation then behaves as it did before this check existed.
|
|
192
|
+
*
|
|
193
|
+
* When the host directory fails to answer, or has not answered within
|
|
194
|
+
* {@link DIRECTORY_LOOKUP_TIMEOUT_MS}, the dispatch is refused with a
|
|
195
|
+
* `ServiceUnavailableException` that names the directory lookup (the agent
|
|
196
|
+
* ids and the host's error go to the server log only): a task is
|
|
197
|
+
* never handed to an agent who could not be confirmed active, nor quietly
|
|
198
|
+
* left with a principal whose rule says it should move. The launch or
|
|
199
|
+
* advance that needed it rolls back and can be retried.
|
|
200
|
+
*/
|
|
201
|
+
async readInactiveAgentIds(rules) {
|
|
202
|
+
const identityService = rules.length ? this.readIdentityService() : null;
|
|
203
|
+
if (!identityService) {
|
|
204
|
+
return new Set();
|
|
205
|
+
}
|
|
206
|
+
const agentMemberIds = [
|
|
207
|
+
...new Set(rules.map((rule) => rule.agentMemberId)),
|
|
208
|
+
];
|
|
209
|
+
return readWithinTime(identityService.resolveInactiveMembers(agentMemberIds), DIRECTORY_LOOKUP_TIMEOUT_MS).then((inactiveMembers) => new Set(inactiveMembers.map((member) => member.memberId)), (error) => {
|
|
210
|
+
// The host's error and the agent ids stay in the server log: the
|
|
211
|
+
// caller is whoever submitted or approved, and the host's message can
|
|
212
|
+
// carry internal details such as the directory's address.
|
|
213
|
+
this.logger.error(`Member directory lookup (resolveInactive) failed for delegation ` +
|
|
214
|
+
`agents ${agentMemberIds.join(', ')}; nothing was dispatched: ` +
|
|
215
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
216
|
+
throw new common_1.ServiceUnavailableException('The member directory lookup (resolveInactive) failed, so it is ' +
|
|
217
|
+
'not known whether the delegation agents are still active; ' +
|
|
218
|
+
'nothing was dispatched. Retry once the directory is reachable.', { cause: error });
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Looked up at call time rather than injected: `IdentityModule` is a dynamic
|
|
223
|
+
* module the root configures with the host's options, so this module cannot
|
|
224
|
+
* import it (same as `WorkflowEngineQueries.readIdentityService`).
|
|
225
|
+
*/
|
|
226
|
+
readIdentityService() {
|
|
227
|
+
if (!this.moduleRef) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
return this.moduleRef.get(identity_service_1.IdentityService, { strict: false });
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
// Only "not registered" means no identity module; anything else is a
|
|
235
|
+
// real failure and must not pass for "no deactivated agent".
|
|
236
|
+
if (error instanceof unknown_element_exception_js_1.UnknownElementException) {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
120
242
|
matchesRuleScope(rule, context) {
|
|
121
243
|
if (rule.scopeType === delegation_enums_1.DelegationScopeTypeEnum.ALL) {
|
|
122
244
|
return true;
|
|
@@ -206,11 +328,13 @@ let DelegationService = class DelegationService {
|
|
|
206
328
|
}
|
|
207
329
|
};
|
|
208
330
|
exports.DelegationService = DelegationService;
|
|
209
|
-
exports.DelegationService = DelegationService = tslib_1.__decorate([
|
|
331
|
+
exports.DelegationService = DelegationService = DelegationService_1 = tslib_1.__decorate([
|
|
210
332
|
(0, common_1.Injectable)(),
|
|
211
333
|
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(delegation_rule_entity_1.DelegationRuleEntity)),
|
|
334
|
+
tslib_1.__param(2, (0, common_1.Optional)()),
|
|
212
335
|
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
213
|
-
condition_service_1.ConditionService
|
|
336
|
+
condition_service_1.ConditionService,
|
|
337
|
+
core_1.ModuleRef])
|
|
214
338
|
], DelegationService);
|
|
215
339
|
// The only roots a delegation condition can read. Saving a rule checks its CEL
|
|
216
340
|
// against this list, and the context below is typed by it, so the two cannot
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delegation.service.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/delegation/delegation.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"delegation.service.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/delegation/delegation.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAQwB;AACxB,uCAAyC;AACzC,8GAAsG;AACtG,6CAAmD;AACnD,qCAAwE;AACxE,sEAAkE;AAClE,mEAA+D;AAK/D,qEAAgE;AAChE,yDAG4B;AA8B5B;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,+EAA+E;AAC/E,SAAS,cAAc,CACrB,OAAwB,EACxB,SAAiB;IAEjB,IAAI,SAAoD,CAAC;IAEzD,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO;QACP,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACtC,SAAS,GAAG,UAAU,CACpB,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC,EACjE,SAAS,CACV,CAAC;QACJ,CAAC,CAAC;KACH,CAAC,CAAC,OAAO,CAAC,GAAS,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,CAAC;AA6BM,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG5B,YAEE,wBAA2E,EAC1D,gBAAkC,EACvC,SAAsC;QAFjC,6BAAwB,GAAxB,wBAAwB,CAAkC;QAC1D,qBAAgB,GAAhB,gBAAgB,CAAkB;QACtB,cAAS,GAAT,SAAS,CAAY;QANnC,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAO1D,CAAC;IAEJ,KAAK,CAAC,mBAAmB,CACvB,UAAsC,EAAE;QAExC,MAAM,WAAW,GACf,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC3E,MAAM,kBAAkB,GAAG,WAAW;YACpC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YACxC,oEAAoE;YACpE,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,MAAM;aAClB;YACD,GAAG,CAAC,kBAAkB;gBACpB,CAAC,CAAC;oBACE,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB;oBACjE,IAAI,EAAE,kBAAkB;iBACzB;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,UAOI,EAAE;QAEN,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;YACzC,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAgC;QAEhC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,IAAI,CAAC,mBAAmB,CAC5B,cAAc,CAAC,iBAAiB,EAChC,cAAc,CAAC,aAAa,CAC7B,CAAC;QAEF,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CACvC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;YACnC,GAAG,cAAc;YACjB,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,2CAAwB,CAAC,MAAM;SACxC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAgC;QAEhC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC7C,GAAG,KAAK;YACR,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;YAChD,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;SACjD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,mBAAmB,CAC5B,cAAc,CAAC,iBAAiB,EAChC,cAAc,CAAC,aAAa,EAC5B,WAAW,CAAC,EAAE,CACf,CAAC;QAEF,4EAA4E;QAC5E,2EAA2E;QAC3E,uEAAuE;QACvE,sEAAsE;QACtE,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CACvC,MAAM,CAAC,MAAM,CAAC,IAAI,6CAAoB,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAU;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EACzB,EAAE,EACF,iBAAiB,GAIlB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,KAAK,2CAAwB,CAAC,OAAO,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CACvC,MAAM,CAAC,MAAM,CAAC,IAAI,6CAAoB,EAAE,EAAE,IAAI,EAAE;YAC9C,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI;YACpD,MAAM,EAAE,2CAAwB,CAAC,OAAO;SACzC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,wBAAgC,EAChC,OAAoC,EACpC,KAAW,IAAI,IAAI,EAAE;QAErB,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC9C,CAAC,wBAAwB,CAAC,EAC1B,OAAO,EACP,EAAE,CACH,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB,CACpB,yBAA4C,EAC5C,OAAoC,EACpC,KAAW,IAAI,IAAI,EAAE;QAErB,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,yBAAyB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACtD,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAChD,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAChB,yBAAyB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAChD,IAAI,CAAC,mBAAmB,CACtB,QAAQ,EACR,OAAO,EACP,EAAE,EACF,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EACnB,EAAE,EACF,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CACrD,CACF,CACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,iBAAyB,EACzB,OAAoC,EACpC,EAAQ,EACR,gBAAqC,EACrC,KAAgC,EAChC,YAAqC;QAErC,MAAM,YAAY,GAChB,YAAY,EAAE,KAAK;YACnB,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GACpB,YAAY,EAAE,gBAAgB;YAC9B,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CACxD,CAAC;QAEF,yEAAyE;QACzE,2EAA2E;QAC3E,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;YAC3B,MAAM,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,CAAC;QAED,MAAM,cAAc,GAAG,UAAU,EAAE,IAAI,CAAC;QAExC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,eAAe,EAAE,KAAK;gBACtB,qBAAqB,EAAE,iBAAiB;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,0BAAiB,CACzB,wCAAwC,cAAc,CAAC,aAAa,EAAE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAA8B;YAC3C,GAAG,KAAK;YACR;gBACE,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,cAAc,CAAC,SAAS;gBAChC,MAAM,EAAE,cAAc,CAAC,EAAE;gBACzB,EAAE,EAAE,cAAc,CAAC,aAAa;aACjC;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,mBAAmB,CAC7B,cAAc,CAAC,aAAa,EAC5B,OAAO,EACP,EAAE,EACF,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,EAC3D,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAC3B,iBAAyB,EACzB,OAAoC,EACpC,EAAQ;QAER,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAEjE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAmC,EAAE;YAC7D,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;oBACzC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;oBAC9B,CAAC,CAAC,EAAE,CAAC;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IAChE,KAAK,CAAC,gBAAgB,CAC5B,iBAAyB,EACzB,EAAQ;QAER,OAAO,CACL,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YACvC,sEAAsE;YACtE,8DAA8D;YAC9D,kEAAkE;YAClE,6DAA6D;YAC7D,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,KAAK;aACjB;YACD,KAAK,EAAE;gBACL,iBAAiB;gBACjB,OAAO,EAAE,IAAA,yBAAe,EAAC,EAAE,CAAC;gBAC5B,MAAM,EAAE,2CAAwB,CAAC,MAAM;aACxC;SACF,CAAC,CACH,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,oBAAoB,CAChC,KAAsC;QAEtC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,cAAc,GAAG;YACrB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACpD,CAAC;QAEF,OAAO,cAAc,CACnB,eAAe,CAAC,sBAAsB,CAAC,cAAc,CAAC,EACtD,2BAA2B,CAC5B,CAAC,IAAI,CACJ,CAAC,eAAe,EAAuB,EAAE,CACvC,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAC3D,CAAC,KAAc,EAAS,EAAE;YACxB,iEAAiE;YACjE,sEAAsE;YACtE,0DAA0D;YAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kEAAkE;gBAChE,UAAU,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B;gBAC/D,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9D,CAAC;YAEF,MAAM,IAAI,oCAA2B,CACnC,iEAAiE;gBAC/D,4DAA4D;gBAC5D,gEAAgE,EAClE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kCAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,6DAA6D;YAC7D,IAAI,KAAK,YAAY,sDAAuB,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,gBAAgB,CACtB,IAA0B,EAC1B,OAAoC;QAEpC,IAAI,IAAI,CAAC,SAAS,KAAK,0CAAuB,CAAC,GAAG,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,0CAAuB,CAAC,aAAa,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAC1C,IAAI,CAAC,iBAAiB,EACtB,gCAAgC,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,EACjE,mBAAmB,IAAI,CAAC,EAAE,oBAAoB,CAC/C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,iBAAyB,EACzB,aAAqB,EACrB,gBAA+B,IAAI;QAEnC,IAAI,iBAAiB,KAAK,aAAa,EAAE,CAAC;YACxC,MAAM,IAAI,0BAAiB,CAAC,uCAAuC,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAC3D,KAAK,EAAE;gBACL,MAAM,EAAE,2CAAwB,CAAC,MAAM;aACxC;SACF,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC;aAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC,CAAC;QAEN,+BAA+B,CAC7B;YACE,GAAG,SAAS;YACZ;gBACE,aAAa;gBACb,iBAAiB;aAClB;SACF,EACD,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,EAAU;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,kBAAkB,CACxB,KAGI;QAUJ,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzD,IAAI,CAAC,iBAAiB,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,IAAI,4BAAmB,CAAC,kCAAkC,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,4BAAmB,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,4BAAmB,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,4BAAmB,CAAC,6BAA6B,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACtD,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAElE,IACE,KAAK,CAAC,SAAS,KAAK,0CAAuB,CAAC,aAAa;YACzD,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAC7B,CAAC;YACD,MAAM,IAAI,4BAAmB,CAC3B,+CAA+C,CAChD,CAAC;QACJ,CAAC;QAED,IACE,KAAK,CAAC,SAAS,KAAK,0CAAuB,CAAC,eAAe;YAC3D,CAAC,iBAAiB,EAClB,CAAC;YACD,MAAM,IAAI,4BAAmB,CAAC,0CAA0C,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACrD,iBAAiB,EACjB,mBAAmB,EACnB,EAAE,sBAAsB,EAAE,sCAAsC,EAAE,CACnE,CAAC;QAEF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,4BAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO;YACL,aAAa;YACb,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI;YAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,GAAG;YAC/B,iBAAiB;YACjB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,KAAK;YACzD,iBAAiB,EACf,KAAK,CAAC,SAAS,KAAK,0CAAuB,CAAC,eAAe;gBACzD,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,IAAI;YACV,gBAAgB,EACd,KAAK,CAAC,SAAS,KAAK,0CAAuB,CAAC,aAAa;gBACvD,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO;YACP,KAAK;SACN,CAAC;IACJ,CAAC;CACF,CAAA;AAlfY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAKR,mBAAA,IAAA,0BAAgB,EAAC,6CAAoB,CAAC,CAAA;IAGtC,mBAAA,IAAA,iBAAQ,GAAE,CAAA;6CAFgC,oBAAU;QAClB,oCAAgB;QACV,gBAAS;GAPzC,iBAAiB,CAkf7B;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,qBAAqB;AACrB,MAAM,sCAAsC,GAAG;IAC7C,KAAK;IACL,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;CACH,CAAC;AAEX,SAAS,gCAAgC,CACvC,iBAAyB,EACzB,OAAoC;IAIpC,OAAO;QACL,GAAG,EAAE;YACH,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC9B;QACD,IAAI,EAAE,OAAO,CAAC,QAAQ;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE;YACT,GAAG,OAAO,CAAC,yBAAyB;YACpC,QAAQ,EAAE,OAAO,CAAC,iBAAiB;SACpC;QACD,QAAQ,EAAE;YACR,EAAE,EAAE,OAAO,CAAC,UAAU;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB;QACD,SAAS,EAAE;YACT,QAAQ,EAAE,iBAAiB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,KAGI,EACJ,gBAAwB;IAExB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CACxB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACf,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,aAAa;KACnB,CAAC,EACJ,IAAI,GAAG,EAAE,CACV,CAAC;IAEF,mBAAmB,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,KAA6C,EAC7C,IAAyB;IAEzB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,0BAAiB,CACzB,wCAAwC,QAAQ,EAAE,CACnD,CAAC;IACJ,CAAC;IAED,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CACnD,mBAAmB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,EACjC,aAAa,EACb,eAAe,GAAG,KAAK,EACvB,iBAAiB,EACjB,SAAS,EACT,MAAM,GAQP;IACC,OAAO;QACL,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,EAAE,MAAM,EAAE;YACZ,CAAC,CAAC,eAAe;gBACf,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,MAAM,EAAE,2CAAwB,CAAC,MAAM,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -172,12 +172,24 @@ function lintFieldDefinition(field, index, scope) {
|
|
|
172
172
|
...lintFieldTypeSpecifics(field, type, path, scope),
|
|
173
173
|
];
|
|
174
174
|
}
|
|
175
|
-
/**
|
|
175
|
+
/**
|
|
176
|
+
* `displayAs`, `pattern` and `patternErrorMessage` are text-field options;
|
|
177
|
+
* every other type must not carry them, or a format the designer set would be
|
|
178
|
+
* silently ignored.
|
|
179
|
+
*/
|
|
176
180
|
function lintDisplayAsTarget(field, type, path) {
|
|
177
|
-
return
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
+
return lintTextOnlyKeys(field, type, path, [
|
|
182
|
+
'displayAs',
|
|
183
|
+
'pattern',
|
|
184
|
+
'patternErrorMessage',
|
|
185
|
+
]);
|
|
186
|
+
}
|
|
187
|
+
function lintTextOnlyKeys(field, type, path, keys) {
|
|
188
|
+
return TEXT_FIELD_TYPES.has(type)
|
|
189
|
+
? []
|
|
190
|
+
: keys
|
|
191
|
+
.filter((key) => Object.prototype.hasOwnProperty.call(field, key))
|
|
192
|
+
.map((key) => `${path}.${key} 只能用在文字欄位`);
|
|
181
193
|
}
|
|
182
194
|
function lintFieldTypeSpecifics(field, type, path, scope) {
|
|
183
195
|
if (TEXT_FIELD_TYPES.has(type)) {
|
|
@@ -270,9 +282,53 @@ function lintTextField(field, path) {
|
|
|
270
282
|
...maxLengthErrors,
|
|
271
283
|
...lengthRangeErrors,
|
|
272
284
|
...displayAsErrors,
|
|
285
|
+
...lintTextFieldPattern(field, path),
|
|
273
286
|
...lintOptionalDefaultValue(field.defaultValue, path, (value) => typeof value === 'string' || value === null),
|
|
274
287
|
];
|
|
275
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* The pattern is compiled on every submit, server side included, so it has to
|
|
291
|
+
* compile now — a broken one would fail every value — and stay short enough to
|
|
292
|
+
* read. The engine runs it on whatever a filler sends, so a pattern that
|
|
293
|
+
* repeats a group is refused too: that is the shape whose backtracking can
|
|
294
|
+
* grow exponentially with the value and stall the server (see
|
|
295
|
+
* `hasRepeatedTextFieldPatternGroup`). What is left grows at most
|
|
296
|
+
* polynomially with the value, with a degree that grows with the pattern, and
|
|
297
|
+
* the engine bounds it with one time budget shared by every pattern of a
|
|
298
|
+
* submit, resubmit or fill.
|
|
299
|
+
*/
|
|
300
|
+
function lintTextFieldPattern(field, path) {
|
|
301
|
+
const hasPattern = Object.prototype.hasOwnProperty.call(field, 'pattern');
|
|
302
|
+
const hasMessage = Object.prototype.hasOwnProperty.call(field, 'patternErrorMessage');
|
|
303
|
+
const patternErrors = !hasPattern
|
|
304
|
+
? []
|
|
305
|
+
: typeof field.pattern !== 'string' || field.pattern.trim() === ''
|
|
306
|
+
? [`${path}.pattern must be a non-empty string`]
|
|
307
|
+
: field.pattern.length > form_1.TEXT_FIELD_PATTERN_MAX_LENGTH
|
|
308
|
+
? [
|
|
309
|
+
`${path}.pattern must be at most ${form_1.TEXT_FIELD_PATTERN_MAX_LENGTH} characters`,
|
|
310
|
+
]
|
|
311
|
+
: (0, form_1.compileTextFieldPattern)(field.pattern) === null
|
|
312
|
+
? [`${path}.pattern is not a valid regular expression`]
|
|
313
|
+
: (0, form_1.hasRepeatedTextFieldPatternGroup)(field.pattern)
|
|
314
|
+
? [
|
|
315
|
+
`${path}.pattern must not repeat a group, which can stall the server`,
|
|
316
|
+
]
|
|
317
|
+
: [];
|
|
318
|
+
const messageErrors = !hasMessage
|
|
319
|
+
? []
|
|
320
|
+
: !hasPattern
|
|
321
|
+
? [`${path}.patternErrorMessage requires ${path}.pattern`]
|
|
322
|
+
: typeof field.patternErrorMessage !== 'string'
|
|
323
|
+
? [`${path}.patternErrorMessage must be a string`]
|
|
324
|
+
: field.patternErrorMessage.length >
|
|
325
|
+
form_1.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH
|
|
326
|
+
? [
|
|
327
|
+
`${path}.patternErrorMessage must be at most ${form_1.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH} characters`,
|
|
328
|
+
]
|
|
329
|
+
: [];
|
|
330
|
+
return [...patternErrors, ...messageErrors];
|
|
331
|
+
}
|
|
276
332
|
function lintNumberField(field, path) {
|
|
277
333
|
const minimumErrors = lintOptionalNumber(field.minimum, `${path}.minimum`);
|
|
278
334
|
const maximumErrors = lintOptionalNumber(field.maximum, `${path}.maximum`);
|
|
@@ -527,7 +583,11 @@ function lintTableColumn(column, path, scope) {
|
|
|
527
583
|
if (!isSupportedFieldType(type) || !(0, form_1.isTableColumnFieldType)(type)) {
|
|
528
584
|
return basicErrors;
|
|
529
585
|
}
|
|
530
|
-
return [
|
|
586
|
+
return [
|
|
587
|
+
...basicErrors,
|
|
588
|
+
...lintTextOnlyKeys(column, type, path, ['pattern', 'patternErrorMessage']),
|
|
589
|
+
...lintFieldTypeSpecifics(column, type, path, scope),
|
|
590
|
+
];
|
|
531
591
|
}
|
|
532
592
|
function lintTableColumnType(type, path) {
|
|
533
593
|
if (type === 'table') {
|