@memberjunction/entity-communications-server 6.2.0-edge.4 → 6.2.0-edge.6
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/__tests__/entity-communications.actingUser.test.d.ts +2 -0
- package/dist/__tests__/entity-communications.actingUser.test.d.ts.map +1 -0
- package/dist/__tests__/entity-communications.actingUser.test.js +153 -0
- package/dist/__tests__/entity-communications.actingUser.test.js.map +1 -0
- package/dist/__tests__/entity-communications.deniedAddress.test.d.ts +2 -0
- package/dist/__tests__/entity-communications.deniedAddress.test.d.ts.map +1 -0
- package/dist/__tests__/entity-communications.deniedAddress.test.js +125 -0
- package/dist/__tests__/entity-communications.deniedAddress.test.js.map +1 -0
- package/dist/__tests__/entity-communications.test.js +1 -0
- package/dist/__tests__/entity-communications.test.js.map +1 -1
- package/dist/entity-communications.d.ts +66 -4
- package/dist/entity-communications.d.ts.map +1 -1
- package/dist/entity-communications.js +159 -67
- package/dist/entity-communications.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-communications.actingUser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/entity-communications.actingUser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* An entity communication reads recipient rows and related-entity rows and returns them (with the
|
|
4
|
+
* rendered messages) to the caller, or merges them into mail. Every one of those reads must run
|
|
5
|
+
* as the acting user, never the engine's own context user, and no field the acting user cannot
|
|
6
|
+
* read may reach the recipient data, the context data, or a rendered message.
|
|
7
|
+
*/
|
|
8
|
+
const SYSTEM_USER = { ID: 'system-user', Name: 'System' };
|
|
9
|
+
const SENDER = { ID: 'sender-user', Name: 'Sender' };
|
|
10
|
+
const captured = { runViews: [], sendUser: undefined, runViewProviders: [], metadataBuilt: 0 };
|
|
11
|
+
/** What the database holds. A real provider narrows these per user; `narrowAtSource` toggles that. */
|
|
12
|
+
const CUSTOMERS = [{ ID: 'c1', Email: 'c1@example.com', Salary: '250000' }];
|
|
13
|
+
const ORDERS = [{ ID: 'o1', CustomerID: 'c1', Discount: '40%' }];
|
|
14
|
+
const DENIED_FOR_SENDER = { Customers: ['salary'], Orders: ['discount'] };
|
|
15
|
+
const state = { narrowAtSource: true };
|
|
16
|
+
function denied(entityName, user) {
|
|
17
|
+
return new Set(user?.ID === SENDER.ID ? DENIED_FOR_SENDER[entityName] ?? [] : []);
|
|
18
|
+
}
|
|
19
|
+
function narrow(rows, entityName, user) {
|
|
20
|
+
if (!state.narrowAtSource)
|
|
21
|
+
return rows.map(r => ({ ...r }));
|
|
22
|
+
const d = denied(entityName, user);
|
|
23
|
+
return rows.map(r => Object.fromEntries(Object.entries(r).filter(([k]) => !d.has(k.toLowerCase()))));
|
|
24
|
+
}
|
|
25
|
+
function fakeEntity(name, fieldNames) {
|
|
26
|
+
return {
|
|
27
|
+
ID: name === 'Customers' ? 'customers-id' : 'orders-id',
|
|
28
|
+
Name: name,
|
|
29
|
+
EnableFieldLevelSecurity: true,
|
|
30
|
+
FieldLevelSecurityApplies: true,
|
|
31
|
+
Fields: fieldNames.map(n => ({ Name: n })),
|
|
32
|
+
FirstPrimaryKey: { Name: 'ID', NeedsQuotes: true },
|
|
33
|
+
PreferredCommunicationField: '',
|
|
34
|
+
GetDeniedReadFields: (user) => denied(name, user),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const ENTITIES = [fakeEntity('Customers', ['ID', 'Email', 'Salary']), fakeEntity('Orders', ['ID', 'CustomerID', 'Discount'])];
|
|
38
|
+
vi.mock('@memberjunction/core', () => ({
|
|
39
|
+
LogStatus: vi.fn(),
|
|
40
|
+
Metadata: vi.fn().mockImplementation(function () {
|
|
41
|
+
captured.metadataBuilt++;
|
|
42
|
+
return { Entities: ENTITIES, EntityByName: (n) => ENTITIES.find(e => e.Name === n) };
|
|
43
|
+
}),
|
|
44
|
+
RunView: vi.fn().mockImplementation(function (provider) {
|
|
45
|
+
captured.runViewProviders.push(provider);
|
|
46
|
+
return {
|
|
47
|
+
RunView: async (params, user) => {
|
|
48
|
+
captured.runViews.push({ params, user });
|
|
49
|
+
const isOrders = params.EntityName === 'Orders';
|
|
50
|
+
return { Success: true, Results: isOrders ? narrow(ORDERS, 'Orders', user) : narrow(CUSTOMERS, 'Customers', user) };
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}),
|
|
54
|
+
}));
|
|
55
|
+
vi.mock('@memberjunction/global', () => ({
|
|
56
|
+
UUIDsEqual: (a, b) => a === b,
|
|
57
|
+
}));
|
|
58
|
+
vi.mock('@memberjunction/communication-engine', () => ({
|
|
59
|
+
CommunicationEngine: {
|
|
60
|
+
Instance: {
|
|
61
|
+
Config: vi.fn(),
|
|
62
|
+
Providers: [{ Name: 'SendGrid', SupportsSending: true, MessageTypes: [{ Name: 'Email', CommunicationBaseMessageTypeID: 'bmt-email' }] }],
|
|
63
|
+
SendMessages: vi.fn().mockImplementation(async (_p, _t, _m, recipients, _preview, _cred, user) => {
|
|
64
|
+
captured.sendUser = user;
|
|
65
|
+
return recipients.map(r => ({ Success: true, Message: { ProcessedBody: JSON.stringify(r.ContextData) } }));
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}));
|
|
70
|
+
vi.mock('@memberjunction/entity-communications-base', () => {
|
|
71
|
+
class MockBase {
|
|
72
|
+
constructor() {
|
|
73
|
+
this.ContextUser = SYSTEM_USER;
|
|
74
|
+
}
|
|
75
|
+
TryThrowIfNotLoaded() { }
|
|
76
|
+
static getInstance() { return new MockBase(); }
|
|
77
|
+
GetEntityCommunicationMessageTypes() {
|
|
78
|
+
return [{ BaseMessageTypeID: 'bmt-email', CommunicationFields: [{ FieldName: 'Email', Priority: 1 }] }];
|
|
79
|
+
}
|
|
80
|
+
EntitySupportsCommunication() { return true; }
|
|
81
|
+
}
|
|
82
|
+
return { EntityCommunicationsEngineBase: MockBase };
|
|
83
|
+
});
|
|
84
|
+
import { EntityCommunicationsEngine } from '../entity-communications.js';
|
|
85
|
+
function params(contextUser) {
|
|
86
|
+
const template = {
|
|
87
|
+
Params: [
|
|
88
|
+
{ Name: 'rec', Type: 'Record' },
|
|
89
|
+
{ Name: 'orders', Type: 'Entity', Entity: 'Orders', LinkedParameterField: 'CustomerID' },
|
|
90
|
+
],
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
EntityID: 'customers-id',
|
|
94
|
+
RunViewParams: { ViewID: 'view-1' },
|
|
95
|
+
ProviderName: 'SendGrid',
|
|
96
|
+
ProviderMessageTypeName: 'Email',
|
|
97
|
+
Message: { BodyTemplate: template, HTMLBodyTemplate: null, SubjectTemplate: null },
|
|
98
|
+
PreviewOnly: true,
|
|
99
|
+
IncludeProcessedMessages: true,
|
|
100
|
+
ContextUser: contextUser,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
describe('EntityCommunicationsEngine — runs as the acting user', () => {
|
|
104
|
+
beforeEach(() => {
|
|
105
|
+
captured.runViews = [];
|
|
106
|
+
captured.sendUser = undefined;
|
|
107
|
+
captured.runViewProviders = [];
|
|
108
|
+
captured.metadataBuilt = 0;
|
|
109
|
+
state.narrowAtSource = true;
|
|
110
|
+
});
|
|
111
|
+
it('fetches recipient and related rows as the passed user, not the engine context user', async () => {
|
|
112
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(SENDER));
|
|
113
|
+
expect(result.Success).toBe(true);
|
|
114
|
+
expect(captured.runViews).toHaveLength(2);
|
|
115
|
+
for (const rv of captured.runViews) {
|
|
116
|
+
expect(rv.user?.ID).toBe(SENDER.ID);
|
|
117
|
+
}
|
|
118
|
+
expect(captured.sendUser?.ID).toBe(SENDER.ID);
|
|
119
|
+
});
|
|
120
|
+
it('names the entity on the recipient view request', async () => {
|
|
121
|
+
await new EntityCommunicationsEngine().RunEntityCommunication(params(SENDER));
|
|
122
|
+
expect(captured.runViews[0].params.EntityName).toBe('Customers');
|
|
123
|
+
});
|
|
124
|
+
it('never puts a field the sender cannot read into recipient data, context data or rendered messages', async () => {
|
|
125
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(SENDER));
|
|
126
|
+
const serialized = JSON.stringify(result.Results);
|
|
127
|
+
expect(serialized).not.toContain('250000');
|
|
128
|
+
expect(serialized).not.toContain('40%');
|
|
129
|
+
expect(serialized).toContain('c1@example.com');
|
|
130
|
+
});
|
|
131
|
+
it('strips denied fields even when the rows come back wider than the sender may read', async () => {
|
|
132
|
+
state.narrowAtSource = false;
|
|
133
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(SENDER));
|
|
134
|
+
const serialized = JSON.stringify(result.Results);
|
|
135
|
+
expect(serialized).not.toContain('250000');
|
|
136
|
+
expect(serialized).not.toContain('40%');
|
|
137
|
+
});
|
|
138
|
+
it("REGRESSION: reads and looks up metadata through the request's provider when one is passed", async () => {
|
|
139
|
+
const requestProvider = { Entities: ENTITIES, EntityByName: (n) => ENTITIES.find(e => e.Name === n) };
|
|
140
|
+
const withProvider = { ...params(SENDER), Provider: requestProvider };
|
|
141
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(withProvider);
|
|
142
|
+
expect(result.Success).toBe(true);
|
|
143
|
+
expect(captured.runViewProviders).toEqual([requestProvider, requestProvider]);
|
|
144
|
+
expect(captured.metadataBuilt).toBe(0);
|
|
145
|
+
});
|
|
146
|
+
it('refuses to run without an acting user', async () => {
|
|
147
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(undefined));
|
|
148
|
+
expect(result.Success).toBe(false);
|
|
149
|
+
expect(result.ErrorMessage).toMatch(/ContextUser/);
|
|
150
|
+
expect(captured.runViews).toHaveLength(0);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=entity-communications.actingUser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-communications.actingUser.test.js","sourceRoot":"","sources":["../../src/__tests__/entity-communications.actingUser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-communications.deniedAddress.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/entity-communications.deniedAddress.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* A recipient whose address field the sender cannot read is skipped, not sent to an empty address.
|
|
4
|
+
* The skip is reported per recipient without revealing the address, the other recipients are still
|
|
5
|
+
* sent, and a preview reports the same thing a send does.
|
|
6
|
+
*/
|
|
7
|
+
const SENDER = { ID: 'sender-user', Name: 'Sender' };
|
|
8
|
+
const captured = { sent: [] };
|
|
9
|
+
const state = { preferredField: '', denied: [], rows: [] };
|
|
10
|
+
function narrow(rows) {
|
|
11
|
+
return rows.map(r => Object.fromEntries(Object.entries(r).filter(([k]) => !state.denied.includes(k.toLowerCase()))));
|
|
12
|
+
}
|
|
13
|
+
const CUSTOMERS = {
|
|
14
|
+
ID: 'customers-id',
|
|
15
|
+
Name: 'Customers',
|
|
16
|
+
EnableFieldLevelSecurity: true,
|
|
17
|
+
FieldLevelSecurityApplies: true,
|
|
18
|
+
Fields: ['ID', 'PreferredField', 'Email', 'Phone'].map(n => ({ Name: n })),
|
|
19
|
+
FirstPrimaryKey: { Name: 'ID', NeedsQuotes: true },
|
|
20
|
+
get PreferredCommunicationField() { return state.preferredField; },
|
|
21
|
+
GetDeniedReadFields: () => new Set(state.denied),
|
|
22
|
+
};
|
|
23
|
+
vi.mock('@memberjunction/core', () => ({
|
|
24
|
+
LogStatus: vi.fn(),
|
|
25
|
+
Metadata: vi.fn().mockImplementation(function () {
|
|
26
|
+
return { Entities: [CUSTOMERS], EntityByName: () => CUSTOMERS };
|
|
27
|
+
}),
|
|
28
|
+
RunView: vi.fn().mockImplementation(function () {
|
|
29
|
+
return { RunView: async () => ({ Success: true, Results: narrow(state.rows) }) };
|
|
30
|
+
}),
|
|
31
|
+
}));
|
|
32
|
+
vi.mock('@memberjunction/global', () => ({
|
|
33
|
+
UUIDsEqual: (a, b) => a === b,
|
|
34
|
+
}));
|
|
35
|
+
vi.mock('@memberjunction/communication-engine', () => ({
|
|
36
|
+
CommunicationEngine: {
|
|
37
|
+
Instance: {
|
|
38
|
+
Config: vi.fn(),
|
|
39
|
+
Providers: [{ Name: 'SendGrid', SupportsSending: true, MessageTypes: [{ Name: 'Email', CommunicationBaseMessageTypeID: 'bmt-email' }] }],
|
|
40
|
+
SendMessages: vi.fn().mockImplementation(async (_p, _t, _m, recipients) => {
|
|
41
|
+
captured.sent.push(recipients);
|
|
42
|
+
return recipients.map(r => ({ Success: !!r.To, Error: r.To ? '' : 'No recipient address', Message: { To: r.To } }));
|
|
43
|
+
}),
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
vi.mock('@memberjunction/entity-communications-base', () => {
|
|
48
|
+
class MockBase {
|
|
49
|
+
TryThrowIfNotLoaded() { }
|
|
50
|
+
static getInstance() { return new MockBase(); }
|
|
51
|
+
GetEntityCommunicationMessageTypes() {
|
|
52
|
+
return [{ BaseMessageTypeID: 'bmt-email', CommunicationFields: [{ FieldName: 'Email', Priority: 1 }] }];
|
|
53
|
+
}
|
|
54
|
+
EntitySupportsCommunication() { return true; }
|
|
55
|
+
}
|
|
56
|
+
return { EntityCommunicationsEngineBase: MockBase };
|
|
57
|
+
});
|
|
58
|
+
import { EntityCommunicationsEngine } from '../entity-communications.js';
|
|
59
|
+
function params(previewOnly) {
|
|
60
|
+
return {
|
|
61
|
+
EntityID: 'customers-id',
|
|
62
|
+
RunViewParams: { ViewID: 'view-1' },
|
|
63
|
+
ProviderName: 'SendGrid',
|
|
64
|
+
ProviderMessageTypeName: 'Email',
|
|
65
|
+
Message: { Body: 'Hello', BodyTemplate: null, HTMLBodyTemplate: null, SubjectTemplate: null },
|
|
66
|
+
PreviewOnly: previewOnly,
|
|
67
|
+
IncludeProcessedMessages: true,
|
|
68
|
+
ContextUser: SENDER,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const SKIP_MESSAGE = /Recipient skipped: the sender cannot read the address field/;
|
|
72
|
+
describe.each([true, false])('EntityCommunicationsEngine — address the sender cannot read (previewOnly=%s)', (previewOnly) => {
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
captured.sent = [];
|
|
75
|
+
state.preferredField = '';
|
|
76
|
+
state.denied = [];
|
|
77
|
+
state.rows = [
|
|
78
|
+
{ ID: 'c1', PreferredField: 'Email', Email: 'secret-1@example.com', Phone: '555-0001' },
|
|
79
|
+
{ ID: 'c2', PreferredField: 'Phone', Email: 'secret-2@example.com', Phone: '555-0002' },
|
|
80
|
+
];
|
|
81
|
+
});
|
|
82
|
+
it('skips every recipient when the entity-level address field is denied, sending nothing', async () => {
|
|
83
|
+
state.denied = ['email'];
|
|
84
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(previewOnly));
|
|
85
|
+
expect(captured.sent.flat()).toHaveLength(0);
|
|
86
|
+
expect(result.Success).toBe(false);
|
|
87
|
+
expect(result.ErrorMessage).toMatch(SKIP_MESSAGE);
|
|
88
|
+
expect(result.Results).toHaveLength(2);
|
|
89
|
+
for (const item of result.Results ?? []) {
|
|
90
|
+
expect(item.Skipped).toBe(true);
|
|
91
|
+
expect(item.SkipReason).toMatch(SKIP_MESSAGE);
|
|
92
|
+
}
|
|
93
|
+
expect(JSON.stringify(result)).not.toContain('secret-');
|
|
94
|
+
});
|
|
95
|
+
it('skips only the recipients whose preferred address field is denied, and sends the rest', async () => {
|
|
96
|
+
state.preferredField = 'PreferredField';
|
|
97
|
+
state.denied = ['email'];
|
|
98
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(previewOnly));
|
|
99
|
+
expect(captured.sent.flat().map(r => r.To)).toEqual(['555-0002']);
|
|
100
|
+
// A partial run succeeds so the preview shows what could be built; the skip is still reported.
|
|
101
|
+
expect(result.Success).toBe(true);
|
|
102
|
+
expect(result.ErrorMessage).toMatch(SKIP_MESSAGE);
|
|
103
|
+
expect(result.Results).toHaveLength(2);
|
|
104
|
+
const [first, second] = result.Results ?? [];
|
|
105
|
+
expect(first.Skipped).toBe(true);
|
|
106
|
+
expect(first.SkipReason).toMatch(SKIP_MESSAGE);
|
|
107
|
+
expect(second.Skipped).toBeFalsy();
|
|
108
|
+
expect(second.Message).toEqual({ To: '555-0002' });
|
|
109
|
+
expect(JSON.stringify(result)).not.toContain('secret-');
|
|
110
|
+
});
|
|
111
|
+
it('skips a recipient when the field naming its preferred address is itself denied', async () => {
|
|
112
|
+
state.preferredField = 'PreferredField';
|
|
113
|
+
state.denied = ['preferredfield'];
|
|
114
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(previewOnly));
|
|
115
|
+
expect(captured.sent.flat()).toHaveLength(0);
|
|
116
|
+
expect((result.Results ?? []).every(r => r.Skipped)).toBe(true);
|
|
117
|
+
});
|
|
118
|
+
it('sends to everyone and reports no skip when the sender can read every address', async () => {
|
|
119
|
+
const result = await new EntityCommunicationsEngine().RunEntityCommunication(params(previewOnly));
|
|
120
|
+
expect(captured.sent.flat().map(r => r.To)).toEqual(['secret-1@example.com', 'secret-2@example.com']);
|
|
121
|
+
expect(result.Success).toBe(true);
|
|
122
|
+
expect((result.Results ?? []).some(r => r.Skipped)).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=entity-communications.deniedAddress.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-communications.deniedAddress.test.js","sourceRoot":"","sources":["../../src/__tests__/entity-communications.deniedAddress.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -211,6 +211,7 @@ describe('EntityCommunicationsEngine', () => {
|
|
|
211
211
|
ProviderName: 'SendGrid',
|
|
212
212
|
ProviderMessageTypeName: 'Email',
|
|
213
213
|
Message: {},
|
|
214
|
+
ContextUser: { ID: 'user-1' },
|
|
214
215
|
});
|
|
215
216
|
expect(result.Success).toBe(false);
|
|
216
217
|
expect(result.ErrorMessage).toContain('not found');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-communications.test.js","sourceRoot":"","sources":["../../src/__tests__/entity-communications.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entity-communications.test.js","sourceRoot":"","sources":["../../src/__tests__/entity-communications.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,76 @@
|
|
|
1
1
|
import { Message, MessageRecipient } from "@memberjunction/communication-types";
|
|
2
|
-
import { EntityInfo } from "@memberjunction/core";
|
|
2
|
+
import { EntityInfo, IMetadataProvider, IRunViewProvider, RunView, RunViewParams, UserInfo } from "@memberjunction/core";
|
|
3
3
|
import { MJTemplateParamEntity } from "@memberjunction/core-entities";
|
|
4
4
|
import { MJEntityCommunicationMessageTypeEntityExtended, EntityCommunicationParams, EntityCommunicationResult, EntityCommunicationsEngineBase } from "@memberjunction/entity-communications-base";
|
|
5
|
+
/** One row of a recipient or related-entity view, as RunView returns it with `ResultType: 'simple'`. */
|
|
6
|
+
export type EntityCommunicationRecord = Record<string, unknown>;
|
|
7
|
+
/** One recipient built from a record: ready to send, or skipped with the reason why. */
|
|
8
|
+
export type EntityCommunicationRecipient = {
|
|
9
|
+
Recipient: MessageRecipient;
|
|
10
|
+
SkipReason?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The per-recipient result when the sender cannot read the field that holds the recipient's
|
|
14
|
+
* address. It names neither the field nor its value.
|
|
15
|
+
*/
|
|
16
|
+
export declare const RECIPIENT_ADDRESS_UNREADABLE_MESSAGE = "Recipient skipped: the sender cannot read the address field";
|
|
17
|
+
/** The provider of the request a communication serves: metadata lookups and reads both go through it. */
|
|
18
|
+
export type RequestProvider = IMetadataProvider & IRunViewProvider;
|
|
5
19
|
/**
|
|
6
20
|
* Server-side implementation of the entity communications engine
|
|
7
21
|
*/
|
|
8
22
|
export declare class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
23
|
+
/** A RunView on the request's provider, or on the process default for an in-process caller that passed none. */
|
|
24
|
+
protected RunViewFor(provider?: RequestProvider): RunView;
|
|
25
|
+
/** Entity metadata from the request's provider, or from the process default for an in-process caller that passed none. */
|
|
26
|
+
protected EntityLookupFor(provider?: RequestProvider): Pick<IMetadataProvider, 'Entities' | 'EntityByName'>;
|
|
9
27
|
static get Instance(): EntityCommunicationsEngine;
|
|
10
28
|
/**
|
|
11
|
-
* Executes a given message request against a view of records for a given entity
|
|
29
|
+
* Executes a given message request against a view of records for a given entity.
|
|
30
|
+
*
|
|
31
|
+
* Every read runs as `params.ContextUser`, the acting user, so row-level security, entity
|
|
32
|
+
* permissions and field-level security apply. A request without one is refused rather than run
|
|
33
|
+
* under the engine's own context user, which would let a preview read past all three.
|
|
12
34
|
*/
|
|
13
35
|
RunEntityCommunication(params: EntityCommunicationParams): Promise<EntityCommunicationResult>;
|
|
14
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Sends (or previews) the message to every recipient that is not skipped, and reports one result
|
|
38
|
+
* per recipient in the original order. A skipped recipient is reported with its reason (in its
|
|
39
|
+
* result item and in `ErrorMessage`) but never stops the others: the run succeeds when every
|
|
40
|
+
* recipient that was not skipped succeeded and at least one was sent, so a partial preview
|
|
41
|
+
* still shows the messages that could be built.
|
|
42
|
+
*/
|
|
43
|
+
protected SendToRecipients(params: EntityCommunicationParams, recipients: EntityCommunicationRecipient[], contextUser: UserInfo): Promise<EntityCommunicationResult>;
|
|
44
|
+
/** One line per distinct skip reason, with how many recipients it applied to. */
|
|
45
|
+
protected SummarizeSkips(recipients: EntityCommunicationRecipient[]): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Finds the provider and the entity's message type the request names, validating that the
|
|
48
|
+
* provider can send (and schedule, when the message asks for it).
|
|
49
|
+
*/
|
|
50
|
+
protected ResolveEntityMessageType(params: EntityCommunicationParams): MJEntityCommunicationMessageTypeEntityExtended;
|
|
51
|
+
/**
|
|
52
|
+
* Runs the caller's view of recipient records as `contextUser`, asking for every field of the
|
|
53
|
+
* entity. The provider narrows that list to the fields the user may read; the rows are stripped
|
|
54
|
+
* again here so a denied field can never reach a message.
|
|
55
|
+
*/
|
|
56
|
+
protected RunRecipientView(entityInfo: EntityInfo, runViewParams: RunViewParams, contextUser: UserInfo, provider?: RequestProvider): Promise<EntityCommunicationRecord[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Returns copies of `rows` without any field `contextUser` may not read on `entityInfo`, so a
|
|
59
|
+
* template that references a denied field renders it empty.
|
|
60
|
+
*/
|
|
61
|
+
protected StripDeniedReadFields(entityInfo: EntityInfo, rows: EntityCommunicationRecord[], contextUser: UserInfo): EntityCommunicationRecord[];
|
|
62
|
+
/**
|
|
63
|
+
* Builds one recipient per record, with the template context data each needs. `contextUser` is
|
|
64
|
+
* the acting user; related-entity data is read as that user. A record whose address field the
|
|
65
|
+
* acting user cannot read is returned as a skipped recipient, with no address and no context data.
|
|
66
|
+
*/
|
|
67
|
+
protected PopulateRecipientContextData(entityInfo: EntityInfo, entityMessageType: MJEntityCommunicationMessageTypeEntityExtended, message: Message, records: any[], contextUser?: UserInfo, provider?: RequestProvider): Promise<EntityCommunicationRecipient[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the acting user may read the field holding a recipient's address. With a record level
|
|
70
|
+
* preference, the field naming the address field must be readable too: when it is denied the
|
|
71
|
+
* record does not say which field holds the address.
|
|
72
|
+
*/
|
|
73
|
+
protected IsAddressFieldReadable(entityInfo: EntityInfo, addressField: string | undefined, deniedRead: Set<string>, recordLevelPref: boolean): boolean;
|
|
15
74
|
protected PopulateSingleRecipientContextData(record: any, relatedData: {
|
|
16
75
|
paramName: string;
|
|
17
76
|
data: any[];
|
|
@@ -21,10 +80,13 @@ export declare class EntityCommunicationsEngine extends EntityCommunicationsEngi
|
|
|
21
80
|
/**
|
|
22
81
|
* Returns an array of objects that have the distinct param names across all templates in use, and the complete data for
|
|
23
82
|
* those relationships for all of the recipient records provided to the method.
|
|
83
|
+
* Each related entity is read as `contextUser`, and its rows are stripped of fields that user may
|
|
84
|
+
* not read.
|
|
24
85
|
* @param message
|
|
25
86
|
* @param records
|
|
87
|
+
* @param contextUser the acting user; required, the read never falls back to the engine's own user
|
|
26
88
|
*/
|
|
27
|
-
protected GetRelatedData(message: Message, recipients: any[], recipientPrimaryKeyFieldName: string, recipientPrimaryKeyNeedsQuotes: boolean): Promise<{
|
|
89
|
+
protected GetRelatedData(message: Message, recipients: any[], recipientPrimaryKeyFieldName: string, recipientPrimaryKeyNeedsQuotes: boolean, contextUser?: UserInfo, provider?: RequestProvider): Promise<{
|
|
28
90
|
paramName: string;
|
|
29
91
|
data: any[];
|
|
30
92
|
}[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-communications.d.ts","sourceRoot":"","sources":["../src/entity-communications.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvH,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"entity-communications.d.ts","sourceRoot":"","sources":["../src/entity-communications.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,87 +2,156 @@ import { CommunicationEngine } from "@memberjunction/communication-engine";
|
|
|
2
2
|
import { Metadata, RunView } from "@memberjunction/core";
|
|
3
3
|
import { UUIDsEqual } from "@memberjunction/global";
|
|
4
4
|
import { EntityCommunicationsEngineBase } from "@memberjunction/entity-communications-base";
|
|
5
|
+
/**
|
|
6
|
+
* The per-recipient result when the sender cannot read the field that holds the recipient's
|
|
7
|
+
* address. It names neither the field nor its value.
|
|
8
|
+
*/
|
|
9
|
+
export const RECIPIENT_ADDRESS_UNREADABLE_MESSAGE = 'Recipient skipped: the sender cannot read the address field';
|
|
5
10
|
/**
|
|
6
11
|
* Server-side implementation of the entity communications engine
|
|
7
12
|
*/
|
|
8
13
|
export class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
14
|
+
/** A RunView on the request's provider, or on the process default for an in-process caller that passed none. */
|
|
15
|
+
RunViewFor(provider) {
|
|
16
|
+
return new RunView(provider); // global-provider-ok: falls back to the default only when no request provider was passed
|
|
17
|
+
}
|
|
18
|
+
/** Entity metadata from the request's provider, or from the process default for an in-process caller that passed none. */
|
|
19
|
+
EntityLookupFor(provider) {
|
|
20
|
+
return provider ?? new Metadata(); // global-provider-ok: falls back to the default only when no request provider was passed
|
|
21
|
+
}
|
|
9
22
|
static get Instance() {
|
|
10
23
|
return super.getInstance();
|
|
11
24
|
}
|
|
12
25
|
/**
|
|
13
|
-
* Executes a given message request against a view of records for a given entity
|
|
26
|
+
* Executes a given message request against a view of records for a given entity.
|
|
27
|
+
*
|
|
28
|
+
* Every read runs as `params.ContextUser`, the acting user, so row-level security, entity
|
|
29
|
+
* permissions and field-level security apply. A request without one is refused rather than run
|
|
30
|
+
* under the engine's own context user, which would let a preview read past all three.
|
|
14
31
|
*/
|
|
15
32
|
async RunEntityCommunication(params) {
|
|
16
33
|
try {
|
|
17
34
|
this.TryThrowIfNotLoaded();
|
|
18
|
-
const
|
|
19
|
-
|
|
35
|
+
const contextUser = params.ContextUser;
|
|
36
|
+
if (!contextUser)
|
|
37
|
+
throw new Error('EntityCommunicationParams.ContextUser is required: entity communications run as the acting user');
|
|
38
|
+
const provider = params.Provider;
|
|
39
|
+
const entityInfo = this.EntityLookupFor(provider).Entities.find(e => UUIDsEqual(e.ID, params.EntityID));
|
|
20
40
|
if (!entityInfo)
|
|
21
41
|
throw new Error(`Entity ${params.EntityID} not found`);
|
|
22
|
-
if (!this.EntitySupportsCommunication(params.EntityID))
|
|
42
|
+
if (!this.EntitySupportsCommunication(params.EntityID))
|
|
23
43
|
throw new Error(`Entity ${params.EntityID} does not support communication`);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
throw new Error(`Provider ${params.ProviderName} does not support sending messages`);
|
|
32
|
-
}
|
|
33
|
-
const message = params.Message;
|
|
34
|
-
if (message.SendAt && !provider.SupportsScheduledSending) {
|
|
35
|
-
throw new Error(`Provider ${params.ProviderName} does not support scheduled sending`);
|
|
36
|
-
}
|
|
37
|
-
const providerMessageType = provider.MessageTypes.find(mt => mt.Name.trim().toLowerCase() === params.ProviderMessageTypeName.trim().toLowerCase());
|
|
38
|
-
const entityMessageTypes = this.GetEntityCommunicationMessageTypes(params.EntityID);
|
|
39
|
-
const entityMessageType = entityMessageTypes.find(m => UUIDsEqual(m.BaseMessageTypeID, providerMessageType.CommunicationBaseMessageTypeID));
|
|
40
|
-
if (!entityMessageType) {
|
|
41
|
-
throw new Error(`Entity ${params.EntityID} does not support message type ${providerMessageType.CommunicationBaseMessageType}`);
|
|
42
|
-
}
|
|
43
|
-
// next our main job here is to run the view, get all the records, and then call the communication engine
|
|
44
|
-
const rv = new RunView();
|
|
45
|
-
const rvParams2 = {
|
|
46
|
-
...params.RunViewParams
|
|
47
|
-
};
|
|
48
|
-
// now change rvParams2.Fields to have ALL entity fields to make sure we get them all
|
|
49
|
-
rvParams2.Fields = entityInfo.Fields.map(f => f.Name);
|
|
50
|
-
const result = await rv.RunView(rvParams2, this.ContextUser);
|
|
51
|
-
if (result && result.Success) {
|
|
52
|
-
// have the results, now we can map the results to the types the comm engine needs and call SendMessages() in the comm engine
|
|
53
|
-
await CommunicationEngine.Instance.Config(false, this.ContextUser);
|
|
54
|
-
const recipients = await this.PopulateRecipientContextData(entityInfo, entityMessageType, params.Message, result.Results);
|
|
55
|
-
const sendResult = await CommunicationEngine.Instance.SendMessages(params.ProviderName, params.ProviderMessageTypeName, params.Message, recipients, params.PreviewOnly);
|
|
56
|
-
if (sendResult && sendResult.length === recipients.length) {
|
|
57
|
-
// make sure none of the messages failed
|
|
58
|
-
return {
|
|
59
|
-
Success: !sendResult.some(r => !r.Success),
|
|
60
|
-
ErrorMessage: sendResult.filter(r => !r.Success).map(r => r.Error).join('; '),
|
|
61
|
-
Results: sendResult.map((r, i) => {
|
|
62
|
-
return {
|
|
63
|
-
RecipientData: recipients[i],
|
|
64
|
-
Message: r.Message
|
|
65
|
-
};
|
|
66
|
-
})
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
throw new Error(`Failed to run view ${params.RunViewParams.ViewName}: ${result.ErrorMessage}`);
|
|
72
|
-
}
|
|
44
|
+
await CommunicationEngine.Instance.Config(false, contextUser);
|
|
45
|
+
const entityMessageType = this.ResolveEntityMessageType(params);
|
|
46
|
+
const records = await this.RunRecipientView(entityInfo, params.RunViewParams, contextUser, provider);
|
|
47
|
+
const recipients = await this.PopulateRecipientContextData(entityInfo, entityMessageType, params.Message, records, contextUser, provider);
|
|
48
|
+
return await this.SendToRecipients(params, recipients, contextUser);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
73
51
|
return {
|
|
74
52
|
Success: false,
|
|
75
|
-
ErrorMessage:
|
|
53
|
+
ErrorMessage: e instanceof Error ? e.message : String(e)
|
|
76
54
|
};
|
|
77
55
|
}
|
|
78
|
-
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Sends (or previews) the message to every recipient that is not skipped, and reports one result
|
|
59
|
+
* per recipient in the original order. A skipped recipient is reported with its reason (in its
|
|
60
|
+
* result item and in `ErrorMessage`) but never stops the others: the run succeeds when every
|
|
61
|
+
* recipient that was not skipped succeeded and at least one was sent, so a partial preview
|
|
62
|
+
* still shows the messages that could be built.
|
|
63
|
+
*/
|
|
64
|
+
async SendToRecipients(params, recipients, contextUser) {
|
|
65
|
+
const sendable = recipients.filter(r => !r.SkipReason).map(r => r.Recipient);
|
|
66
|
+
const sendResult = sendable.length === 0 ? [] :
|
|
67
|
+
await CommunicationEngine.Instance.SendMessages(params.ProviderName, params.ProviderMessageTypeName, params.Message, sendable, params.PreviewOnly, undefined, contextUser);
|
|
68
|
+
if (!sendResult || sendResult.length !== sendable.length) {
|
|
79
69
|
return {
|
|
80
70
|
Success: false,
|
|
81
|
-
ErrorMessage:
|
|
71
|
+
ErrorMessage: `Communication engine returned ${sendResult?.length ?? 0} results for ${sendable.length} recipients`
|
|
82
72
|
};
|
|
83
73
|
}
|
|
74
|
+
const results = [];
|
|
75
|
+
const errors = [];
|
|
76
|
+
let nextSent = 0;
|
|
77
|
+
for (const r of recipients) {
|
|
78
|
+
if (r.SkipReason) {
|
|
79
|
+
results.push({ RecipientData: r.Recipient, Message: undefined, Skipped: true, SkipReason: r.SkipReason });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const sent = sendResult[nextSent++];
|
|
83
|
+
results.push({ RecipientData: r.Recipient, Message: sent.Message });
|
|
84
|
+
if (!sent.Success)
|
|
85
|
+
errors.push(sent.Error);
|
|
86
|
+
}
|
|
87
|
+
const sendFailed = errors.length > 0;
|
|
88
|
+
errors.push(...this.SummarizeSkips(recipients));
|
|
89
|
+
return { Success: !sendFailed && sendable.length > 0, ErrorMessage: errors.join('; '), Results: results };
|
|
90
|
+
}
|
|
91
|
+
/** One line per distinct skip reason, with how many recipients it applied to. */
|
|
92
|
+
SummarizeSkips(recipients) {
|
|
93
|
+
const counts = new Map();
|
|
94
|
+
for (const r of recipients) {
|
|
95
|
+
if (r.SkipReason)
|
|
96
|
+
counts.set(r.SkipReason, (counts.get(r.SkipReason) ?? 0) + 1);
|
|
97
|
+
}
|
|
98
|
+
return [...counts].map(([reason, count]) => `${reason} (${count} recipient${count === 1 ? '' : 's'})`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Finds the provider and the entity's message type the request names, validating that the
|
|
102
|
+
* provider can send (and schedule, when the message asks for it).
|
|
103
|
+
*/
|
|
104
|
+
ResolveEntityMessageType(params) {
|
|
105
|
+
const provider = CommunicationEngine.Instance.Providers.find(p => p.Name.trim().toLowerCase() === params.ProviderName.trim().toLowerCase());
|
|
106
|
+
if (!provider)
|
|
107
|
+
throw new Error(`Provider ${params.ProviderName} not found`);
|
|
108
|
+
if (!provider.SupportsSending)
|
|
109
|
+
throw new Error(`Provider ${params.ProviderName} does not support sending messages`);
|
|
110
|
+
if (params.Message.SendAt && !provider.SupportsScheduledSending)
|
|
111
|
+
throw new Error(`Provider ${params.ProviderName} does not support scheduled sending`);
|
|
112
|
+
const providerMessageType = provider.MessageTypes.find(mt => mt.Name.trim().toLowerCase() === params.ProviderMessageTypeName.trim().toLowerCase());
|
|
113
|
+
if (!providerMessageType)
|
|
114
|
+
throw new Error(`Provider ${params.ProviderName} does not have message type ${params.ProviderMessageTypeName}`);
|
|
115
|
+
const entityMessageType = this.GetEntityCommunicationMessageTypes(params.EntityID).find(m => UUIDsEqual(m.BaseMessageTypeID, providerMessageType.CommunicationBaseMessageTypeID));
|
|
116
|
+
if (!entityMessageType)
|
|
117
|
+
throw new Error(`Entity ${params.EntityID} does not support message type ${providerMessageType.CommunicationBaseMessageType}`);
|
|
118
|
+
return entityMessageType;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Runs the caller's view of recipient records as `contextUser`, asking for every field of the
|
|
122
|
+
* entity. The provider narrows that list to the fields the user may read; the rows are stripped
|
|
123
|
+
* again here so a denied field can never reach a message.
|
|
124
|
+
*/
|
|
125
|
+
async RunRecipientView(entityInfo, runViewParams, contextUser, provider) {
|
|
126
|
+
const rvParams = {
|
|
127
|
+
...runViewParams,
|
|
128
|
+
EntityName: entityInfo.Name,
|
|
129
|
+
Fields: entityInfo.Fields.map(f => f.Name),
|
|
130
|
+
ResultType: 'simple'
|
|
131
|
+
};
|
|
132
|
+
const result = await this.RunViewFor(provider).RunView(rvParams, contextUser);
|
|
133
|
+
if (!result || !result.Success)
|
|
134
|
+
throw new Error(`Failed to run view ${runViewParams.ViewName ?? runViewParams.ViewID ?? entityInfo.Name}: ${result?.ErrorMessage}`);
|
|
135
|
+
return this.StripDeniedReadFields(entityInfo, result.Results, contextUser);
|
|
84
136
|
}
|
|
85
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Returns copies of `rows` without any field `contextUser` may not read on `entityInfo`, so a
|
|
139
|
+
* template that references a denied field renders it empty.
|
|
140
|
+
*/
|
|
141
|
+
StripDeniedReadFields(entityInfo, rows, contextUser) {
|
|
142
|
+
if (!entityInfo.FieldLevelSecurityApplies)
|
|
143
|
+
return rows;
|
|
144
|
+
const denied = entityInfo.GetDeniedReadFields(contextUser);
|
|
145
|
+
if (denied.size === 0)
|
|
146
|
+
return rows;
|
|
147
|
+
return rows.map(row => Object.fromEntries(Object.entries(row).filter(([key]) => !denied.has(key.trim().toLowerCase()))));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Builds one recipient per record, with the template context data each needs. `contextUser` is
|
|
151
|
+
* the acting user; related-entity data is read as that user. A record whose address field the
|
|
152
|
+
* acting user cannot read is returned as a skipped recipient, with no address and no context data.
|
|
153
|
+
*/
|
|
154
|
+
async PopulateRecipientContextData(entityInfo, entityMessageType, message, records, contextUser, provider) {
|
|
86
155
|
// we have now validated we are good on the message type requested...
|
|
87
156
|
// next up we will figure out which field to use for the entity, starting at the entity level and then going to the record level, IF the entity has
|
|
88
157
|
// a PreferredCommunicationField we will flag that here as recordLevelPref = true
|
|
@@ -93,7 +162,7 @@ export class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
|
93
162
|
if (hasTemplates) {
|
|
94
163
|
this.ValidateTemplateContextParamAlignment(message);
|
|
95
164
|
}
|
|
96
|
-
const relatedData = await this.GetRelatedData(message, records, entityInfo.FirstPrimaryKey.Name, entityInfo.FirstPrimaryKey.NeedsQuotes); // first-pk-ok: the recipient key is the FK target of each Entity-param's LinkedParameterField; FK targets are single-column by design
|
|
165
|
+
const relatedData = await this.GetRelatedData(message, records, entityInfo.FirstPrimaryKey.Name, entityInfo.FirstPrimaryKey.NeedsQuotes, contextUser, provider); // first-pk-ok: the recipient key is the FK target of each Entity-param's LinkedParameterField; FK targets are single-column by design
|
|
97
166
|
// assume that the template(s) if there are multiple, ALL use the same parameters for their contexts, that is validated above
|
|
98
167
|
const templates = [];
|
|
99
168
|
if (message.BodyTemplate) {
|
|
@@ -113,24 +182,41 @@ export class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
|
113
182
|
}
|
|
114
183
|
});
|
|
115
184
|
});
|
|
185
|
+
const deniedRead = contextUser && entityInfo.FieldLevelSecurityApplies ? entityInfo.GetDeniedReadFields(contextUser) : new Set();
|
|
116
186
|
const recipients = [];
|
|
117
187
|
for (const r of records) {
|
|
118
|
-
//
|
|
119
|
-
const
|
|
120
|
-
|
|
188
|
+
// the address field is the record level preferred field if the entity has one, otherwise the entity level preferred field
|
|
189
|
+
const addressField = !recordLevelPref ? entityLevelPrefField.FieldName : r[entityInfo.PreferredCommunicationField];
|
|
190
|
+
if (!this.IsAddressFieldReadable(entityInfo, addressField, deniedRead, recordLevelPref)) {
|
|
191
|
+
recipients.push({ Recipient: { To: undefined, ContextData: {} }, SkipReason: RECIPIENT_ADDRESS_UNREADABLE_MESSAGE });
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
// we have mapped the address based on preferences, next up, we need to populate the context data, if there are any templates
|
|
121
195
|
// if there are no templates, we skip this step to save time
|
|
122
196
|
const pkey = r[entityInfo.FirstPrimaryKey.Name]; // first-pk-ok: compared against LinkedParameterField, an FK back to the recipient entity — single-column by design
|
|
123
197
|
const retVal = {
|
|
124
|
-
To:
|
|
198
|
+
To: r[addressField],
|
|
125
199
|
ContextData: {}
|
|
126
200
|
};
|
|
127
201
|
if (hasTemplates) {
|
|
128
202
|
retVal.ContextData = await this.PopulateSingleRecipientContextData(r, relatedData, pkey, params);
|
|
129
203
|
}
|
|
130
|
-
recipients.push(retVal);
|
|
204
|
+
recipients.push({ Recipient: retVal });
|
|
131
205
|
}
|
|
132
206
|
return recipients;
|
|
133
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Whether the acting user may read the field holding a recipient's address. With a record level
|
|
210
|
+
* preference, the field naming the address field must be readable too: when it is denied the
|
|
211
|
+
* record does not say which field holds the address.
|
|
212
|
+
*/
|
|
213
|
+
IsAddressFieldReadable(entityInfo, addressField, deniedRead, recordLevelPref) {
|
|
214
|
+
if (recordLevelPref && deniedRead.has(entityInfo.PreferredCommunicationField.trim().toLowerCase()))
|
|
215
|
+
return false;
|
|
216
|
+
if (!addressField)
|
|
217
|
+
return true; // no address configured: the provider reports it, as before
|
|
218
|
+
return !deniedRead.has(String(addressField).trim().toLowerCase());
|
|
219
|
+
}
|
|
134
220
|
async PopulateSingleRecipientContextData(record, relatedData, pkey, params) {
|
|
135
221
|
// now, go through each template, and populate the context data for that param, but only do if we've not already processed that parameter since templates across Body/BodyHTML/Subject can share parameters
|
|
136
222
|
const contextData = {};
|
|
@@ -166,10 +252,15 @@ export class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
|
166
252
|
/**
|
|
167
253
|
* Returns an array of objects that have the distinct param names across all templates in use, and the complete data for
|
|
168
254
|
* those relationships for all of the recipient records provided to the method.
|
|
255
|
+
* Each related entity is read as `contextUser`, and its rows are stripped of fields that user may
|
|
256
|
+
* not read.
|
|
169
257
|
* @param message
|
|
170
258
|
* @param records
|
|
259
|
+
* @param contextUser the acting user; required, the read never falls back to the engine's own user
|
|
171
260
|
*/
|
|
172
|
-
async GetRelatedData(message, recipients, recipientPrimaryKeyFieldName, recipientPrimaryKeyNeedsQuotes) {
|
|
261
|
+
async GetRelatedData(message, recipients, recipientPrimaryKeyFieldName, recipientPrimaryKeyNeedsQuotes, contextUser, provider) {
|
|
262
|
+
if (!contextUser)
|
|
263
|
+
throw new Error('GetRelatedData requires the acting user');
|
|
173
264
|
// First, get a distinct list of params of type Entity
|
|
174
265
|
const templates = [];
|
|
175
266
|
if (message.BodyTemplate) {
|
|
@@ -200,16 +291,17 @@ export class EntityCommunicationsEngine extends EntityCommunicationsEngineBase {
|
|
|
200
291
|
const quotes = recipientPrimaryKeyNeedsQuotes ? "'" : "";
|
|
201
292
|
const filter = `${relatedField} in (${recipients.map(r => `${quotes}${r[recipientPrimaryKeyFieldName]}${quotes}`).join(',')})`;
|
|
202
293
|
const finalFilter = p.ExtraFilter ? `(${filter}) AND (${p.ExtraFilter})` : filter;
|
|
203
|
-
const rv = new RunView();
|
|
204
294
|
const params = {
|
|
205
295
|
EntityName: relatedEntity,
|
|
206
296
|
ExtraFilter: finalFilter,
|
|
297
|
+
ResultType: 'simple'
|
|
207
298
|
};
|
|
208
|
-
const result = await
|
|
299
|
+
const result = await this.RunViewFor(provider).RunView(params, contextUser);
|
|
209
300
|
if (result && result.Success) {
|
|
301
|
+
const relatedEntityInfo = this.EntityLookupFor(provider).EntityByName(relatedEntity);
|
|
210
302
|
data.push({
|
|
211
303
|
paramName: p.Name,
|
|
212
|
-
data: result.Results
|
|
304
|
+
data: relatedEntityInfo ? this.StripDeniedReadFields(relatedEntityInfo, result.Results, contextUser) : result.Results
|
|
213
305
|
});
|
|
214
306
|
}
|
|
215
307
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-communications.js","sourceRoot":"","sources":["../src/entity-communications.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entity-communications.js","sourceRoot":"","sources":["../src/entity-communications.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/entity-communications-server",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.2.0-edge.
|
|
4
|
+
"version": "6.2.0-edge.6",
|
|
5
5
|
"description": "MemberJunction: Library that connects the MJ entities framework to the communication framework",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"typescript": "^5.9.3"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@memberjunction/communication-engine": "6.2.0-edge.
|
|
19
|
-
"@memberjunction/communication-types": "6.2.0-edge.
|
|
20
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
21
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
22
|
-
"@memberjunction/entity-communications-base": "6.2.0-edge.
|
|
23
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
18
|
+
"@memberjunction/communication-engine": "6.2.0-edge.6",
|
|
19
|
+
"@memberjunction/communication-types": "6.2.0-edge.6",
|
|
20
|
+
"@memberjunction/core": "6.2.0-edge.6",
|
|
21
|
+
"@memberjunction/core-entities": "6.2.0-edge.6",
|
|
22
|
+
"@memberjunction/entity-communications-base": "6.2.0-edge.6",
|
|
23
|
+
"@memberjunction/global": "6.2.0-edge.6"
|
|
24
24
|
},
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|