@memberjunction/entity-communications-server 6.2.0-edge.5 → 6.2.0-edge.7

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=entity-communications.actingUser.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=entity-communications.deniedAddress.test.d.ts.map
@@ -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
- protected PopulateRecipientContextData(entityInfo: EntityInfo, entityMessageType: MJEntityCommunicationMessageTypeEntityExtended, message: Message, records: any[]): Promise<MessageRecipient[]>;
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,EAAwE,MAAM,sBAAsB,CAAC;AAExH,OAAO,EAAsE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC1I,OAAO,EAAE,8CAA8C,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAGlM;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,8BAA8B;IAE1E,WAAkB,QAAQ,IAAI,0BAA0B,CAEvD;IAED;;OAEG;IACU,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC;cAmF1F,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,8CAA8C,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;cAoDtL,kCAAkC,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,EAAE,CAAA;KAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAiC3L;;;;;OAKG;cACa,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,GAAG,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,EAAE,CAAA;KAAC,EAAE,CAAC;IAiD/L;;;;OAIG;IACH,SAAS,CAAC,qCAAqC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;CAgC7E"}
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 md = new Metadata(); // global-provider-ok: server bootstrap, single-provider context
19
- const entityInfo = md.Entities.find(e => UUIDsEqual(e.ID, params.EntityID));
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
- await CommunicationEngine.Instance.Config(false, this.ContextUser);
26
- const provider = CommunicationEngine.Instance.Providers.find(p => p.Name.trim().toLowerCase() === params.ProviderName.trim().toLowerCase());
27
- if (!provider) {
28
- throw new Error(`Provider ${params.ProviderName} not found`);
29
- }
30
- if (!provider.SupportsSending) {
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: 'Unknown error'
53
+ ErrorMessage: e instanceof Error ? e.message : String(e)
76
54
  };
77
55
  }
78
- catch (e) {
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: e.message
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
- async PopulateRecipientContextData(entityInfo, entityMessageType, message, records) {
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
- // in the below we get the VALUE of the record level preferred field if it exists, otherwise we get the value of the entity level preferred field
119
- const ToValue = !recordLevelPref ? r[entityLevelPrefField.FieldName] : r[r[entityInfo.PreferredCommunicationField]];
120
- // we have mapped the ToValue based on preferences, next up, we need to populate the context data, if there are any templates
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: ToValue,
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 rv.RunView(params, this.ContextUser);
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.5",
4
+ "version": "6.2.0-edge.7",
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.5",
19
- "@memberjunction/communication-types": "6.2.0-edge.5",
20
- "@memberjunction/core": "6.2.0-edge.5",
21
- "@memberjunction/core-entities": "6.2.0-edge.5",
22
- "@memberjunction/entity-communications-base": "6.2.0-edge.5",
23
- "@memberjunction/global": "6.2.0-edge.5"
18
+ "@memberjunction/communication-engine": "6.2.0-edge.7",
19
+ "@memberjunction/communication-types": "6.2.0-edge.7",
20
+ "@memberjunction/core": "6.2.0-edge.7",
21
+ "@memberjunction/core-entities": "6.2.0-edge.7",
22
+ "@memberjunction/entity-communications-base": "6.2.0-edge.7",
23
+ "@memberjunction/global": "6.2.0-edge.7"
24
24
  },
25
25
  "repository": {
26
26
  "type": "git",