@memberjunction/actions-base 5.50.0 → 6.1.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +7 -0
  2. package/dist/ActionEngine-Base.d.ts +50 -1
  3. package/dist/ActionEngine-Base.d.ts.map +1 -1
  4. package/dist/ActionEngine-Base.js +15 -0
  5. package/dist/ActionEngine-Base.js.map +1 -1
  6. package/dist/EntityActionEngine-Base.d.ts +20 -0
  7. package/dist/EntityActionEngine-Base.d.ts.map +1 -1
  8. package/dist/EntityActionEngine-Base.js +31 -2
  9. package/dist/EntityActionEngine-Base.js.map +1 -1
  10. package/dist/EntityActionScopeResolver.d.ts +93 -0
  11. package/dist/EntityActionScopeResolver.d.ts.map +1 -0
  12. package/dist/EntityActionScopeResolver.js +145 -0
  13. package/dist/EntityActionScopeResolver.js.map +1 -0
  14. package/dist/ParamRedaction.d.ts +97 -0
  15. package/dist/ParamRedaction.d.ts.map +1 -0
  16. package/dist/ParamRedaction.js +142 -0
  17. package/dist/ParamRedaction.js.map +1 -0
  18. package/dist/__tests__/EntityActionEngine-Base.test.d.ts +2 -0
  19. package/dist/__tests__/EntityActionEngine-Base.test.d.ts.map +1 -0
  20. package/dist/__tests__/EntityActionEngine-Base.test.js +160 -0
  21. package/dist/__tests__/EntityActionEngine-Base.test.js.map +1 -0
  22. package/dist/__tests__/EntityActionScopeResolver.test.d.ts +2 -0
  23. package/dist/__tests__/EntityActionScopeResolver.test.d.ts.map +1 -0
  24. package/dist/__tests__/EntityActionScopeResolver.test.js +149 -0
  25. package/dist/__tests__/EntityActionScopeResolver.test.js.map +1 -0
  26. package/dist/__tests__/ParamRedaction.test.d.ts +2 -0
  27. package/dist/__tests__/ParamRedaction.test.d.ts.map +1 -0
  28. package/dist/__tests__/ParamRedaction.test.js +190 -0
  29. package/dist/__tests__/ParamRedaction.test.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/package.json +12 -12
@@ -0,0 +1,190 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ /**
3
+ * `ParamRedaction` needs only two things from `@memberjunction/core`: the `BaseEntity` class (for the
4
+ * `instanceof` check that routes a live record through `GetAll()`) and nothing else. Mocking it keeps
5
+ * these tests free of the provider/metadata bootstrap.
6
+ */
7
+ vi.mock('@memberjunction/core', () => ({
8
+ // Declared inside the factory: vi.mock is hoisted above every top-level binding in the file.
9
+ BaseEntity: class MockBaseEntity {
10
+ constructor(data) {
11
+ this._data = data;
12
+ }
13
+ // Deliberately a getter, exactly like the generated entity classes — this is the whole reason
14
+ // 'Entity Object Data' and GetAll() exist.
15
+ get Name() { return this._data['Name']; }
16
+ GetAll() { return { ...this._data }; }
17
+ }
18
+ }));
19
+ // The mocked class, re-imported so tests can construct it.
20
+ import { BaseEntity } from '@memberjunction/core';
21
+ const MockBaseEntity = BaseEntity;
22
+ import { RedactParams, RedactParamsToJSON, IsRedactedParam, MAX_REDACTED_KEYS } from '../ParamRedaction.js';
23
+ // ── Test fixture builders ────────────────────────────────────────────────────────────────────────
24
+ // The redaction code reads only a handful of fields off each entity, so partial literals cast through
25
+ // their real types keep the tests readable without standing up generated entity instances.
26
+ function actionParam(name, value, type = 'Input') {
27
+ return { Name: name, Value: value, Type: type };
28
+ }
29
+ function definition(id, name, logValue = true) {
30
+ return { ID: id, Name: name, LogValue: logValue };
31
+ }
32
+ function binding(actionParamID, valueType, logValue = null) {
33
+ return { ActionParamID: actionParamID, ValueType: valueType, LogValue: logValue };
34
+ }
35
+ function asRedacted(param) {
36
+ expect(IsRedactedParam(param)).toBe(true);
37
+ return param;
38
+ }
39
+ describe('RedactParams', () => {
40
+ describe('rule 1 — whole-record value types are never logged', () => {
41
+ it.each(['Entity Object', 'Entity Object Data'])('suppresses a value bound as %s', (valueType) => {
42
+ const result = RedactParams([actionParam('Record', { ID: 'x', Amount: 42 })], [definition('p1', 'Record')], [binding('p1', valueType)]);
43
+ const redacted = asRedacted(result[0]);
44
+ expect(redacted.Reason).toBe('WholeRecordValueType');
45
+ expect(redacted.ValueType).toBe(valueType);
46
+ expect(JSON.stringify(result)).not.toContain('42');
47
+ });
48
+ it('is case- and whitespace-insensitive on ValueType', () => {
49
+ const result = RedactParams([actionParam('Record', { Secret: 'nope' })], [definition('p1', 'Record')], [binding('p1', ' entity OBJECT data ')]);
50
+ expect(asRedacted(result[0]).Reason).toBe('WholeRecordValueType');
51
+ });
52
+ it('cannot be re-enabled by LogValue=true on the binding', () => {
53
+ const result = RedactParams([actionParam('Record', { Secret: 'nope' })], [definition('p1', 'Record')], [binding('p1', 'Entity Object', true)]);
54
+ expect(asRedacted(result[0]).Reason).toBe('WholeRecordValueType');
55
+ expect(JSON.stringify(result)).not.toContain('nope');
56
+ });
57
+ it('cannot be re-enabled by LogValue=true on the definition', () => {
58
+ const result = RedactParams([actionParam('Record', { Secret: 'nope' })], [definition('p1', 'Record', true)], [binding('p1', 'Entity Object Data')]);
59
+ expect(asRedacted(result[0]).Reason).toBe('WholeRecordValueType');
60
+ });
61
+ });
62
+ describe('rule 2 — per-binding LogValue override', () => {
63
+ it('suppresses when the binding says 0, even for a safe value type', () => {
64
+ const result = RedactParams([actionParam('Body', 'a private message')], [definition('p1', 'Body')], [binding('p1', 'Static', false)]);
65
+ const redacted = asRedacted(result[0]);
66
+ expect(redacted.Reason).toBe('BindingLogValueFalse');
67
+ expect(JSON.stringify(result)).not.toContain('private message');
68
+ });
69
+ it('binding LogValue=true overrides a definition that opted out', () => {
70
+ const result = RedactParams([actionParam('Body', 'visible here')], [definition('p1', 'Body', false)], [binding('p1', 'Static', true)]);
71
+ expect(IsRedactedParam(result[0])).toBe(false);
72
+ expect(result[0].Value).toBe('visible here');
73
+ });
74
+ it('binding LogValue=null inherits the definition', () => {
75
+ const suppressed = RedactParams([actionParam('Body', 'hidden')], [definition('p1', 'Body', false)], [binding('p1', 'Static', null)]);
76
+ expect(asRedacted(suppressed[0]).Reason).toBe('ParamLogValueFalse');
77
+ const logged = RedactParams([actionParam('Body', 'shown')], [definition('p1', 'Body', true)], [binding('p1', 'Static', null)]);
78
+ expect(IsRedactedParam(logged[0])).toBe(false);
79
+ });
80
+ });
81
+ describe('rule 3 — parameter definition LogValue', () => {
82
+ it('suppresses on a direct invocation with no binding at all', () => {
83
+ const result = RedactParams([actionParam('Data', { rows: [1, 2, 3] })], [definition('p1', 'Data', false)]);
84
+ expect(asRedacted(result[0]).Reason).toBe('ParamLogValueFalse');
85
+ });
86
+ it('matches the definition case-insensitively and trimmed', () => {
87
+ const result = RedactParams([actionParam(' dATA ', 'x')], [definition('p1', 'Data', false)]);
88
+ expect(asRedacted(result[0]).Reason).toBe('ParamLogValueFalse');
89
+ });
90
+ it('logs an undeclared parameter — there is no declaration to opt out with', () => {
91
+ const result = RedactParams([actionParam('Ad Hoc', 'value')], [definition('p1', 'Something Else', false)]);
92
+ expect(IsRedactedParam(result[0])).toBe(false);
93
+ });
94
+ it('logs when no definitions are supplied at all', () => {
95
+ const result = RedactParams([actionParam('Anything', 'value')]);
96
+ expect(IsRedactedParam(result[0])).toBe(false);
97
+ });
98
+ });
99
+ describe('shape without content', () => {
100
+ it('records key count and key names for an object, but no values', () => {
101
+ const redacted = asRedacted(RedactParams([actionParam('Record', { ID: 'abc', Amount: 42, Notes: 'confidential' })], [definition('p1', 'Record')], [binding('p1', 'Entity Object Data')])[0]);
102
+ expect(redacted.KeyCount).toBe(3);
103
+ expect(redacted.Keys).toEqual(['ID', 'Amount', 'Notes']);
104
+ expect(redacted.KeysElided).toBeUndefined();
105
+ expect(redacted.ByteLength).toBeGreaterThan(0);
106
+ expect(JSON.stringify(redacted)).not.toContain('confidential');
107
+ });
108
+ it('truncates the key list on a very wide record and flags the elision', () => {
109
+ const wide = {};
110
+ for (let i = 0; i < MAX_REDACTED_KEYS + 10; i++) {
111
+ wide[`Field${i}`] = i;
112
+ }
113
+ const redacted = asRedacted(RedactParams([actionParam('Record', wide)], [definition('p1', 'Record')], [binding('p1', 'Entity Object')])[0]);
114
+ expect(redacted.KeyCount).toBe(MAX_REDACTED_KEYS + 10);
115
+ expect(redacted.Keys).toHaveLength(MAX_REDACTED_KEYS);
116
+ expect(redacted.KeysElided).toBe(true);
117
+ });
118
+ it('describes a BaseEntity through GetAll() — its getters are not own properties', () => {
119
+ const entity = new MockBaseEntity({ ID: 'e1', Name: 'Widget', Amount: 7 });
120
+ const redacted = asRedacted(RedactParams([actionParam('Record', entity)], [definition('p1', 'Record')], [binding('p1', 'Entity Object')])[0]);
121
+ // Object.keys() on the live entity would report the private backing field, not the columns.
122
+ expect(redacted.KeyCount).toBe(3);
123
+ expect(redacted.Keys).toEqual(['ID', 'Name', 'Amount']);
124
+ expect(JSON.stringify(redacted)).not.toContain('Widget');
125
+ });
126
+ it('records item count for arrays', () => {
127
+ const redacted = asRedacted(RedactParams([actionParam('Messages', [{ text: 'a' }, { text: 'b' }])], [definition('p1', 'Messages', false)])[0]);
128
+ expect(redacted.ItemCount).toBe(2);
129
+ expect(redacted.KeyCount).toBeUndefined();
130
+ });
131
+ it('reports ByteLength 0 for a null value and does not throw', () => {
132
+ const redacted = asRedacted(RedactParams([actionParam('Data', null)], [definition('p1', 'Data', false)])[0]);
133
+ expect(redacted.ByteLength).toBe(0);
134
+ expect(redacted.KeyCount).toBeUndefined();
135
+ });
136
+ it('reports ByteLength -1 rather than throwing on a circular value', () => {
137
+ const circular = { name: 'loop' };
138
+ circular['self'] = circular;
139
+ const redacted = asRedacted(RedactParams([actionParam('Data', circular)], [definition('p1', 'Data', false)])[0]);
140
+ expect(redacted.ByteLength).toBe(-1);
141
+ });
142
+ it('always keeps the parameter name and type — those are never the secret', () => {
143
+ const redacted = asRedacted(RedactParams([actionParam('Payload', { x: 1 }, 'Both')], [definition('p1', 'Payload', false)])[0]);
144
+ expect(redacted.Name).toBe('Payload');
145
+ expect(redacted.Type).toBe('Both');
146
+ expect(redacted.Logged).toBe(false);
147
+ });
148
+ });
149
+ describe('pass-through and edges', () => {
150
+ it('returns loggable params by reference, unmodified', () => {
151
+ const param = actionParam('Count', 5);
152
+ const result = RedactParams([param], [definition('p1', 'Count')]);
153
+ expect(result[0]).toBe(param);
154
+ });
155
+ it('handles null/undefined param arrays', () => {
156
+ expect(RedactParams(null)).toEqual([]);
157
+ expect(RedactParams(undefined)).toEqual([]);
158
+ });
159
+ it('redacts only the parameters that need it, leaving the rest intact', () => {
160
+ const result = RedactParams([actionParam('Record', { Secret: 'x' }), actionParam('Mode', 'fast')], [definition('p1', 'Record'), definition('p2', 'Mode')], [binding('p1', 'Entity Object Data'), binding('p2', 'Static')]);
161
+ expect(IsRedactedParam(result[0])).toBe(true);
162
+ expect(IsRedactedParam(result[1])).toBe(false);
163
+ expect(result[1].Value).toBe('fast');
164
+ });
165
+ });
166
+ describe('RedactParamsToJSON', () => {
167
+ it('produces a JSON string with the value absent and the shape present', () => {
168
+ const json = RedactParamsToJSON([actionParam('Record', { ID: 'abc', Ssn: '123-45-6789' })], [definition('p1', 'Record')], [binding('p1', 'Entity Object Data')]);
169
+ expect(json).not.toContain('123-45-6789');
170
+ const parsed = JSON.parse(json);
171
+ expect(parsed[0].Logged).toBe(false);
172
+ expect(parsed[0].Reason).toBe('WholeRecordValueType');
173
+ expect(parsed[0].Keys).toEqual(['ID', 'Ssn']);
174
+ });
175
+ it('round-trips normal values unchanged', () => {
176
+ const json = RedactParamsToJSON([actionParam('Mode', 'fast')], [definition('p1', 'Mode')]);
177
+ expect(JSON.parse(json)).toEqual([{ Name: 'Mode', Value: 'fast', Type: 'Input' }]);
178
+ });
179
+ });
180
+ });
181
+ describe('IsRedactedParam', () => {
182
+ it('distinguishes a redaction record from a live param', () => {
183
+ expect(IsRedactedParam(actionParam('X', 1))).toBe(false);
184
+ expect(IsRedactedParam({ Name: 'X', Type: 'Input', Logged: false, Reason: 'ParamLogValueFalse', ByteLength: 0 })).toBe(true);
185
+ });
186
+ it('does not treat a param whose VALUE is false as redacted', () => {
187
+ expect(IsRedactedParam(actionParam('Flag', false))).toBe(false);
188
+ });
189
+ });
190
+ //# sourceMappingURL=ParamRedaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParamRedaction.test.js","sourceRoot":"","sources":["../../src/__tests__/ParamRedaction.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './ActionEngine-Base.js';
2
+ export * from './ParamRedaction.js';
3
+ export * from './EntityActionScopeResolver.js';
2
4
  export * from './MJActionEntityExtended.js';
3
5
  export * from './EntityActionEngine-Base.js';
4
6
  export * from './MJEntityActionEntityExtended.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from './ActionEngine-Base.js';
2
+ export * from './ParamRedaction.js';
3
+ export * from './EntityActionScopeResolver.js';
2
4
  export * from './MJActionEntityExtended.js';
3
5
  export * from './EntityActionEngine-Base.js';
4
6
  export * from './MJEntityActionEntityExtended.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,19 +1,13 @@
1
1
  {
2
2
  "name": "@memberjunction/actions-base",
3
3
  "type": "module",
4
- "version": "5.50.0",
4
+ "version": "6.1.0-edge.0",
5
5
  "description": "Base Classes for MemberJunction Actions. This library is used on both server and network nodes.",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "files": [
9
9
  "/dist"
10
10
  ],
11
- "scripts": {
12
- "start": "ts-node-dev src/index.ts",
13
- "build": "tsc && tsc-alias -f",
14
- "test": "vitest run",
15
- "test:watch": "vitest"
16
- },
17
11
  "author": "MemberJunction.com",
18
12
  "license": "ISC",
19
13
  "devDependencies": {
@@ -21,14 +15,20 @@
21
15
  "typescript": "^5.9.3"
22
16
  },
23
17
  "dependencies": {
24
- "@memberjunction/code-execution": "5.50.0",
25
- "@memberjunction/core": "5.50.0",
26
- "@memberjunction/core-entities": "5.50.0",
27
- "@memberjunction/global": "5.50.0",
18
+ "@memberjunction/code-execution": "6.1.0-edge.0",
19
+ "@memberjunction/core": "6.1.0-edge.0",
20
+ "@memberjunction/core-entities": "6.1.0-edge.0",
21
+ "@memberjunction/global": "6.1.0-edge.0",
28
22
  "zod": "^3.25.0"
29
23
  },
30
24
  "repository": {
31
25
  "type": "git",
32
26
  "url": "https://github.com/MemberJunction/MJ"
27
+ },
28
+ "scripts": {
29
+ "start": "ts-node-dev src/index.ts",
30
+ "build": "tsc && tsc-alias -f",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest"
33
33
  }
34
- }
34
+ }