@memberjunction/record-set-processor 5.43.0 → 5.44.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 +11 -1
- package/dist/RecordProcessExecutor.d.ts.map +1 -1
- package/dist/RecordProcessExecutor.js +34 -4
- package/dist/RecordProcessExecutor.js.map +1 -1
- package/dist/processors/WriteBackProcessor.d.ts +5 -1
- package/dist/processors/WriteBackProcessor.d.ts.map +1 -1
- package/dist/processors/WriteBackProcessor.js +6 -1
- package/dist/processors/WriteBackProcessor.js.map +1 -1
- package/dist/writeBack.d.ts +16 -2
- package/dist/writeBack.d.ts.map +1 -1
- package/dist/writeBack.js +48 -20
- package/dist/writeBack.js.map +1 -1
- package/package.json +13 -13
|
@@ -46,8 +46,18 @@ export declare class RecordProcessExecutor {
|
|
|
46
46
|
/**
|
|
47
47
|
* Builds the processor from the process's Work. `FieldRules` reads its rule set from `Configuration`
|
|
48
48
|
* and writes itself (honoring `dryRun`); the other work types build a base processor wrapped with
|
|
49
|
-
* output-mapping write-back when configured.
|
|
49
|
+
* output-mapping write-back when configured. The write-back wrapper also honors `dryRun` — on a
|
|
50
|
+
* dry-run the inner work runs but the mapping only previews (nothing is saved), so EVERY work type's
|
|
51
|
+
* dry-run is side-effect-free, not just FieldRules.
|
|
50
52
|
*/
|
|
51
53
|
buildProcessor(rp: MJRecordProcessEntity, dryRun?: boolean): IRecordProcessor;
|
|
54
|
+
/**
|
|
55
|
+
* Resolves a processor for a work type the built-in switch doesn't handle by consulting the
|
|
56
|
+
* {@link RecordProcessorRegistry}. External packages register a factory keyed by their work-type
|
|
57
|
+
* string; the factory builds (and closes over its own injected deps for) the processor from the
|
|
58
|
+
* per-run context. Throws the same "unsupported WorkType" error as before when nothing is registered,
|
|
59
|
+
* so behavior is unchanged for genuinely-unknown work types.
|
|
60
|
+
*/
|
|
61
|
+
private resolveFromRegistry;
|
|
52
62
|
}
|
|
53
63
|
//# 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,
|
|
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,EAGZ,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;;;;;;OAMG;IACI,cAAc,CAAC,EAAE,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB;IAyCpF;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;CAkB9B"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Metadata } from '@memberjunction/core';
|
|
8
8
|
import { SafeJSONParse } from '@memberjunction/global';
|
|
9
|
-
import { ArraySource, FilterSource, ListSource, ViewSource, } from '@memberjunction/record-set-processor-base';
|
|
9
|
+
import { ArraySource, FilterSource, ListSource, RecordProcessorRegistry, ViewSource, } from '@memberjunction/record-set-processor-base';
|
|
10
10
|
import { RecordSetProcessor } from './RecordSetProcessor.js';
|
|
11
11
|
import { ActionRecordProcessor } from './processors/ActionRecordProcessor.js';
|
|
12
12
|
import { AgentRecordProcessor } from './processors/AgentRecordProcessor.js';
|
|
@@ -97,7 +97,9 @@ export class RecordProcessExecutor {
|
|
|
97
97
|
/**
|
|
98
98
|
* Builds the processor from the process's Work. `FieldRules` reads its rule set from `Configuration`
|
|
99
99
|
* and writes itself (honoring `dryRun`); the other work types build a base processor wrapped with
|
|
100
|
-
* output-mapping write-back when configured.
|
|
100
|
+
* output-mapping write-back when configured. The write-back wrapper also honors `dryRun` — on a
|
|
101
|
+
* dry-run the inner work runs but the mapping only previews (nothing is saved), so EVERY work type's
|
|
102
|
+
* dry-run is side-effect-free, not just FieldRules.
|
|
101
103
|
*/
|
|
102
104
|
buildProcessor(rp, dryRun) {
|
|
103
105
|
if (rp.WorkType === 'FieldRules') {
|
|
@@ -129,13 +131,41 @@ export class RecordProcessExecutor {
|
|
|
129
131
|
base = new InferProcessor(rp.PromptID, inputMapping);
|
|
130
132
|
}
|
|
131
133
|
else {
|
|
132
|
-
|
|
134
|
+
// Not a built-in work type — consult the pluggable registry. This is the open seam that
|
|
135
|
+
// lets external packages (e.g. Predictive Studio's 'ML Model' scoring) register a processor
|
|
136
|
+
// factory for their own work type WITHOUT this package depending on them.
|
|
137
|
+
base = this.resolveFromRegistry(rp, dryRun);
|
|
133
138
|
}
|
|
134
139
|
const outputMapping = rp.OutputMapping ? SafeJSONParse(rp.OutputMapping) : undefined;
|
|
135
140
|
if (outputMapping && (outputMapping.fields || outputMapping.childRecord)) {
|
|
136
|
-
return new WriteBackProcessor(base, outputMapping);
|
|
141
|
+
return new WriteBackProcessor(base, outputMapping, dryRun);
|
|
137
142
|
}
|
|
138
143
|
return base;
|
|
139
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Resolves a processor for a work type the built-in switch doesn't handle by consulting the
|
|
147
|
+
* {@link RecordProcessorRegistry}. External packages register a factory keyed by their work-type
|
|
148
|
+
* string; the factory builds (and closes over its own injected deps for) the processor from the
|
|
149
|
+
* per-run context. Throws the same "unsupported WorkType" error as before when nothing is registered,
|
|
150
|
+
* so behavior is unchanged for genuinely-unknown work types.
|
|
151
|
+
*/
|
|
152
|
+
resolveFromRegistry(rp, dryRun) {
|
|
153
|
+
const context = {
|
|
154
|
+
WorkType: rp.WorkType,
|
|
155
|
+
Configuration: rp.Configuration,
|
|
156
|
+
InputMapping: rp.InputMapping,
|
|
157
|
+
OutputMapping: rp.OutputMapping,
|
|
158
|
+
EntityID: rp.EntityID,
|
|
159
|
+
RecordProcessID: rp.ID,
|
|
160
|
+
RecordProcessName: rp.Name,
|
|
161
|
+
DryRun: dryRun,
|
|
162
|
+
RecordProcess: rp,
|
|
163
|
+
};
|
|
164
|
+
const resolved = RecordProcessorRegistry.Instance.Resolve(context);
|
|
165
|
+
if (!resolved) {
|
|
166
|
+
throw new Error(`Record Process '${rp.Name}': unsupported WorkType '${rp.WorkType}'`);
|
|
167
|
+
}
|
|
168
|
+
return resolved;
|
|
169
|
+
}
|
|
140
170
|
}
|
|
141
171
|
//# sourceMappingURL=RecordProcessExecutor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordProcessExecutor.js","sourceRoot":"","sources":["../src/RecordProcessExecutor.ts"],"names":[],"mappings":"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
|
|
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,EAAqB,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EACH,WAAW,EACX,YAAY,EAGZ,UAAU,EAIV,uBAAuB,EAEvB,UAAU,GACb,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AA6BrE,kFAAkF;AAClF,MAAM,OAAO,qBAAqB;IAC9B,kDAAkD;IAC3C,KAAK,CAAC,OAAO,CAAC,eAAuB,EAAE,OAAgC;QAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAwB,sBAAsB,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9G,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,eAAe,aAAa,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,6CAA6C;IACtC,KAAK,CAAC,GAAG,CAAC,EAAyB,EAAE,OAAgC;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QACvD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC;YAC7E,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC;YAClD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,EAAE,CAAC,EAAE;YACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;YAC9C,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS;YACpC,cAAc,EAAE,EAAE,CAAC,cAAc,IAAI,SAAS;YAC9C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE;SAChG,CAAC,CAAC;IACP,CAAC;IAED,2HAA2H;IACpH,WAAW,CAAC,EAAyB,EAAE,QAA2B,EAAE,cAAuB,EAAE,KAAkC;QAClI,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,IAAI,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM;gBACP,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,wCAAwC,CAAC,CAAC;gBACxF,CAAC;gBACD,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC1C,KAAK,MAAM;gBACP,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,wCAAwC,CAAC,CAAC;gBACxF,CAAC;gBACD,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YAC1C,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,QAAQ,yBAAyB,CAAC,CAAC;gBAClG,CAAC;gBACD,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,cAAc;gBACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,sEAAsE,CAAC,CAAC;YACtH;gBACI,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,6BAA6B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;QAChG,CAAC;IACL,CAAC;IAED,uGAAuG;IAC/F,oBAAoB,CAAC,EAAyB,EAAE,QAA2B,EAAE,KAAiC;QAClH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,SAAS;gBACV,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzH,KAAK,MAAM;gBACP,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,MAAM;gBACP,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,QAAQ,yBAAyB,CAAC,CAAC;gBAClG,CAAC;gBACD,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAC,EAAyB,EAAE,MAAgB;QAC7D,IAAI,EAAE,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAe,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7F,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,sFAAsF,CAAC,CAAC;YACtI,CAAC;YACD,0FAA0F;YAC1F,OAAO,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,IAAI,IAAsB,CAAC;QAC3B,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,sCAAsC,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,GAAG,IAAI,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,oCAAoC,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACrF,CAAC;YACD,IAAI,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACJ,wFAAwF;YACxF,4FAA4F;YAC5F,0EAA0E;YAC1E,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAsB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1G,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACK,mBAAmB,CAAC,EAAyB,EAAE,MAAgB;QACnE,MAAM,OAAO,GAAgC;YACzC,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,eAAe,EAAE,EAAE,CAAC,EAAE;YACtB,iBAAiB,EAAE,EAAE,CAAC,IAAI;YAC1B,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,EAAE;SACpB,CAAC;QACF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,4BAA4B,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"}
|
|
@@ -10,11 +10,15 @@ import { OutputMappingConfig } from '../writeBack.js';
|
|
|
10
10
|
export declare class WriteBackProcessor implements IRecordProcessor {
|
|
11
11
|
private readonly inner;
|
|
12
12
|
private readonly outputMapping;
|
|
13
|
+
private readonly dryRun;
|
|
13
14
|
/**
|
|
14
15
|
* @param inner - The processor that produces the work result.
|
|
15
16
|
* @param outputMapping - The `OutputMapping` config to apply to each successful result.
|
|
17
|
+
* @param dryRun - When true, the inner work still runs but the write-back only computes a
|
|
18
|
+
* preview (no entity is saved / no child is created), so a dry-run of any wrapped work type
|
|
19
|
+
* reports its effect without mutating data. Mirrors `FieldRulesProcessor`'s dry-run.
|
|
16
20
|
*/
|
|
17
|
-
constructor(inner: IRecordProcessor, outputMapping: OutputMappingConfig);
|
|
21
|
+
constructor(inner: IRecordProcessor, outputMapping: OutputMappingConfig, dryRun?: boolean);
|
|
18
22
|
ProcessRecord(record: RecordRef, context: RecordProcessorContext): Promise<RecordResult>;
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=WriteBackProcessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WriteBackProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/WriteBackProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,YAAY,EACf,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAEvE,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"WriteBackProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/WriteBackProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,YAAY,EACf,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAEvE,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,gBAAgB;IASnD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAV3B;;;;;;OAMG;gBAEkB,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,mBAAmB,EAClC,MAAM,GAAE,OAAe;IAG/B,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;CAqBxG"}
|
|
@@ -11,10 +11,14 @@ export class WriteBackProcessor {
|
|
|
11
11
|
/**
|
|
12
12
|
* @param inner - The processor that produces the work result.
|
|
13
13
|
* @param outputMapping - The `OutputMapping` config to apply to each successful result.
|
|
14
|
+
* @param dryRun - When true, the inner work still runs but the write-back only computes a
|
|
15
|
+
* preview (no entity is saved / no child is created), so a dry-run of any wrapped work type
|
|
16
|
+
* reports its effect without mutating data. Mirrors `FieldRulesProcessor`'s dry-run.
|
|
14
17
|
*/
|
|
15
|
-
constructor(inner, outputMapping) {
|
|
18
|
+
constructor(inner, outputMapping, dryRun = false) {
|
|
16
19
|
this.inner = inner;
|
|
17
20
|
this.outputMapping = outputMapping;
|
|
21
|
+
this.dryRun = dryRun;
|
|
18
22
|
}
|
|
19
23
|
async ProcessRecord(record, context) {
|
|
20
24
|
const result = await this.inner.ProcessRecord(record, context);
|
|
@@ -28,6 +32,7 @@ export class WriteBackProcessor {
|
|
|
28
32
|
record,
|
|
29
33
|
contextUser: context.contextUser,
|
|
30
34
|
provider: context.provider,
|
|
35
|
+
dryRun: this.dryRun,
|
|
31
36
|
});
|
|
32
37
|
return { ...result, ResultPayload: { output: result.ResultPayload, writeBack } };
|
|
33
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WriteBackProcessor.js","sourceRoot":"","sources":["../../src/processors/WriteBackProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAOhD,OAAO,EAAuB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvE,yFAAyF;AACzF,MAAM,OAAO,kBAAkB;IAC3B
|
|
1
|
+
{"version":3,"file":"WriteBackProcessor.js","sourceRoot":"","sources":["../../src/processors/WriteBackProcessor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAOhD,OAAO,EAAuB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvE,yFAAyF;AACzF,MAAM,OAAO,kBAAkB;IAC3B;;;;;;OAMG;IACH,YACqB,KAAuB,EACvB,aAAkC,EAClC,SAAkB,KAAK;QAFvB,UAAK,GAAL,KAAK,CAAkB;QACvB,kBAAa,GAAb,aAAa,CAAqB;QAClC,WAAM,GAAN,MAAM,CAAiB;IACzC,CAAC;IAEG,KAAK,CAAC,aAAa,CAAC,MAAiB,EAAE,OAA+B;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC;gBACvC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,MAAM,EAAE,MAAM,CAAC,aAAa;gBAC5B,MAAM;gBACN,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC;QACrF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,QAAQ,CAAC,qDAAqD,MAAM,CAAC,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;YAC9F,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,sBAAsB,OAAO,EAAE,EAAE,CAAC;QAC1F,CAAC;IACL,CAAC;CACJ"}
|
package/dist/writeBack.d.ts
CHANGED
|
@@ -22,15 +22,27 @@ export interface OutputMappingConfig {
|
|
|
22
22
|
}
|
|
23
23
|
/** Outcome of {@link applyOutputMapping}. */
|
|
24
24
|
export interface WriteBackResult {
|
|
25
|
-
/** True if the processed record's fields were updated. */
|
|
25
|
+
/** True if the processed record's fields were actually updated (always false on a dry-run). */
|
|
26
26
|
updatedRecord: boolean;
|
|
27
|
-
/** ID of the created child record, when a child mapping was applied. */
|
|
27
|
+
/** ID of the created child record, when a child mapping was applied (absent on a dry-run). */
|
|
28
28
|
createdChildID?: string;
|
|
29
|
+
/** True when this was a dry-run: values were computed (and field names validated) but NOTHING was saved. */
|
|
30
|
+
dryRun?: boolean;
|
|
31
|
+
/** On a dry-run, the resolved field values that WOULD be written to the processed record — the write-back preview. */
|
|
32
|
+
previewFields?: Record<string, unknown>;
|
|
33
|
+
/** On a dry-run with a child mapping, the resolved child values that WOULD be created. */
|
|
34
|
+
previewChild?: Record<string, unknown>;
|
|
29
35
|
}
|
|
30
36
|
/**
|
|
31
37
|
* Applies an {@link OutputMappingConfig} against a work result. Single-primary-key entities only
|
|
32
38
|
* (composite keys throw a clear error). Field/child values are resolved from the result via the
|
|
33
39
|
* shared resolver, so `"$.path"` reads `result.path`.
|
|
40
|
+
*
|
|
41
|
+
* **Dry-run** (`dryRun: true`): the mapped values are still resolved and the target entity/field
|
|
42
|
+
* metadata is still validated, but NO entity is saved and NO child is created — the would-be values
|
|
43
|
+
* are returned in `previewFields` / `previewChild` so a dry-run preview can show exactly what an apply
|
|
44
|
+
* would write. This is what lets a dry-run of any wrapped work type (Action / Agent / Infer / ML Model)
|
|
45
|
+
* compute its effect without mutating data, mirroring the `FieldRulesProcessor` dry-run preview.
|
|
34
46
|
*/
|
|
35
47
|
export declare function applyOutputMapping(opts: {
|
|
36
48
|
outputMapping: OutputMappingConfig;
|
|
@@ -38,5 +50,7 @@ export declare function applyOutputMapping(opts: {
|
|
|
38
50
|
record: RecordRef;
|
|
39
51
|
contextUser: UserInfo;
|
|
40
52
|
provider?: IMetadataProvider;
|
|
53
|
+
/** When true, compute + validate the mapping but do NOT save anything (returns a preview instead). */
|
|
54
|
+
dryRun?: boolean;
|
|
41
55
|
}): Promise<WriteBackResult>;
|
|
42
56
|
//# sourceMappingURL=writeBack.d.ts.map
|
package/dist/writeBack.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBack.d.ts","sourceRoot":"","sources":["../src/writeBack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA4B,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAEtE,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAChC,2HAA2H;IAC3H,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uDAAuD;IACvD,WAAW,CAAC,EAAE;QACV,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,uEAAuE;QACvE,WAAW,EAAE,MAAM,CAAC;QACpB,4CAA4C;QAC5C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACL;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC5B
|
|
1
|
+
{"version":3,"file":"writeBack.d.ts","sourceRoot":"","sources":["../src/writeBack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA4B,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAEtE,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAChC,2HAA2H;IAC3H,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uDAAuD;IACvD,WAAW,CAAC,EAAE;QACV,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,uEAAuE;QACvE,WAAW,EAAE,MAAM,CAAC;QACpB,4CAA4C;QAC5C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC;CACL;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC5B,+FAA+F;IAC/F,aAAa,EAAE,OAAO,CAAC;IACvB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sHAAsH;IACtH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC3C,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,sGAAsG;IACtG,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmE3B"}
|
package/dist/writeBack.js
CHANGED
|
@@ -10,12 +10,21 @@ import { resolveMappingRef } from '@memberjunction/global';
|
|
|
10
10
|
* Applies an {@link OutputMappingConfig} against a work result. Single-primary-key entities only
|
|
11
11
|
* (composite keys throw a clear error). Field/child values are resolved from the result via the
|
|
12
12
|
* shared resolver, so `"$.path"` reads `result.path`.
|
|
13
|
+
*
|
|
14
|
+
* **Dry-run** (`dryRun: true`): the mapped values are still resolved and the target entity/field
|
|
15
|
+
* metadata is still validated, but NO entity is saved and NO child is created — the would-be values
|
|
16
|
+
* are returned in `previewFields` / `previewChild` so a dry-run preview can show exactly what an apply
|
|
17
|
+
* would write. This is what lets a dry-run of any wrapped work type (Action / Agent / Infer / ML Model)
|
|
18
|
+
* compute its effect without mutating data, mirroring the `FieldRulesProcessor` dry-run preview.
|
|
13
19
|
*/
|
|
14
20
|
export async function applyOutputMapping(opts) {
|
|
15
|
-
const { outputMapping, result, record, contextUser } = opts;
|
|
21
|
+
const { outputMapping, result, record, contextUser, dryRun } = opts;
|
|
16
22
|
const provider = opts.provider ?? Metadata.Provider;
|
|
17
23
|
const sources = { $: result, record: record.Record ?? {} };
|
|
18
24
|
const out = { updatedRecord: false };
|
|
25
|
+
if (dryRun) {
|
|
26
|
+
out.dryRun = true;
|
|
27
|
+
}
|
|
19
28
|
// 1) Update fields on the processed record.
|
|
20
29
|
if (outputMapping.fields && Object.keys(outputMapping.fields).length > 0) {
|
|
21
30
|
const entity = provider.EntityByID(record.EntityID);
|
|
@@ -25,34 +34,53 @@ export async function applyOutputMapping(opts) {
|
|
|
25
34
|
if (entity.PrimaryKeys.length !== 1) {
|
|
26
35
|
throw new Error(`applyOutputMapping: write-back currently supports single-primary-key entities only ('${entity.Name}')`);
|
|
27
36
|
}
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
if (!loaded) {
|
|
31
|
-
throw new Error(`applyOutputMapping: record '${record.RecordID}' of '${entity.Name}' not found`);
|
|
32
|
-
}
|
|
37
|
+
// Resolve the mapped values once — shared by the dry-run preview and the real apply.
|
|
38
|
+
const resolved = {};
|
|
33
39
|
for (const [field, ref] of Object.entries(outputMapping.fields)) {
|
|
34
|
-
|
|
35
|
-
obj.Set(field, resolveMappingRef(ref, sources));
|
|
40
|
+
resolved[field] = resolveMappingRef(ref, sources);
|
|
36
41
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
if (dryRun) {
|
|
43
|
+
// Compute-only: surface what an apply WOULD write, persist nothing.
|
|
44
|
+
out.previewFields = resolved;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const obj = await provider.GetEntityObject(entity.Name, contextUser);
|
|
48
|
+
const loaded = await obj.InnerLoad(CompositeKey.FromKeyValuePair(entity.FirstPrimaryKey.Name, record.RecordID));
|
|
49
|
+
if (!loaded) {
|
|
50
|
+
throw new Error(`applyOutputMapping: record '${record.RecordID}' of '${entity.Name}' not found`);
|
|
51
|
+
}
|
|
52
|
+
for (const [field, value] of Object.entries(resolved)) {
|
|
53
|
+
// Dynamic, config-driven field names — the legitimate use of Set() (no compile-time property).
|
|
54
|
+
obj.Set(field, value);
|
|
55
|
+
}
|
|
56
|
+
const saved = await obj.Save();
|
|
57
|
+
if (!saved) {
|
|
58
|
+
throw new Error(`applyOutputMapping: failed updating '${entity.Name}' record '${record.RecordID}': ${obj.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
59
|
+
}
|
|
60
|
+
out.updatedRecord = true;
|
|
40
61
|
}
|
|
41
|
-
out.updatedRecord = true;
|
|
42
62
|
}
|
|
43
63
|
// 2) Create a child record.
|
|
44
64
|
if (outputMapping.childRecord) {
|
|
45
|
-
const
|
|
46
|
-
child.NewRecord();
|
|
47
|
-
child.Set(outputMapping.childRecord.parentField, record.RecordID);
|
|
65
|
+
const childMap = { [outputMapping.childRecord.parentField]: record.RecordID };
|
|
48
66
|
for (const [field, ref] of Object.entries(outputMapping.childRecord.map)) {
|
|
49
|
-
|
|
67
|
+
childMap[field] = resolveMappingRef(ref, sources);
|
|
68
|
+
}
|
|
69
|
+
if (dryRun) {
|
|
70
|
+
out.previewChild = childMap;
|
|
50
71
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
72
|
+
else {
|
|
73
|
+
const child = await provider.GetEntityObject(outputMapping.childRecord.entity, contextUser);
|
|
74
|
+
child.NewRecord();
|
|
75
|
+
for (const [field, value] of Object.entries(childMap)) {
|
|
76
|
+
child.Set(field, value);
|
|
77
|
+
}
|
|
78
|
+
const saved = await child.Save();
|
|
79
|
+
if (!saved) {
|
|
80
|
+
throw new Error(`applyOutputMapping: failed creating '${outputMapping.childRecord.entity}' child: ${child.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
81
|
+
}
|
|
82
|
+
out.createdChildID = child.FirstPrimaryKey?.Value != null ? String(child.FirstPrimaryKey.Value) : undefined;
|
|
54
83
|
}
|
|
55
|
-
out.createdChildID = child.FirstPrimaryKey?.Value != null ? String(child.FirstPrimaryKey.Value) : undefined;
|
|
56
84
|
}
|
|
57
85
|
return out;
|
|
58
86
|
}
|
package/dist/writeBack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBack.js","sourceRoot":"","sources":["../src/writeBack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,YAAY,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"writeBack.js","sourceRoot":"","sources":["../src/writeBack.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.44.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,18 +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/field-rules-transforms": "5.
|
|
24
|
-
"@memberjunction/record-set-processor-base": "5.
|
|
25
|
-
"@memberjunction/actions": "5.
|
|
26
|
-
"@memberjunction/actions-base": "5.
|
|
27
|
-
"@memberjunction/ai-agents": "5.
|
|
28
|
-
"@memberjunction/aiengine": "5.
|
|
29
|
-
"@memberjunction/ai-prompts": "5.
|
|
30
|
-
"@memberjunction/ai-core-plus": "5.
|
|
31
|
-
"@memberjunction/templates": "5.
|
|
20
|
+
"@memberjunction/core": "5.44.0",
|
|
21
|
+
"@memberjunction/global": "5.44.0",
|
|
22
|
+
"@memberjunction/core-entities": "5.44.0",
|
|
23
|
+
"@memberjunction/field-rules-transforms": "5.44.0",
|
|
24
|
+
"@memberjunction/record-set-processor-base": "5.44.0",
|
|
25
|
+
"@memberjunction/actions": "5.44.0",
|
|
26
|
+
"@memberjunction/actions-base": "5.44.0",
|
|
27
|
+
"@memberjunction/ai-agents": "5.44.0",
|
|
28
|
+
"@memberjunction/aiengine": "5.44.0",
|
|
29
|
+
"@memberjunction/ai-prompts": "5.44.0",
|
|
30
|
+
"@memberjunction/ai-core-plus": "5.44.0",
|
|
31
|
+
"@memberjunction/templates": "5.44.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "24.10.11",
|