@memberjunction/record-set-processor 5.42.0 → 5.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/RecordProcessExecutor.d.ts +21 -4
- package/dist/RecordProcessExecutor.d.ts.map +1 -1
- package/dist/RecordProcessExecutor.js +41 -6
- package/dist/RecordProcessExecutor.js.map +1 -1
- package/dist/RecordSetProcessor.d.ts.map +1 -1
- package/dist/RecordSetProcessor.js +1 -0
- package/dist/RecordSetProcessor.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/operations/RecordProcessControlOperations.d.ts +12 -40
- package/dist/operations/RecordProcessControlOperations.d.ts.map +1 -1
- package/dist/operations/RecordProcessControlOperations.js +40 -40
- package/dist/operations/RecordProcessControlOperations.js.map +1 -1
- package/dist/operations/RecordProcessGetRunStatusOperation.d.ts +4 -19
- package/dist/operations/RecordProcessGetRunStatusOperation.d.ts.map +1 -1
- package/dist/operations/RecordProcessGetRunStatusOperation.js +8 -10
- package/dist/operations/RecordProcessGetRunStatusOperation.js.map +1 -1
- package/dist/processors/FieldRulesProcessor.d.ts +44 -0
- package/dist/processors/FieldRulesProcessor.d.ts.map +1 -0
- package/dist/processors/FieldRulesProcessor.js +130 -0
- package/dist/processors/FieldRulesProcessor.js.map +1 -0
- package/dist/trackers/GenericProcessRunTracker.d.ts +7 -0
- package/dist/trackers/GenericProcessRunTracker.d.ts.map +1 -1
- package/dist/trackers/GenericProcessRunTracker.js +19 -6
- package/dist/trackers/GenericProcessRunTracker.js.map +1 -1
- package/package.json +13 -11
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
8
8
|
import { MJRecordProcessEntity } from '@memberjunction/core-entities';
|
|
9
9
|
import { IRecordProcessor, IRecordSetSource, ProcessRunResult, ProgressInfo, TriggeredByValue } from '@memberjunction/record-set-processor-base';
|
|
10
|
+
import { type RecordProcessScopeOverride } from '@memberjunction/core-entities';
|
|
10
11
|
/** Options for executing a Record Process. */
|
|
11
12
|
export interface RunRecordProcessOptions {
|
|
12
13
|
/** The acting user. */
|
|
@@ -17,6 +18,16 @@ export interface RunRecordProcessOptions {
|
|
|
17
18
|
triggeredBy?: TriggeredByValue;
|
|
18
19
|
/** Process a single record (the on-change / on-demand single-record case) instead of the scope. */
|
|
19
20
|
singleRecordID?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Runtime scope override (selected rows / a view / a list / a filter), used instead of the stored
|
|
23
|
+
* Scope. This is how a grid/list UI runs a process against exactly what the user is looking at.
|
|
24
|
+
*/
|
|
25
|
+
scope?: RecordProcessScopeOverride;
|
|
26
|
+
/**
|
|
27
|
+
* Compute-only: for work types that support it (currently `FieldRules`), produce the per-record diff
|
|
28
|
+
* WITHOUT writing. Powers the preview step of the bulk-update UX.
|
|
29
|
+
*/
|
|
30
|
+
dryRun?: boolean;
|
|
20
31
|
/** FK to the owning `ScheduledJobRun` when launched by the scheduler (links the Process Run back). */
|
|
21
32
|
scheduledJobRunID?: string;
|
|
22
33
|
/** Progress callback. */
|
|
@@ -28,9 +39,15 @@ export declare class RecordProcessExecutor {
|
|
|
28
39
|
RunByID(recordProcessID: string, options: RunRecordProcessOptions): Promise<ProcessRunResult>;
|
|
29
40
|
/** Runs an already-loaded Record Process. */
|
|
30
41
|
Run(rp: MJRecordProcessEntity, options: RunRecordProcessOptions): Promise<ProcessRunResult>;
|
|
31
|
-
/** Builds the record-set source from the process's Scope
|
|
32
|
-
buildSource(rp: MJRecordProcessEntity, provider: IMetadataProvider, singleRecordID?: string): IRecordSetSource;
|
|
33
|
-
/**
|
|
34
|
-
|
|
42
|
+
/** Builds the record-set source from a single-record override, a runtime scope override, or the process's stored Scope. */
|
|
43
|
+
buildSource(rp: MJRecordProcessEntity, provider: IMetadataProvider, singleRecordID?: string, scope?: RecordProcessScopeOverride): IRecordSetSource;
|
|
44
|
+
/** Resolves a runtime scope override (UI invocation: selection / view / list / filter) to a source. */
|
|
45
|
+
private buildSourceFromScope;
|
|
46
|
+
/**
|
|
47
|
+
* Builds the processor from the process's Work. `FieldRules` reads its rule set from `Configuration`
|
|
48
|
+
* and writes itself (honoring `dryRun`); the other work types build a base processor wrapped with
|
|
49
|
+
* output-mapping write-back when configured.
|
|
50
|
+
*/
|
|
51
|
+
buildProcessor(rp: MJRecordProcessEntity, dryRun?: boolean): IRecordProcessor;
|
|
35
52
|
}
|
|
36
53
|
//# sourceMappingURL=RecordProcessExecutor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessExecutor.d.ts","sourceRoot":"","sources":["../src/RecordProcessExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAGH,gBAAgB,EAChB,gBAAgB,EAEhB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAEnB,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"RecordProcessExecutor.d.ts","sourceRoot":"","sources":["../src/RecordProcessExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAGH,gBAAgB,EAChB,gBAAgB,EAEhB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAEnB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAShF,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACpC,uBAAuB;IACvB,WAAW,EAAE,QAAQ,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,mDAAmD;IACnD,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mGAAmG;IACnG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CACjD;AAED,kFAAkF;AAClF,qBAAa,qBAAqB;IAC9B,kDAAkD;IACrC,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU1G,6CAA6C;IAChC,GAAG,CAAC,EAAE,EAAE,qBAAqB,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBxG,2HAA2H;IACpH,WAAW,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,0BAA0B,GAAG,gBAAgB;IAgCzJ,uGAAuG;IACvG,OAAO,CAAC,oBAAoB;IAkB5B;;;;OAIG;IACI,cAAc,CAAC,EAAE,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB;CAqCvF"}
|
|
@@ -11,6 +11,7 @@ import { RecordSetProcessor } from './RecordSetProcessor.js';
|
|
|
11
11
|
import { ActionRecordProcessor } from './processors/ActionRecordProcessor.js';
|
|
12
12
|
import { AgentRecordProcessor } from './processors/AgentRecordProcessor.js';
|
|
13
13
|
import { InferProcessor } from './processors/InferProcessor.js';
|
|
14
|
+
import { FieldRulesProcessor } from './processors/FieldRulesProcessor.js';
|
|
14
15
|
import { WriteBackProcessor } from './processors/WriteBackProcessor.js';
|
|
15
16
|
/** Builds and runs a RecordSetProcessor pass from a Record Process definition. */
|
|
16
17
|
export class RecordProcessExecutor {
|
|
@@ -28,10 +29,11 @@ export class RecordProcessExecutor {
|
|
|
28
29
|
async Run(rp, options) {
|
|
29
30
|
const provider = options.provider ?? Metadata.Provider;
|
|
30
31
|
return RecordSetProcessor.Instance.Process({
|
|
31
|
-
source: this.buildSource(rp, provider, options.singleRecordID),
|
|
32
|
-
processor: this.buildProcessor(rp),
|
|
32
|
+
source: this.buildSource(rp, provider, options.singleRecordID, options.scope),
|
|
33
|
+
processor: this.buildProcessor(rp, options.dryRun),
|
|
33
34
|
contextUser: options.contextUser,
|
|
34
35
|
provider,
|
|
36
|
+
dryRun: options.dryRun,
|
|
35
37
|
recordProcessID: rp.ID,
|
|
36
38
|
scheduledJobRunID: options.scheduledJobRunID,
|
|
37
39
|
entityID: rp.EntityID,
|
|
@@ -42,11 +44,14 @@ export class RecordProcessExecutor {
|
|
|
42
44
|
configuration: { recordProcessName: rp.Name, workType: rp.WorkType, scopeType: rp.ScopeType },
|
|
43
45
|
});
|
|
44
46
|
}
|
|
45
|
-
/** Builds the record-set source from the process's Scope
|
|
46
|
-
buildSource(rp, provider, singleRecordID) {
|
|
47
|
+
/** Builds the record-set source from a single-record override, a runtime scope override, or the process's stored Scope. */
|
|
48
|
+
buildSource(rp, provider, singleRecordID, scope) {
|
|
47
49
|
if (singleRecordID) {
|
|
48
50
|
return new ArraySource([{ EntityID: rp.EntityID, RecordID: singleRecordID }], rp.EntityID, 'SingleRecord');
|
|
49
51
|
}
|
|
52
|
+
if (scope) {
|
|
53
|
+
return this.buildSourceFromScope(rp, provider, scope);
|
|
54
|
+
}
|
|
50
55
|
switch (rp.ScopeType) {
|
|
51
56
|
case 'View':
|
|
52
57
|
if (!rp.ScopeViewID) {
|
|
@@ -71,8 +76,38 @@ export class RecordProcessExecutor {
|
|
|
71
76
|
throw new Error(`Record Process '${rp.Name}': unsupported ScopeType '${rp.ScopeType}'`);
|
|
72
77
|
}
|
|
73
78
|
}
|
|
74
|
-
/**
|
|
75
|
-
|
|
79
|
+
/** Resolves a runtime scope override (UI invocation: selection / view / list / filter) to a source. */
|
|
80
|
+
buildSourceFromScope(rp, provider, scope) {
|
|
81
|
+
switch (scope.Kind) {
|
|
82
|
+
case 'records':
|
|
83
|
+
return new ArraySource(scope.RecordIDs.map((id) => ({ EntityID: rp.EntityID, RecordID: id })), rp.EntityID, 'Array');
|
|
84
|
+
case 'view':
|
|
85
|
+
return new ViewSource(scope.ViewID);
|
|
86
|
+
case 'list':
|
|
87
|
+
return new ListSource(scope.ListID);
|
|
88
|
+
case 'filter': {
|
|
89
|
+
const entity = provider.EntityByID(rp.EntityID);
|
|
90
|
+
if (!entity) {
|
|
91
|
+
throw new Error(`Record Process '${rp.Name}': entity '${rp.EntityID}' not found in metadata`);
|
|
92
|
+
}
|
|
93
|
+
return new FilterSource(entity.Name, scope.Filter);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Builds the processor from the process's Work. `FieldRules` reads its rule set from `Configuration`
|
|
99
|
+
* and writes itself (honoring `dryRun`); the other work types build a base processor wrapped with
|
|
100
|
+
* output-mapping write-back when configured.
|
|
101
|
+
*/
|
|
102
|
+
buildProcessor(rp, dryRun) {
|
|
103
|
+
if (rp.WorkType === 'FieldRules') {
|
|
104
|
+
const ruleSet = rp.Configuration ? SafeJSONParse(rp.Configuration) : undefined;
|
|
105
|
+
if (!ruleSet || !Array.isArray(ruleSet.Rules)) {
|
|
106
|
+
throw new Error(`Record Process '${rp.Name}': WorkType=FieldRules requires a FieldRuleSet (with a Rules array) in Configuration`);
|
|
107
|
+
}
|
|
108
|
+
// FieldRules owns its own write / dry-run preview — no output-mapping write-back wrapper.
|
|
109
|
+
return new FieldRulesProcessor({ RuleSet: ruleSet, DryRun: dryRun });
|
|
110
|
+
}
|
|
76
111
|
const inputMapping = rp.InputMapping ? SafeJSONParse(rp.InputMapping) : undefined;
|
|
77
112
|
let base;
|
|
78
113
|
if (rp.WorkType === 'Action') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessExecutor.js","sourceRoot":"","sources":["../src/RecordProcessExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"RecordProcessExecutor.js","sourceRoot":"","sources":["../src/RecordProcessExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordSetProcessor.d.ts","sourceRoot":"","sources":["../src/RecordSetProcessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAIH,gBAAgB,EAKhB,uBAAuB,EAG1B,MAAM,2CAA2C,CAAC;AASnD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACrE,2CAA2C;IAC3C,WAAkB,QAAQ,IAAI,kBAAkB,CAE/C;IAED;;;;;;OAMG;IACU,OAAO,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"RecordSetProcessor.d.ts","sourceRoot":"","sources":["../src/RecordSetProcessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAIH,gBAAgB,EAKhB,uBAAuB,EAG1B,MAAM,2CAA2C,CAAC;AASnD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACrE,2CAA2C;IAC3C,WAAkB,QAAQ,IAAI,kBAAkB,CAE/C;IAED;;;;;;OAMG;IACU,OAAO,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmEjF,wDAAwD;YAC1C,YAAY;IAoE1B,mFAAmF;YACrE,YAAY;IA6B1B,yEAAyE;YAC3D,kBAAkB;IAiBhC,oFAAoF;YACtE,cAAc;IAa5B,OAAO,CAAC,KAAK;CAGhB"}
|
|
@@ -53,6 +53,7 @@ export class RecordSetProcessor extends BaseSingleton {
|
|
|
53
53
|
SourceFilter: descriptor.SourceFilter,
|
|
54
54
|
BatchSize: batchSize,
|
|
55
55
|
Configuration: options.configuration,
|
|
56
|
+
DryRun: options.dryRun,
|
|
56
57
|
};
|
|
57
58
|
const handle = await tracker.BeginRun(meta, contextUser, provider);
|
|
58
59
|
const counts = { Processed: 0, Success: 0, Error: 0, Skipped: 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordSetProcessor.js","sourceRoot":"","sources":["../src/RecordSetProcessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAqB,QAAQ,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAcvF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,gDAAgD;AAChD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,8DAA8D;AAC9D,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAiC;IACrE,2CAA2C;IACpC,MAAM,KAAK,QAAQ;QACtB,OAAO,KAAK,CAAC,WAAW,EAAsB,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAAC,OAAgC;QACjD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACnD,MAAM,QAAQ,GAAsB,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QAC1E,MAAM,OAAO,GAAuB,OAAO,CAAC,OAAO,IAAI,IAAI,wBAAwB,EAAE,CAAC;QACtF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,IAAI,uBAAuB,CAAC;QAChF,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS;YACjC,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YACjI,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAmB;YACzB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;YACjD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,QAAQ;YAC5C,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"RecordSetProcessor.js","sourceRoot":"","sources":["../src/RecordSetProcessor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export * from './processors/ActionRecordProcessor.js';
|
|
|
13
13
|
export * from './processors/AgentRecordProcessor.js';
|
|
14
14
|
export * from './processors/WriteBackProcessor.js';
|
|
15
15
|
export * from './processors/InferProcessor.js';
|
|
16
|
+
export * from './processors/FieldRulesProcessor.js';
|
|
16
17
|
export * from './trackers/NoOpTracker.js';
|
|
17
18
|
export * from './trackers/GenericProcessRunTracker.js';
|
|
18
19
|
export * from './operations/RecordProcessGetRunStatusOperation.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export * from './processors/ActionRecordProcessor.js';
|
|
|
13
13
|
export * from './processors/AgentRecordProcessor.js';
|
|
14
14
|
export * from './processors/WriteBackProcessor.js';
|
|
15
15
|
export * from './processors/InferProcessor.js';
|
|
16
|
+
export * from './processors/FieldRulesProcessor.js';
|
|
16
17
|
export * from './trackers/NoOpTracker.js';
|
|
17
18
|
export * from './trackers/GenericProcessRunTracker.js';
|
|
18
19
|
export * from './operations/RecordProcessGetRunStatusOperation.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC"}
|
|
@@ -4,56 +4,28 @@
|
|
|
4
4
|
* the facade's only on-demand/control path (no bespoke resolvers).
|
|
5
5
|
* @module @memberjunction/record-set-processor
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
export interface RecordProcessRunNowInput {
|
|
10
|
-
recordProcessID: string;
|
|
11
|
-
/** When set, processes just this single record instead of the configured scope. */
|
|
12
|
-
singleRecordID?: string;
|
|
13
|
-
}
|
|
14
|
-
/** Output of `RecordProcess.RunNow`. */
|
|
15
|
-
export interface RecordProcessRunNowOutput {
|
|
16
|
-
processRunID?: string;
|
|
17
|
-
status: string;
|
|
18
|
-
processed: number;
|
|
19
|
-
success: number;
|
|
20
|
-
error: number;
|
|
21
|
-
skipped: number;
|
|
22
|
-
}
|
|
7
|
+
import { IMetadataProvider, RemoteOpServerContext, UserInfo } from '@memberjunction/core';
|
|
8
|
+
import { RecordProcessRunNowOperation, RecordProcessPauseRunOperation, RecordProcessCancelRunOperation, RecordProcessResumeRunOperation, type RecordProcessRunNowInput, type RecordProcessRunNowOutput, type ProcessRunControlInput, type ProcessRunControlOutput } from '@memberjunction/core-entities';
|
|
23
9
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
10
|
+
* Server implementation of `RecordProcess.RunNow` — runs a Record Process on demand, honoring an optional
|
|
11
|
+
* dry-run (compute-only preview) and runtime scope override (the rows a UI selected). Extends the
|
|
12
|
+
* client-safe {@link RecordProcessRunNowOperation} base in `-base` (which carries the key + typed I/O) and
|
|
13
|
+
* supplies the server body; registered last so it wins server-side dispatch. Marked `LongRunning` (the
|
|
14
|
+
* handle is a `ProcessRunID`).
|
|
26
15
|
*/
|
|
27
|
-
export declare class
|
|
28
|
-
|
|
29
|
-
readonly RequiredScope = "recordprocess:execute";
|
|
30
|
-
readonly ExecutionMode: "LongRunning";
|
|
31
|
-
protected InternalExecute(input: RecordProcessRunNowInput, provider: IMetadataProvider, user: UserInfo): Promise<RecordProcessRunNowOutput>;
|
|
32
|
-
}
|
|
33
|
-
/** Input for the pause/resume/cancel control operations. */
|
|
34
|
-
export interface ProcessRunControlInput {
|
|
35
|
-
processRunID: string;
|
|
36
|
-
}
|
|
37
|
-
/** Output of the control operations. */
|
|
38
|
-
export interface ProcessRunControlOutput {
|
|
39
|
-
status: string;
|
|
16
|
+
export declare class RecordProcessRunNowServerOperation extends RecordProcessRunNowOperation {
|
|
17
|
+
protected InternalExecute(input: RecordProcessRunNowInput, provider: IMetadataProvider, user: UserInfo, context: RemoteOpServerContext): Promise<RecordProcessRunNowOutput>;
|
|
40
18
|
}
|
|
41
19
|
/** Requests a graceful pause of a running process (honored at the next checkpoint). */
|
|
42
|
-
export declare class
|
|
43
|
-
readonly OperationKey = "RecordProcess.PauseRun";
|
|
44
|
-
readonly RequiredScope = "recordprocess:execute";
|
|
20
|
+
export declare class RecordProcessPauseRunServerOperation extends RecordProcessPauseRunOperation {
|
|
45
21
|
protected InternalExecute(input: ProcessRunControlInput, provider: IMetadataProvider, user: UserInfo): Promise<ProcessRunControlOutput>;
|
|
46
22
|
}
|
|
47
23
|
/** Requests cancellation of a running process (honored at the next checkpoint). */
|
|
48
|
-
export declare class
|
|
49
|
-
readonly OperationKey = "RecordProcess.CancelRun";
|
|
50
|
-
readonly RequiredScope = "recordprocess:execute";
|
|
24
|
+
export declare class RecordProcessCancelRunServerOperation extends RecordProcessCancelRunOperation {
|
|
51
25
|
protected InternalExecute(input: ProcessRunControlInput, provider: IMetadataProvider, user: UserInfo): Promise<ProcessRunControlOutput>;
|
|
52
26
|
}
|
|
53
27
|
/** Clears a paused run's cancellation flag so it can be resumed by a subsequent run. */
|
|
54
|
-
export declare class
|
|
55
|
-
readonly OperationKey = "RecordProcess.ResumeRun";
|
|
56
|
-
readonly RequiredScope = "recordprocess:execute";
|
|
28
|
+
export declare class RecordProcessResumeRunServerOperation extends RecordProcessResumeRunOperation {
|
|
57
29
|
protected InternalExecute(input: ProcessRunControlInput, provider: IMetadataProvider, user: UserInfo): Promise<ProcessRunControlOutput>;
|
|
58
30
|
}
|
|
59
31
|
/** Tree-shaking anchor — call from a server bootstrap to retain these operation registrations. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessControlOperations.d.ts","sourceRoot":"","sources":["../../src/operations/RecordProcessControlOperations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"RecordProcessControlOperations.d.ts","sourceRoot":"","sources":["../../src/operations/RecordProcessControlOperations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAA0B,iBAAiB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAElH,OAAO,EACH,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,+BAA+B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC/B,MAAM,+BAA+B,CAAC;AAGvC;;;;;;GAMG;AACH,qBACa,kCAAmC,SAAQ,4BAA4B;cAChE,eAAe,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAiCpL;AA0BD,uFAAuF;AACvF,qBACa,oCAAqC,SAAQ,8BAA8B;cACpE,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAGhJ;AAED,mFAAmF;AACnF,qBACa,qCAAsC,SAAQ,+BAA+B;cACtE,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAGhJ;AAED,wFAAwF;AACxF,qBACa,qCAAsC,SAAQ,+BAA+B;cACtE,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAGhJ;AAED,kGAAkG;AAClG,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD"}
|
|
@@ -12,19 +12,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
12
12
|
};
|
|
13
13
|
import { RegisterClass } from '@memberjunction/global';
|
|
14
14
|
import { BaseRemotableOperation } from '@memberjunction/core';
|
|
15
|
+
import { RecordProcessRunNowOperation, RecordProcessPauseRunOperation, RecordProcessCancelRunOperation, RecordProcessResumeRunOperation, } from '@memberjunction/core-entities';
|
|
15
16
|
import { RecordProcessExecutor } from '../RecordProcessExecutor.js';
|
|
16
17
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* Server implementation of `RecordProcess.RunNow` — runs a Record Process on demand, honoring an optional
|
|
19
|
+
* dry-run (compute-only preview) and runtime scope override (the rows a UI selected). Extends the
|
|
20
|
+
* client-safe {@link RecordProcessRunNowOperation} base in `-base` (which carries the key + typed I/O) and
|
|
21
|
+
* supplies the server body; registered last so it wins server-side dispatch. Marked `LongRunning` (the
|
|
22
|
+
* handle is a `ProcessRunID`).
|
|
19
23
|
*/
|
|
20
|
-
let
|
|
21
|
-
|
|
22
|
-
super(...arguments);
|
|
23
|
-
this.OperationKey = 'RecordProcess.RunNow';
|
|
24
|
-
this.RequiredScope = 'recordprocess:execute';
|
|
25
|
-
this.ExecutionMode = 'LongRunning';
|
|
26
|
-
}
|
|
27
|
-
async InternalExecute(input, provider, user) {
|
|
24
|
+
let RecordProcessRunNowServerOperation = class RecordProcessRunNowServerOperation extends RecordProcessRunNowOperation {
|
|
25
|
+
async InternalExecute(input, provider, user, context) {
|
|
28
26
|
if (!input?.recordProcessID) {
|
|
29
27
|
throw new Error('recordProcessID is required');
|
|
30
28
|
}
|
|
@@ -33,6 +31,18 @@ let RecordProcessRunNowOperation = class RecordProcessRunNowOperation extends Ba
|
|
|
33
31
|
provider,
|
|
34
32
|
triggeredBy: 'OnDemand',
|
|
35
33
|
singleRecordID: input.singleRecordID,
|
|
34
|
+
dryRun: input.dryRun,
|
|
35
|
+
scope: input.scope,
|
|
36
|
+
// RO-3: forward the executor's per-batch progress as typed RemoteOpProgress, so an `attached`
|
|
37
|
+
// caller's onProgress (and, over the wire, the progress channel) sees live run progress.
|
|
38
|
+
onProgress: (p) => context.emitProgress({
|
|
39
|
+
OperationKey: this.OperationKey,
|
|
40
|
+
Processed: p.Processed,
|
|
41
|
+
Total: p.Total ?? undefined,
|
|
42
|
+
Status: 'Running',
|
|
43
|
+
Message: `Processed ${p.Processed}${p.Total != null ? ` of ${p.Total}` : ''} record(s)`,
|
|
44
|
+
Payload: { Success: p.Success, Error: p.Error, Skipped: p.Skipped, CurrentRecordID: p.CurrentRecordID },
|
|
45
|
+
}),
|
|
36
46
|
});
|
|
37
47
|
return {
|
|
38
48
|
processRunID: result.ProcessRunID,
|
|
@@ -41,13 +51,16 @@ let RecordProcessRunNowOperation = class RecordProcessRunNowOperation extends Ba
|
|
|
41
51
|
success: result.Success,
|
|
42
52
|
error: result.Error,
|
|
43
53
|
skipped: result.Skipped,
|
|
54
|
+
errorMessage: result.ErrorMessage,
|
|
44
55
|
};
|
|
45
56
|
}
|
|
46
57
|
};
|
|
47
|
-
|
|
58
|
+
RecordProcessRunNowServerOperation = __decorate([
|
|
48
59
|
RegisterClass(BaseRemotableOperation, 'RecordProcess.RunNow')
|
|
49
|
-
],
|
|
50
|
-
export {
|
|
60
|
+
], RecordProcessRunNowServerOperation);
|
|
61
|
+
export { RecordProcessRunNowServerOperation };
|
|
62
|
+
// ProcessRunControlInput / ProcessRunControlOutput are now CodeGen-emitted into @memberjunction/core-entities
|
|
63
|
+
// (generated/remote_operations.ts) from the MJ: Remote Operations rows, and imported above.
|
|
51
64
|
/** Sets `CancellationRequested` on a run to the given value, returning the run's status. */
|
|
52
65
|
async function setCancellation(processRunID, value, provider, user) {
|
|
53
66
|
if (!processRunID) {
|
|
@@ -65,51 +78,38 @@ async function setCancellation(processRunID, value, provider, user) {
|
|
|
65
78
|
}
|
|
66
79
|
return { status: run.Status };
|
|
67
80
|
}
|
|
81
|
+
// Each server operation extends its CodeGen-emitted base (which carries OperationKey / ExecutionMode /
|
|
82
|
+
// RequiredScope / RequiresSystemUser from metadata) and supplies only the InternalExecute body + @RegisterClass.
|
|
68
83
|
/** Requests a graceful pause of a running process (honored at the next checkpoint). */
|
|
69
|
-
let
|
|
70
|
-
constructor() {
|
|
71
|
-
super(...arguments);
|
|
72
|
-
this.OperationKey = 'RecordProcess.PauseRun';
|
|
73
|
-
this.RequiredScope = 'recordprocess:execute';
|
|
74
|
-
}
|
|
84
|
+
let RecordProcessPauseRunServerOperation = class RecordProcessPauseRunServerOperation extends RecordProcessPauseRunOperation {
|
|
75
85
|
async InternalExecute(input, provider, user) {
|
|
76
86
|
return setCancellation(input.processRunID, true, provider, user);
|
|
77
87
|
}
|
|
78
88
|
};
|
|
79
|
-
|
|
89
|
+
RecordProcessPauseRunServerOperation = __decorate([
|
|
80
90
|
RegisterClass(BaseRemotableOperation, 'RecordProcess.PauseRun')
|
|
81
|
-
],
|
|
82
|
-
export {
|
|
91
|
+
], RecordProcessPauseRunServerOperation);
|
|
92
|
+
export { RecordProcessPauseRunServerOperation };
|
|
83
93
|
/** Requests cancellation of a running process (honored at the next checkpoint). */
|
|
84
|
-
let
|
|
85
|
-
constructor() {
|
|
86
|
-
super(...arguments);
|
|
87
|
-
this.OperationKey = 'RecordProcess.CancelRun';
|
|
88
|
-
this.RequiredScope = 'recordprocess:execute';
|
|
89
|
-
}
|
|
94
|
+
let RecordProcessCancelRunServerOperation = class RecordProcessCancelRunServerOperation extends RecordProcessCancelRunOperation {
|
|
90
95
|
async InternalExecute(input, provider, user) {
|
|
91
96
|
return setCancellation(input.processRunID, true, provider, user);
|
|
92
97
|
}
|
|
93
98
|
};
|
|
94
|
-
|
|
99
|
+
RecordProcessCancelRunServerOperation = __decorate([
|
|
95
100
|
RegisterClass(BaseRemotableOperation, 'RecordProcess.CancelRun')
|
|
96
|
-
],
|
|
97
|
-
export {
|
|
101
|
+
], RecordProcessCancelRunServerOperation);
|
|
102
|
+
export { RecordProcessCancelRunServerOperation };
|
|
98
103
|
/** Clears a paused run's cancellation flag so it can be resumed by a subsequent run. */
|
|
99
|
-
let
|
|
100
|
-
constructor() {
|
|
101
|
-
super(...arguments);
|
|
102
|
-
this.OperationKey = 'RecordProcess.ResumeRun';
|
|
103
|
-
this.RequiredScope = 'recordprocess:execute';
|
|
104
|
-
}
|
|
104
|
+
let RecordProcessResumeRunServerOperation = class RecordProcessResumeRunServerOperation extends RecordProcessResumeRunOperation {
|
|
105
105
|
async InternalExecute(input, provider, user) {
|
|
106
106
|
return setCancellation(input.processRunID, false, provider, user);
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
|
-
|
|
109
|
+
RecordProcessResumeRunServerOperation = __decorate([
|
|
110
110
|
RegisterClass(BaseRemotableOperation, 'RecordProcess.ResumeRun')
|
|
111
|
-
],
|
|
112
|
-
export {
|
|
111
|
+
], RecordProcessResumeRunServerOperation);
|
|
112
|
+
export { RecordProcessResumeRunServerOperation };
|
|
113
113
|
/** Tree-shaking anchor — call from a server bootstrap to retain these operation registrations. */
|
|
114
114
|
export function LoadRecordProcessControlOperations() {
|
|
115
115
|
// intentionally empty
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessControlOperations.js","sourceRoot":"","sources":["../../src/operations/RecordProcessControlOperations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"RecordProcessControlOperations.js","sourceRoot":"","sources":["../../src/operations/RecordProcessControlOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,25 +5,10 @@
|
|
|
5
5
|
* from the browser via the generic `ExecuteRemoteOperation` transport.
|
|
6
6
|
* @module @memberjunction/record-set-processor
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
processRunID: string;
|
|
13
|
-
}
|
|
14
|
-
/** Output of {@link RecordProcessGetRunStatusOperation}. */
|
|
15
|
-
export interface RecordProcessGetRunStatusOutput {
|
|
16
|
-
status: string;
|
|
17
|
-
processed: number;
|
|
18
|
-
total: number | null;
|
|
19
|
-
success: number;
|
|
20
|
-
error: number;
|
|
21
|
-
skipped: number;
|
|
22
|
-
}
|
|
23
|
-
/** Returns the live status and counts of a Process Run. */
|
|
24
|
-
export declare class RecordProcessGetRunStatusOperation extends BaseRemotableOperation<RecordProcessGetRunStatusInput, RecordProcessGetRunStatusOutput> {
|
|
25
|
-
readonly OperationKey = "RecordProcess.GetRunStatus";
|
|
26
|
-
readonly RequiredScope = "recordprocess:execute";
|
|
8
|
+
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
9
|
+
import { RecordProcessGetRunStatusOperation, type RecordProcessGetRunStatusInput, type RecordProcessGetRunStatusOutput } from '@memberjunction/core-entities';
|
|
10
|
+
/** Returns the live status and counts of a Process Run; the server body for the generated `RecordProcess.GetRunStatus` base. */
|
|
11
|
+
export declare class RecordProcessGetRunStatusServerOperation extends RecordProcessGetRunStatusOperation {
|
|
27
12
|
protected InternalExecute(input: RecordProcessGetRunStatusInput, provider: IMetadataProvider, user: UserInfo): Promise<RecordProcessGetRunStatusOutput>;
|
|
28
13
|
}
|
|
29
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessGetRunStatusOperation.d.ts","sourceRoot":"","sources":["../../src/operations/RecordProcessGetRunStatusOperation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"RecordProcessGetRunStatusOperation.d.ts","sourceRoot":"","sources":["../../src/operations/RecordProcessGetRunStatusOperation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAA0B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAEH,kCAAkC,EAClC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACvC,MAAM,+BAA+B,CAAC;AAKvC,gIAAgI;AAChI,qBACa,wCAAyC,SAAQ,kCAAkC;cAE5E,eAAe,CAAC,KAAK,EAAE,8BAA8B,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,+BAA+B,CAAC;CAkBhK;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D"}
|
|
@@ -13,13 +13,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
13
13
|
};
|
|
14
14
|
import { RegisterClass } from '@memberjunction/global';
|
|
15
15
|
import { BaseRemotableOperation } from '@memberjunction/core';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.RequiredScope = 'recordprocess:execute';
|
|
22
|
-
}
|
|
16
|
+
import { RecordProcessGetRunStatusOperation, } from '@memberjunction/core-entities';
|
|
17
|
+
// RecordProcessGetRunStatusInput / Output + the typed base are now CodeGen-emitted into
|
|
18
|
+
// @memberjunction/core-entities (generated/remote_operations.ts) and imported above.
|
|
19
|
+
/** Returns the live status and counts of a Process Run; the server body for the generated `RecordProcess.GetRunStatus` base. */
|
|
20
|
+
let RecordProcessGetRunStatusServerOperation = class RecordProcessGetRunStatusServerOperation extends RecordProcessGetRunStatusOperation {
|
|
23
21
|
async InternalExecute(input, provider, user) {
|
|
24
22
|
if (!input?.processRunID) {
|
|
25
23
|
throw new Error('processRunID is required');
|
|
@@ -39,10 +37,10 @@ let RecordProcessGetRunStatusOperation = class RecordProcessGetRunStatusOperatio
|
|
|
39
37
|
};
|
|
40
38
|
}
|
|
41
39
|
};
|
|
42
|
-
|
|
40
|
+
RecordProcessGetRunStatusServerOperation = __decorate([
|
|
43
41
|
RegisterClass(BaseRemotableOperation, 'RecordProcess.GetRunStatus')
|
|
44
|
-
],
|
|
45
|
-
export {
|
|
42
|
+
], RecordProcessGetRunStatusServerOperation);
|
|
43
|
+
export { RecordProcessGetRunStatusServerOperation };
|
|
46
44
|
/**
|
|
47
45
|
* Tree-shaking anchor — call from a server bootstrap to guarantee the `@RegisterClass` registration
|
|
48
46
|
* is retained so the operation is resolvable by key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessGetRunStatusOperation.js","sourceRoot":"","sources":["../../src/operations/RecordProcessGetRunStatusOperation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAA+B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"RecordProcessGetRunStatusOperation.js","sourceRoot":"","sources":["../../src/operations/RecordProcessGetRunStatusOperation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAA+B,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAEH,kCAAkC,GAGrC,MAAM,+BAA+B,CAAC;AAEvC,wFAAwF;AACxF,qFAAqF;AAErF,gIAAgI;AAEzH,IAAM,wCAAwC,GAA9C,MAAM,wCAAyC,SAAQ,kCAAkC;IAElF,KAAK,CAAC,eAAe,CAAC,KAAqC,EAAE,QAA2B,EAAE,IAAc;QAC9G,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAqB,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,YAAY,aAAa,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;YACH,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,cAAc;YAC7B,KAAK,EAAE,GAAG,CAAC,cAAc;YACzB,OAAO,EAAE,GAAG,CAAC,YAAY;YACzB,KAAK,EAAE,GAAG,CAAC,UAAU;YACrB,OAAO,EAAE,GAAG,CAAC,YAAY;SAC5B,CAAC;IACN,CAAC;CACJ,CAAA;AApBY,wCAAwC;IADpD,aAAa,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;GACvD,wCAAwC,CAoBpD;;AAED;;;GAGG;AACH,MAAM,UAAU,sCAAsC;IAClD,sBAAsB;AAC1B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type FieldChange, type FieldRuleSet } from '@memberjunction/global';
|
|
2
|
+
import { type IRecordProcessor, type RecordProcessorContext, type RecordRef, type RecordResult } from '@memberjunction/record-set-processor-base';
|
|
3
|
+
/** Options for a {@link FieldRulesProcessor}. */
|
|
4
|
+
export interface FieldRulesProcessorOptions {
|
|
5
|
+
/** The rules to apply to each record. */
|
|
6
|
+
RuleSet: FieldRuleSet;
|
|
7
|
+
/** When true, COMPUTE the changes but do NOT save — each result payload carries the per-field diff. */
|
|
8
|
+
DryRun?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** The structured payload recorded on each Process Run Detail (the per-record diff). */
|
|
11
|
+
export interface FieldRulesResultPayload {
|
|
12
|
+
DryRun: boolean;
|
|
13
|
+
Changes: FieldChange[];
|
|
14
|
+
ChangedFields: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Applies field rules to a single record via {@link EntityFieldRules}. Single-primary-key entities only
|
|
18
|
+
* (composite keys return a clear Failed result). On a real run the record is persisted via
|
|
19
|
+
* `BaseEntity.Save()`, so MJ's built-in Record Changes versioning captures the before/after automatically.
|
|
20
|
+
*/
|
|
21
|
+
export declare class FieldRulesProcessor implements IRecordProcessor {
|
|
22
|
+
private readonly options;
|
|
23
|
+
constructor(options: FieldRulesProcessorOptions);
|
|
24
|
+
ProcessRecord(record: RecordRef, context: RecordProcessorContext): Promise<RecordResult>;
|
|
25
|
+
/** Maps the entity-level apply result onto the record-level outcome. */
|
|
26
|
+
private toRecordResult;
|
|
27
|
+
/** Loads the BaseEntity for a record, or returns an error string. */
|
|
28
|
+
private loadRecord;
|
|
29
|
+
/**
|
|
30
|
+
* Supplies core's `EntityFieldRules` with a real `AIPromptRunner`-backed resolver for `prompt` rule
|
|
31
|
+
* sources (core can't depend on the AI stack itself). Each prompt source runs the named prompt with
|
|
32
|
+
* the record (or its shaped data) as input; the prompt's output becomes the field value. One model
|
|
33
|
+
* call per record per prompt-rule — pair with dry-run + bounded concurrency on large sets.
|
|
34
|
+
*/
|
|
35
|
+
private buildPromptResolver;
|
|
36
|
+
/**
|
|
37
|
+
* Supplies core's `EntityFieldRules` with a resolver for `entityDocument` rule sources, backed by the
|
|
38
|
+
* existing Entity Document + Template render infrastructure (core can't depend on templates itself).
|
|
39
|
+
* Renders the named Entity Document's template against the record and returns the text — typically
|
|
40
|
+
* fed into a `prompt` source's `Data` to give the LLM a curated rendering of the record.
|
|
41
|
+
*/
|
|
42
|
+
private buildEntityDocumentResolver;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=FieldRulesProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRulesProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/FieldRulesProcessor.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,KAAK,WAAW,EAAE,KAAK,YAAY,EAAuB,MAAM,wBAAwB,CAAC;AAO9G,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,YAAY,EACpB,MAAM,2CAA2C,CAAC;AAEnD,iDAAiD;AACjD,MAAM,WAAW,0BAA0B;IACvC,yCAAyC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,uGAAuG;IACvG,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wFAAwF;AACxF,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,gBAAgB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,0BAA0B;IAMnD,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;IAerG,wEAAwE;IACxE,OAAO,CAAC,cAAc;IAkBtB,qEAAqE;YACvD,UAAU;IAgBxB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;CAkBtC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview FieldRulesProcessor — applies a declarative {@link FieldRuleSet} to each record: the
|
|
3
|
+
* rules-based bulk-update unit of work for the Record Set Processor.
|
|
4
|
+
*
|
|
5
|
+
* It is intentionally thin: the record set + batching / concurrency / pause-resume come from the engine,
|
|
6
|
+
* and the actual rule logic (compute → metadata-validate → type-coerce → write/preview, plus the
|
|
7
|
+
* RunView-backed lookup resolver) lives in {@link EntityFieldRules} in `@memberjunction/core`. This
|
|
8
|
+
* processor just maps a {@link RecordRef} to a loaded entity and translates the apply result into a
|
|
9
|
+
* {@link RecordResult}. The transform/rule substrate beneath `EntityFieldRules` is the pure
|
|
10
|
+
* field-rules engine in `@memberjunction/global` — the same one the integration field-mapping engine uses.
|
|
11
|
+
* @module @memberjunction/record-set-processor
|
|
12
|
+
*/
|
|
13
|
+
import { CompositeKey, EntityFieldRules } from '@memberjunction/core';
|
|
14
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
15
|
+
import { AIEngine } from '@memberjunction/aiengine';
|
|
16
|
+
import { AIPromptRunner } from '@memberjunction/ai-prompts';
|
|
17
|
+
import { AIPromptParams } from '@memberjunction/ai-core-plus';
|
|
18
|
+
import { TemplateEngineServer } from '@memberjunction/templates';
|
|
19
|
+
import { RegisterFieldRulesTransforms } from '@memberjunction/field-rules-transforms';
|
|
20
|
+
/**
|
|
21
|
+
* Applies field rules to a single record via {@link EntityFieldRules}. Single-primary-key entities only
|
|
22
|
+
* (composite keys return a clear Failed result). On a real run the record is persisted via
|
|
23
|
+
* `BaseEntity.Save()`, so MJ's built-in Record Changes versioning captures the before/after automatically.
|
|
24
|
+
*/
|
|
25
|
+
export class FieldRulesProcessor {
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
// Make the extended transforms (jsonpath / xpath) available to rules. Idempotent — registers
|
|
29
|
+
// the plugins into the global transform registry the first time a processor is created.
|
|
30
|
+
RegisterFieldRulesTransforms();
|
|
31
|
+
}
|
|
32
|
+
async ProcessRecord(record, context) {
|
|
33
|
+
const started = Date.now();
|
|
34
|
+
try {
|
|
35
|
+
const obj = await this.loadRecord(record, context);
|
|
36
|
+
if (typeof obj === 'string') {
|
|
37
|
+
return { Status: 'Failed', ErrorMessage: obj, DurationMs: Date.now() - started };
|
|
38
|
+
}
|
|
39
|
+
const rules = new EntityFieldRules(context.contextUser, this.buildPromptResolver(context), this.buildEntityDocumentResolver(context));
|
|
40
|
+
const result = await rules.ApplyToEntity(obj, this.options.RuleSet, { DryRun: this.options.DryRun });
|
|
41
|
+
return this.toRecordResult(result, started);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { Status: 'Failed', ErrorMessage: err instanceof Error ? err.message : String(err), DurationMs: Date.now() - started };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Maps the entity-level apply result onto the record-level outcome. */
|
|
48
|
+
toRecordResult(result, started) {
|
|
49
|
+
const ResultPayload = { DryRun: result.DryRun, Changes: result.Changes, ChangedFields: result.AppliedFields };
|
|
50
|
+
const DurationMs = Date.now() - started;
|
|
51
|
+
if (result.Errors.length > 0) {
|
|
52
|
+
return { Status: 'Failed', ResultPayload, ErrorMessage: result.Errors.join('; '), DurationMs };
|
|
53
|
+
}
|
|
54
|
+
if (result.DryRun) {
|
|
55
|
+
return { Status: 'Succeeded', ResultPayload, DurationMs }; // preview — the diff is the deliverable
|
|
56
|
+
}
|
|
57
|
+
if (result.AppliedFields.length === 0) {
|
|
58
|
+
return { Status: 'Skipped', ResultPayload, DurationMs };
|
|
59
|
+
}
|
|
60
|
+
if (!result.Saved) {
|
|
61
|
+
return { Status: 'Failed', ResultPayload, ErrorMessage: result.SaveError ?? 'save failed', DurationMs };
|
|
62
|
+
}
|
|
63
|
+
return { Status: 'Succeeded', ResultPayload, DurationMs };
|
|
64
|
+
}
|
|
65
|
+
/** Loads the BaseEntity for a record, or returns an error string. */
|
|
66
|
+
async loadRecord(record, context) {
|
|
67
|
+
const entity = context.provider.EntityByID(record.EntityID);
|
|
68
|
+
if (!entity) {
|
|
69
|
+
return `entity '${record.EntityID}' not found in metadata`;
|
|
70
|
+
}
|
|
71
|
+
if (entity.PrimaryKeys.length !== 1) {
|
|
72
|
+
return `field-rules updates support single-primary-key entities only ('${entity.Name}')`;
|
|
73
|
+
}
|
|
74
|
+
const obj = await context.provider.GetEntityObject(entity.Name, context.contextUser);
|
|
75
|
+
const loaded = await obj.InnerLoad(CompositeKey.FromKeyValuePair(entity.FirstPrimaryKey.Name, record.RecordID));
|
|
76
|
+
if (!loaded) {
|
|
77
|
+
return `record '${record.RecordID}' of '${entity.Name}' not found`;
|
|
78
|
+
}
|
|
79
|
+
return obj;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Supplies core's `EntityFieldRules` with a real `AIPromptRunner`-backed resolver for `prompt` rule
|
|
83
|
+
* sources (core can't depend on the AI stack itself). Each prompt source runs the named prompt with
|
|
84
|
+
* the record (or its shaped data) as input; the prompt's output becomes the field value. One model
|
|
85
|
+
* call per record per prompt-rule — pair with dry-run + bounded concurrency on large sets.
|
|
86
|
+
*/
|
|
87
|
+
buildPromptResolver(context) {
|
|
88
|
+
return async ({ PromptID, Data }) => {
|
|
89
|
+
await AIEngine.Instance.Config(false, context.contextUser);
|
|
90
|
+
const prompt = AIEngine.Instance.Prompts.find((p) => UUIDsEqual(p.ID, PromptID));
|
|
91
|
+
if (!prompt) {
|
|
92
|
+
throw new Error(`AI Prompt '${PromptID}' not found`);
|
|
93
|
+
}
|
|
94
|
+
const params = new AIPromptParams();
|
|
95
|
+
params.prompt = prompt;
|
|
96
|
+
params.data = Data;
|
|
97
|
+
params.contextUser = context.contextUser;
|
|
98
|
+
const result = await new AIPromptRunner().ExecutePrompt(params);
|
|
99
|
+
if (!result.success) {
|
|
100
|
+
throw new Error(result.errorMessage ?? 'AI prompt execution failed');
|
|
101
|
+
}
|
|
102
|
+
return result.result;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Supplies core's `EntityFieldRules` with a resolver for `entityDocument` rule sources, backed by the
|
|
107
|
+
* existing Entity Document + Template render infrastructure (core can't depend on templates itself).
|
|
108
|
+
* Renders the named Entity Document's template against the record and returns the text — typically
|
|
109
|
+
* fed into a `prompt` source's `Data` to give the LLM a curated rendering of the record.
|
|
110
|
+
*/
|
|
111
|
+
buildEntityDocumentResolver(context) {
|
|
112
|
+
return async ({ EntityDocumentID, Record }) => {
|
|
113
|
+
if (!EntityDocumentID) {
|
|
114
|
+
throw new Error('an entityDocument source requires an EntityDocumentID');
|
|
115
|
+
}
|
|
116
|
+
// Configure the template engine first so the EntityDocument's virtual TemplateText resolves.
|
|
117
|
+
await TemplateEngineServer.Instance.Config(false, context.contextUser);
|
|
118
|
+
const doc = await context.provider.GetEntityObject('MJ: Entity Documents', context.contextUser);
|
|
119
|
+
if (!(await doc.Load(EntityDocumentID))) {
|
|
120
|
+
throw new Error(`Entity Document '${EntityDocumentID}' not found`);
|
|
121
|
+
}
|
|
122
|
+
const rendered = await TemplateEngineServer.Instance.RenderTemplateSimple(doc.TemplateText, Record);
|
|
123
|
+
if (!rendered.Success) {
|
|
124
|
+
throw new Error(rendered.Message ?? 'entity document render failed');
|
|
125
|
+
}
|
|
126
|
+
return rendered.Output ?? '';
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=FieldRulesProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRulesProcessor.js","sourceRoot":"","sources":["../../src/processors/FieldRulesProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,13 @@ import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
|
8
8
|
import { IProcessRunTracker, ProcessCursor, ProcessRunMeta, ProcessRunSummary, RecordRef, RecordResult, RunCounts, RunHandle } from '@memberjunction/record-set-processor-base';
|
|
9
9
|
/** The default tracker, persisting to the generic `MJ: Process Runs` / `MJ: Process Run Details` tables. */
|
|
10
10
|
export declare class GenericProcessRunTracker implements IProcessRunTracker {
|
|
11
|
+
/**
|
|
12
|
+
* Fire-and-forget queue for per-record detail INSERTs. Each detail is its own entity instance (a
|
|
13
|
+
* distinct key), so detail writes run concurrently without blocking the per-record loop; `CompleteRun`
|
|
14
|
+
* flushes them before finalizing the run. (Reliable/insert-before-fire mode is a future enhancement —
|
|
15
|
+
* it needs a per-record start hook on `IProcessRunTracker`.)
|
|
16
|
+
*/
|
|
17
|
+
private readonly detailQueue;
|
|
11
18
|
BeginRun(meta: ProcessRunMeta, contextUser: UserInfo, provider?: IMetadataProvider): Promise<RunHandle>;
|
|
12
19
|
RecordResult(handle: RunHandle, record: RecordRef, result: RecordResult, contextUser: UserInfo, provider?: IMetadataProvider): Promise<void>;
|
|
13
20
|
Checkpoint(handle: RunHandle, cursor: ProcessCursor, counts: RunCounts, _contextUser: UserInfo, _provider?: IMetadataProvider): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericProcessRunTracker.d.ts","sourceRoot":"","sources":["../../src/trackers/GenericProcessRunTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"GenericProcessRunTracker.d.ts","sourceRoot":"","sources":["../../src/trackers/GenericProcessRunTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAuB,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE5G,OAAO,EACH,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACZ,MAAM,2CAA2C,CAAC;AAOnD,4GAA4G;AAC5G,qBAAa,wBAAyB,YAAW,kBAAkB;IAC/D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAE5C,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAgCvG,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5I,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BhJ,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhI,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAU9I"}
|
|
@@ -4,9 +4,18 @@
|
|
|
4
4
|
* handshake by re-reading the run row's `CancellationRequested` flag at each checkpoint.
|
|
5
5
|
* @module @memberjunction/record-set-processor
|
|
6
6
|
*/
|
|
7
|
-
import { LogError, Metadata } from '@memberjunction/core';
|
|
7
|
+
import { BaseEntitySaveQueue, LogError, Metadata } from '@memberjunction/core';
|
|
8
8
|
/** The default tracker, persisting to the generic `MJ: Process Runs` / `MJ: Process Run Details` tables. */
|
|
9
9
|
export class GenericProcessRunTracker {
|
|
10
|
+
constructor() {
|
|
11
|
+
/**
|
|
12
|
+
* Fire-and-forget queue for per-record detail INSERTs. Each detail is its own entity instance (a
|
|
13
|
+
* distinct key), so detail writes run concurrently without blocking the per-record loop; `CompleteRun`
|
|
14
|
+
* flushes them before finalizing the run. (Reliable/insert-before-fire mode is a future enhancement —
|
|
15
|
+
* it needs a per-record start hook on `IProcessRunTracker`.)
|
|
16
|
+
*/
|
|
17
|
+
this.detailQueue = new BaseEntitySaveQueue();
|
|
18
|
+
}
|
|
10
19
|
async BeginRun(meta, contextUser, provider) {
|
|
11
20
|
const md = provider ?? Metadata.Provider;
|
|
12
21
|
const run = await md.GetEntityObject('MJ: Process Runs', contextUser);
|
|
@@ -27,6 +36,7 @@ export class GenericProcessRunTracker {
|
|
|
27
36
|
run.SkippedCount = 0;
|
|
28
37
|
run.BatchSize = meta.BatchSize ?? null;
|
|
29
38
|
run.CancellationRequested = false;
|
|
39
|
+
run.DryRun = meta.DryRun ?? false;
|
|
30
40
|
run.StartedByUserID = contextUser?.ID ?? null;
|
|
31
41
|
if (meta.Configuration !== undefined) {
|
|
32
42
|
run.Configuration = JSON.stringify(meta.Configuration);
|
|
@@ -54,11 +64,9 @@ export class GenericProcessRunTracker {
|
|
|
54
64
|
detail.ErrorMessage = result.ErrorMessage ?? null;
|
|
55
65
|
detail.ActionExecutionLogID = result.ActionExecutionLogID ?? null;
|
|
56
66
|
detail.AIAgentRunID = result.AIAgentRunID ?? null;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
LogError(`GenericProcessRunTracker: failed to save Process Run Detail for record '${record.RecordID}': ${detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
61
|
-
}
|
|
67
|
+
// Fire-and-forget — the detail write must not block the per-record loop, and a failed write must
|
|
68
|
+
// not abort the run (the queue logs failures; CompleteRun flushes + reports the count).
|
|
69
|
+
this.detailQueue.Insert(detail);
|
|
62
70
|
}
|
|
63
71
|
async Checkpoint(handle, cursor, counts, _contextUser, _provider) {
|
|
64
72
|
const run = handle.run;
|
|
@@ -88,6 +96,11 @@ export class GenericProcessRunTracker {
|
|
|
88
96
|
return true;
|
|
89
97
|
}
|
|
90
98
|
async CompleteRun(handle, summary, _contextUser, _provider) {
|
|
99
|
+
// Ensure every fire-and-forget detail write has landed before we finalize the run header.
|
|
100
|
+
const flush = await this.detailQueue.Flush();
|
|
101
|
+
if (flush.failures > 0) {
|
|
102
|
+
LogError(`GenericProcessRunTracker: ${flush.failures} Process Run Detail write(s) failed for run '${handle.run.ID}'`);
|
|
103
|
+
}
|
|
91
104
|
const run = handle.run;
|
|
92
105
|
run.Status = summary.Status;
|
|
93
106
|
run.EndTime = summary.EndTime ?? new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericProcessRunTracker.js","sourceRoot":"","sources":["../../src/trackers/GenericProcessRunTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,QAAQ,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"GenericProcessRunTracker.js","sourceRoot":"","sources":["../../src/trackers/GenericProcessRunTracker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/record-set-processor",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.43.0",
|
|
5
5
|
"description": "MemberJunction: Record Set Processor - server engine that batches, rate-limits, resumes, and audits processing of a record set through a pluggable source/processor/tracker pipeline.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,16 +17,18 @@
|
|
|
17
17
|
"author": "MemberJunction.com",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@memberjunction/core": "5.
|
|
21
|
-
"@memberjunction/global": "5.
|
|
22
|
-
"@memberjunction/core-entities": "5.
|
|
23
|
-
"@memberjunction/
|
|
24
|
-
"@memberjunction/
|
|
25
|
-
"@memberjunction/actions
|
|
26
|
-
"@memberjunction/
|
|
27
|
-
"@memberjunction/
|
|
28
|
-
"@memberjunction/
|
|
29
|
-
"@memberjunction/ai-
|
|
20
|
+
"@memberjunction/core": "5.43.0",
|
|
21
|
+
"@memberjunction/global": "5.43.0",
|
|
22
|
+
"@memberjunction/core-entities": "5.43.0",
|
|
23
|
+
"@memberjunction/field-rules-transforms": "5.43.0",
|
|
24
|
+
"@memberjunction/record-set-processor-base": "5.43.0",
|
|
25
|
+
"@memberjunction/actions": "5.43.0",
|
|
26
|
+
"@memberjunction/actions-base": "5.43.0",
|
|
27
|
+
"@memberjunction/ai-agents": "5.43.0",
|
|
28
|
+
"@memberjunction/aiengine": "5.43.0",
|
|
29
|
+
"@memberjunction/ai-prompts": "5.43.0",
|
|
30
|
+
"@memberjunction/ai-core-plus": "5.43.0",
|
|
31
|
+
"@memberjunction/templates": "5.43.0"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
32
34
|
"@types/node": "24.10.11",
|