@memberjunction/communication-types 5.48.0 → 5.50.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.
@@ -205,6 +205,118 @@ export class BaseCommunicationProvider {
205
205
  ErrorMessage: `${this.ProviderName} does not support DownloadAttachment (MessageID: ${params.MessageID}, AttachmentID: ${params.AttachmentID}, credentials provided: ${!!credentials})`
206
206
  };
207
207
  }
208
+ // ========================================================================
209
+ // PUSH-NOTIFICATION SUBSCRIPTIONS - Override in subclasses to provide push support
210
+ // Default implementations return "not supported". Providers stay stateless: they
211
+ // create/renew/delete subscriptions with the remote service and parse inbound
212
+ // notifications, but never persist subscription state. See the type docs above.
213
+ //
214
+ // TWO PUSH SHAPES (a provider is one or the other, never neither-when-SupportsPush):
215
+ // • Subscription-managed (Graph, Gmail): the provider programmatically creates the
216
+ // registration (CreateSubscription), the service delivers HINT notifications, the
217
+ // consumer re-fetches via GetMessages. May expire (RenewSubscription).
218
+ // • Inbound-parse (SendGrid, Twilio): the notification carries the payload inline;
219
+ // ParseNotification populates NormalizedNotification.Message. Management may exist
220
+ // (Twilio SmsUrl, SendGrid Parse Settings) but there is no expiry/renewal.
221
+ //
222
+ // CAPABILITY GATE: SupportsPush === (GetSubscriptionCapabilities() !== undefined). The
223
+ // default SupportsPush getter derives from capabilities, so a provider "opts in" simply
224
+ // by returning capabilities - no separate flag to keep in sync (avoids the drift a hand-
225
+ // maintained boolean invites). Any push provider MUST implement ParseNotification and
226
+ // list it in getSupportedOperations(). Whether it ALSO implements Create/Renew/Delete is
227
+ // expressed by SubscriptionCapabilities.SupportsSubscriptionManagement + MaxLifetimeMinutes,
228
+ // and those ops must appear in getSupportedOperations() when implemented.
229
+ // ========================================================================
230
+ /**
231
+ * Convenience gate: `true` when this provider supports inbound push in ANY form
232
+ * (subscription-managed or inbound-parse), `false` otherwise. Lets callers cleanly
233
+ * short-circuit — `if (provider.SupportsPush) { ... }` — instead of probing individual
234
+ * operations.
235
+ *
236
+ * Derived from {@link GetSubscriptionCapabilities} so it stays in lockstep with actual
237
+ * capability: providers that support push return capabilities and thereby report
238
+ * `SupportsPush === true` for free; providers that don't return `undefined` and report
239
+ * `false`. Subclasses normally do NOT override this — override
240
+ * {@link GetSubscriptionCapabilities} instead.
241
+ */
242
+ get SupportsPush() {
243
+ return this.GetSubscriptionCapabilities() !== undefined;
244
+ }
245
+ /**
246
+ * Creates a push-notification subscription with the remote messaging service.
247
+ * Override in subclasses that support this operation.
248
+ * @param params - Parameters describing what to watch and where to notify
249
+ * @param credentials - Optional credentials override for this request
250
+ * @returns Promise<SubscriptionResult> - The created subscription's ID and expiration
251
+ */
252
+ async CreateSubscription(params, credentials) {
253
+ return {
254
+ Success: false,
255
+ ErrorMessage: `${this.ProviderName} does not support CreateSubscription (Identifier: ${params.Identifier}, credentials provided: ${!!credentials})`
256
+ };
257
+ }
258
+ /**
259
+ * Renews an existing subscription before it expires. The caller MUST pass credentials
260
+ * for the same account/app registration used to create the subscription.
261
+ * Override in subclasses that support this operation.
262
+ * @param params - Parameters identifying the subscription and the new expiration
263
+ * @param credentials - Optional credentials override for this request
264
+ * @returns Promise<SubscriptionResult> - The renewed subscription's expiration
265
+ */
266
+ async RenewSubscription(params, credentials) {
267
+ return {
268
+ Success: false,
269
+ ErrorMessage: `${this.ProviderName} does not support RenewSubscription (SubscriptionID: ${params.SubscriptionID}, credentials provided: ${!!credentials})`
270
+ };
271
+ }
272
+ /**
273
+ * Deletes an existing subscription. The caller MUST pass credentials for the same
274
+ * account/app registration used to create the subscription. Implementations should
275
+ * treat "already gone" (e.g. 404) as success - deletion is idempotent from the
276
+ * consumer's perspective.
277
+ * Override in subclasses that support this operation.
278
+ * @param params - Parameters identifying the subscription to delete
279
+ * @param credentials - Optional credentials override for this request
280
+ * @returns Promise<BaseMessageResult> - Result of the delete operation
281
+ */
282
+ async DeleteSubscription(params, credentials) {
283
+ return {
284
+ Success: false,
285
+ ErrorMessage: `${this.ProviderName} does not support DeleteSubscription (SubscriptionID: ${params.SubscriptionID}, credentials provided: ${!!credentials})`
286
+ };
287
+ }
288
+ /**
289
+ * Parses and validates an inbound push notification. This is a pure operation: no
290
+ * network calls. It MUST be safe on hostile/garbage input - never throw on malformed
291
+ * payloads; return `Success: false` with `SuggestedResponseStatus: 400` instead.
292
+ *
293
+ * When the result carries a {@link ParseNotificationResult.Handshake}, the consumer
294
+ * must send exactly that response and process nothing else (endpoint validation).
295
+ * Override in subclasses that support this operation.
296
+ * @param input - Transport-neutral capture of the inbound webhook request
297
+ * @param credentials - Optional credentials override (for schemes that verify signatures)
298
+ * @returns Promise<ParseNotificationResult> - Normalized notifications and/or handshake
299
+ */
300
+ async ParseNotification(input, credentials) {
301
+ return {
302
+ Success: false,
303
+ ErrorMessage: `${this.ProviderName} does not support ParseNotification (body length: ${input.RawBody?.length ?? 0}, credentials provided: ${!!credentials})`,
304
+ Notifications: [],
305
+ SuggestedResponseStatus: 400
306
+ };
307
+ }
308
+ /**
309
+ * Returns this provider's subscription capabilities, or `undefined` when subscriptions
310
+ * are not supported. Consumers use this to schedule renewals and validate change types
311
+ * generically. Override in subclasses that support subscriptions.
312
+ *
313
+ * INVARIANT: returning a defined value here REQUIRES the four subscription operations
314
+ * to appear in {@link getSupportedOperations}.
315
+ * @returns SubscriptionCapabilities when supported, otherwise undefined
316
+ */
317
+ GetSubscriptionCapabilities() {
318
+ return undefined;
319
+ }
208
320
  }
209
321
  let MJCommunicationProviderEntityExtended = class MJCommunicationProviderEntityExtended extends MJCommunicationProviderEntity {
210
322
  get MessageTypes() {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseProvider.js","sourceRoot":"","sources":["../src/BaseProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseProvider.js","sourceRoot":"","sources":["../src/BaseProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AddressUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/AddressUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Unit tests for AddressUtils — RFC 5322 address-list header parsing.
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { ParseEmailAddressList } from '../AddressUtils.js';
6
+ describe('ParseEmailAddressList', () => {
7
+ describe('empty and absent input', () => {
8
+ it('returns [] for undefined', () => {
9
+ expect(ParseEmailAddressList(undefined)).toEqual([]);
10
+ });
11
+ it('returns [] for null', () => {
12
+ expect(ParseEmailAddressList(null)).toEqual([]);
13
+ });
14
+ it('returns [] for an empty string', () => {
15
+ expect(ParseEmailAddressList('')).toEqual([]);
16
+ });
17
+ it('returns [] for whitespace-only input', () => {
18
+ expect(ParseEmailAddressList(' ')).toEqual([]);
19
+ });
20
+ });
21
+ describe('bare addresses', () => {
22
+ it('parses a single bare address', () => {
23
+ expect(ParseEmailAddressList('jane@example.com')).toEqual(['jane@example.com']);
24
+ });
25
+ it('parses multiple comma-separated bare addresses', () => {
26
+ expect(ParseEmailAddressList('a@x.com, b@y.com,c@z.com')).toEqual(['a@x.com', 'b@y.com', 'c@z.com']);
27
+ });
28
+ it('trims surrounding whitespace', () => {
29
+ expect(ParseEmailAddressList(' a@x.com , b@y.com ')).toEqual(['a@x.com', 'b@y.com']);
30
+ });
31
+ });
32
+ describe('display-name forms', () => {
33
+ it('extracts the address from an unquoted display name with angle brackets', () => {
34
+ expect(ParseEmailAddressList('Jane Doe <jane@example.com>')).toEqual(['jane@example.com']);
35
+ });
36
+ it('extracts the address from a quoted display name', () => {
37
+ expect(ParseEmailAddressList('"Jane Doe" <jane@example.com>')).toEqual(['jane@example.com']);
38
+ });
39
+ it('keeps quoted display names containing commas intact', () => {
40
+ expect(ParseEmailAddressList('"Doe, Jane" <jane@example.com>, bob@example.com')).toEqual([
41
+ 'jane@example.com',
42
+ 'bob@example.com'
43
+ ]);
44
+ });
45
+ it('handles multiple quoted-comma names in one list', () => {
46
+ expect(ParseEmailAddressList('"Doe, Jane" <jane@x.com>, "Smith, Bob" <bob@y.com>, plain@z.com')).toEqual(['jane@x.com', 'bob@y.com', 'plain@z.com']);
47
+ });
48
+ it('handles a display name containing an @ by preferring the angle-bracket address', () => {
49
+ expect(ParseEmailAddressList('"jane@old.example" <jane@new.example>')).toEqual(['jane@new.example']);
50
+ });
51
+ });
52
+ describe('mixed and malformed entries', () => {
53
+ it('parses a mix of bare, named, and quoted forms preserving order', () => {
54
+ expect(ParseEmailAddressList('first@x.com, Second Person <second@y.com>, "Third, Person" <third@z.com>')).toEqual(['first@x.com', 'second@y.com', 'third@z.com']);
55
+ });
56
+ it('drops entries with no plausible address', () => {
57
+ expect(ParseEmailAddressList('undisclosed-recipients:;, real@example.com')).toEqual(['real@example.com']);
58
+ });
59
+ it('drops empty segments from trailing or doubled commas', () => {
60
+ expect(ParseEmailAddressList('a@x.com,, b@y.com,')).toEqual(['a@x.com', 'b@y.com']);
61
+ });
62
+ it('drops an angle-bracket entry whose address part has no @', () => {
63
+ expect(ParseEmailAddressList('Broken <not-an-address>, ok@example.com')).toEqual(['ok@example.com']);
64
+ });
65
+ });
66
+ });
67
+ //# sourceMappingURL=AddressUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddressUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/AddressUtils.test.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,67 @@ class TestProvider extends BaseCommunicationProvider {
38
38
  return { Success: true };
39
39
  }
40
40
  }
41
+ // A subscription-managed, HINT-mode push provider (Graph/Gmail shape): full CRUD, the
42
+ // notification only carries MessageIDs to re-fetch with — never an inline Message.
43
+ class SubscriptionManagedPushProvider extends TestProvider {
44
+ getSupportedOperations() {
45
+ return [
46
+ ...super.getSupportedOperations(),
47
+ 'CreateSubscription',
48
+ 'RenewSubscription',
49
+ 'DeleteSubscription',
50
+ 'ParseNotification',
51
+ ];
52
+ }
53
+ GetSubscriptionCapabilities() {
54
+ return {
55
+ MaxLifetimeMinutes: 4230,
56
+ SupportedChangeTypes: ['created'],
57
+ RequiresEndpointValidation: true,
58
+ SupportsSubscriptionManagement: true,
59
+ DeliversPayloadInline: false,
60
+ };
61
+ }
62
+ async ParseNotification(_input) {
63
+ return {
64
+ Success: true,
65
+ Notifications: [{ Kind: 'message', MessageIDs: ['ext-1'] }],
66
+ SuggestedResponseStatus: 202,
67
+ };
68
+ }
69
+ }
70
+ // A parse-only, INLINE-mode push provider (SendGrid shape): no renewal, the notification
71
+ // carries the full message inline in NormalizedNotification.Message (no re-fetch path).
72
+ class InlineParsePushProvider extends TestProvider {
73
+ getSupportedOperations() {
74
+ return [
75
+ ...super.getSupportedOperations(),
76
+ 'CreateSubscription',
77
+ 'DeleteSubscription',
78
+ 'ParseNotification',
79
+ ];
80
+ }
81
+ GetSubscriptionCapabilities() {
82
+ return {
83
+ MaxLifetimeMinutes: undefined,
84
+ SupportedChangeTypes: ['created'],
85
+ RequiresEndpointValidation: false,
86
+ SupportsSubscriptionManagement: true,
87
+ DeliversPayloadInline: true,
88
+ };
89
+ }
90
+ async ParseNotification(_input) {
91
+ return {
92
+ Success: true,
93
+ Notifications: [{
94
+ Kind: 'message',
95
+ MessageIDs: [],
96
+ Message: { From: 'a@x.com', To: 'b@y.com', Body: 'hello', Subject: 'hi' },
97
+ }],
98
+ SuggestedResponseStatus: 200,
99
+ };
100
+ }
101
+ }
41
102
  describe('Message', () => {
42
103
  it('should create a new Message with default properties', () => {
43
104
  const msg = new Message();
@@ -183,6 +244,114 @@ describe('BaseCommunicationProvider', () => {
183
244
  expect(result.ErrorMessage).toContain('credentials provided: false');
184
245
  });
185
246
  });
247
+ describe('subscription default implementations', () => {
248
+ it('CreateSubscription should return not supported', async () => {
249
+ const result = await provider.CreateSubscription({
250
+ ChangeTypes: ['created'],
251
+ NotificationUrl: 'https://example.com/hook',
252
+ ClientState: 'secret',
253
+ Identifier: 'mailbox@test.com',
254
+ });
255
+ expect(result.Success).toBe(false);
256
+ expect(result.ErrorMessage).toContain('does not support CreateSubscription');
257
+ expect(result.ErrorMessage).toContain('mailbox@test.com');
258
+ });
259
+ it('RenewSubscription should return not supported', async () => {
260
+ const result = await provider.RenewSubscription({ SubscriptionID: 'sub-1' });
261
+ expect(result.Success).toBe(false);
262
+ expect(result.ErrorMessage).toContain('does not support RenewSubscription');
263
+ expect(result.ErrorMessage).toContain('sub-1');
264
+ });
265
+ it('DeleteSubscription should return not supported', async () => {
266
+ const result = await provider.DeleteSubscription({ SubscriptionID: 'sub-1' });
267
+ expect(result.Success).toBe(false);
268
+ expect(result.ErrorMessage).toContain('does not support DeleteSubscription');
269
+ expect(result.ErrorMessage).toContain('sub-1');
270
+ });
271
+ it('ParseNotification should return not supported with empty notifications and a 400', async () => {
272
+ const result = await provider.ParseNotification({
273
+ Headers: {},
274
+ QueryParams: {},
275
+ RawBody: '{}',
276
+ });
277
+ expect(result.Success).toBe(false);
278
+ expect(result.ErrorMessage).toContain('does not support ParseNotification');
279
+ expect(result.Notifications).toEqual([]);
280
+ expect(result.SuggestedResponseStatus).toBe(400);
281
+ });
282
+ it('GetSubscriptionCapabilities should return undefined by default', () => {
283
+ expect(provider.GetSubscriptionCapabilities()).toBeUndefined();
284
+ });
285
+ it('subscription operations are absent from getSupportedOperations by default', () => {
286
+ expect(provider.supportsOperation('CreateSubscription')).toBe(false);
287
+ expect(provider.supportsOperation('RenewSubscription')).toBe(false);
288
+ expect(provider.supportsOperation('DeleteSubscription')).toBe(false);
289
+ expect(provider.supportsOperation('ParseNotification')).toBe(false);
290
+ });
291
+ it('SupportsPush is false by default (no capabilities)', () => {
292
+ expect(provider.SupportsPush).toBe(false);
293
+ });
294
+ it('capability gate holds for the default provider: no capabilities, no push, no ops', () => {
295
+ expect(provider.GetSubscriptionCapabilities()).toBeUndefined();
296
+ expect(provider.SupportsPush).toBe(false);
297
+ const ops = provider.getSupportedOperations();
298
+ expect(ops.includes('ParseNotification')).toBe(false);
299
+ });
300
+ });
301
+ describe('push capability gate (SupportsPush + generalized invariant)', () => {
302
+ it('SupportsPush derives from GetSubscriptionCapabilities (subscription-managed provider)', () => {
303
+ const p = new SubscriptionManagedPushProvider();
304
+ expect(p.GetSubscriptionCapabilities()).toBeDefined();
305
+ expect(p.SupportsPush).toBe(true);
306
+ });
307
+ it('SupportsPush derives from GetSubscriptionCapabilities (inline-parse provider)', () => {
308
+ const p = new InlineParsePushProvider();
309
+ expect(p.GetSubscriptionCapabilities()).toBeDefined();
310
+ expect(p.SupportsPush).toBe(true);
311
+ });
312
+ it('GENERALIZED INVARIANT: SupportsPush IFF capabilities defined, for every shape', () => {
313
+ for (const p of [new TestProvider(), new SubscriptionManagedPushProvider(), new InlineParsePushProvider()]) {
314
+ expect(p.SupportsPush).toBe(p.GetSubscriptionCapabilities() !== undefined);
315
+ }
316
+ });
317
+ it('a push provider MUST support ParseNotification (the common denominator)', () => {
318
+ for (const p of [new SubscriptionManagedPushProvider(), new InlineParsePushProvider()]) {
319
+ expect(p.SupportsPush).toBe(true);
320
+ expect(p.supportsOperation('ParseNotification')).toBe(true);
321
+ }
322
+ });
323
+ it('SupportsSubscriptionManagement agrees with Create/Delete ops being present', () => {
324
+ for (const p of [new SubscriptionManagedPushProvider(), new InlineParsePushProvider()]) {
325
+ const caps = p.GetSubscriptionCapabilities();
326
+ const hasCreate = p.supportsOperation('CreateSubscription');
327
+ const hasDelete = p.supportsOperation('DeleteSubscription');
328
+ expect(caps.SupportsSubscriptionManagement).toBe(hasCreate && hasDelete);
329
+ }
330
+ });
331
+ it('RenewSubscription op present IFF the service has a finite MaxLifetimeMinutes', () => {
332
+ const managed = new SubscriptionManagedPushProvider();
333
+ expect(managed.GetSubscriptionCapabilities().MaxLifetimeMinutes).toBeTypeOf('number');
334
+ expect(managed.supportsOperation('RenewSubscription')).toBe(true);
335
+ const inline = new InlineParsePushProvider();
336
+ expect(inline.GetSubscriptionCapabilities().MaxLifetimeMinutes).toBeUndefined();
337
+ expect(inline.supportsOperation('RenewSubscription')).toBe(false);
338
+ });
339
+ it('HINT-mode notifications carry MessageIDs and no inline Message', async () => {
340
+ const p = new SubscriptionManagedPushProvider();
341
+ expect(p.GetSubscriptionCapabilities().DeliversPayloadInline).toBe(false);
342
+ const result = await p.ParseNotification({ Headers: {}, QueryParams: {}, RawBody: '{}' });
343
+ expect(result.Notifications[0].MessageIDs.length).toBeGreaterThan(0);
344
+ expect(result.Notifications[0].Message).toBeUndefined();
345
+ });
346
+ it('INLINE-mode notifications carry the Message payload directly (no re-fetch)', async () => {
347
+ const p = new InlineParsePushProvider();
348
+ expect(p.GetSubscriptionCapabilities().DeliversPayloadInline).toBe(true);
349
+ const result = await p.ParseNotification({ Headers: {}, QueryParams: {}, RawBody: '' });
350
+ expect(result.Notifications[0].Message).toBeDefined();
351
+ expect(result.Notifications[0].Message?.Body).toBe('hello');
352
+ expect(result.Notifications[0].MessageIDs).toEqual([]);
353
+ });
354
+ });
186
355
  });
187
356
  describe('MJCommunicationProviderEntityExtended', () => {
188
357
  it('should get and set MessageTypes', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/BaseProvider.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/BaseProvider.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DryRunContract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DryRunContract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/DryRunContract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Unit tests for the DryRun seam at the BASE contract level:
3
+ * - `Message.DryRun` survives the copy constructor (the engine copies the message per recipient)
4
+ * - `MessageResult.DryRun` is part of the result contract
5
+ * - `CommunicationEngineBase.StartLog` stamps `DryRun: true` into the audit MessageContent JSON
6
+ * for dry-run sends, and omits the marker entirely for real sends
7
+ */
8
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
9
+ const { mockSave, mockGetEntityObject } = vi.hoisted(() => ({
10
+ mockSave: vi.fn(),
11
+ mockGetEntityObject: vi.fn(),
12
+ }));
13
+ vi.mock('@memberjunction/core', () => {
14
+ class MockBaseEngine {
15
+ constructor() {
16
+ this.ContextUser = { ID: 'user-1' };
17
+ }
18
+ get ProviderToUse() {
19
+ return { GetEntityObject: mockGetEntityObject };
20
+ }
21
+ async Load() { }
22
+ static { this._instances = new Map(); }
23
+ static getInstance() {
24
+ if (!this._instances.has(this)) {
25
+ this._instances.set(this, new this());
26
+ }
27
+ return this._instances.get(this);
28
+ }
29
+ }
30
+ return {
31
+ BaseEngine: MockBaseEngine,
32
+ BaseEntity: class {
33
+ },
34
+ BaseEnginePropertyConfig: class {
35
+ },
36
+ IMetadataProvider: class {
37
+ },
38
+ Metadata: vi.fn().mockImplementation(function () {
39
+ return { GetEntityObject: mockGetEntityObject };
40
+ }),
41
+ UserInfo: class {
42
+ },
43
+ };
44
+ });
45
+ vi.mock('@memberjunction/core-entities', () => ({
46
+ MJCommunicationBaseMessageTypeEntity: class {
47
+ },
48
+ MJCommunicationLogEntity: class {
49
+ },
50
+ MJCommunicationProviderEntity: class {
51
+ },
52
+ MJCommunicationProviderMessageTypeEntity: class {
53
+ },
54
+ MJCommunicationRunEntity: class {
55
+ },
56
+ MJEntityCommunicationFieldEntity: class {
57
+ },
58
+ MJEntityCommunicationMessageTypeEntity: class {
59
+ },
60
+ MJTemplateEntityExtended: class {
61
+ },
62
+ }));
63
+ vi.mock('@memberjunction/global', () => ({
64
+ RegisterClass: () => () => { },
65
+ UUIDsEqual: (a, b) => a?.toLowerCase() === b?.toLowerCase(),
66
+ }));
67
+ import { CommunicationEngineBase } from '../BaseEngine.js';
68
+ import { Message, MessageResult } from '../BaseProvider.js';
69
+ function makeLogMock() {
70
+ return {
71
+ CommunicationRunID: undefined,
72
+ Status: '',
73
+ CommunicationProviderID: '',
74
+ CommunicationProviderMessageTypeID: '',
75
+ MessageDate: null,
76
+ Direction: '',
77
+ MessageContent: '',
78
+ Save: mockSave.mockResolvedValue(true),
79
+ };
80
+ }
81
+ function makeProcessedMessage(dryRun) {
82
+ return {
83
+ MessageType: { CommunicationProviderID: 'prov-1', ID: 'pmt-1' },
84
+ To: 'user@test.com',
85
+ From: 'sender@test.com',
86
+ ProcessedSubject: 'Subject',
87
+ ProcessedHTMLBody: '<p>Hello</p>',
88
+ ProcessedBody: 'Hello',
89
+ DryRun: dryRun,
90
+ };
91
+ }
92
+ describe('DryRun base contract', () => {
93
+ beforeEach(() => {
94
+ vi.clearAllMocks();
95
+ });
96
+ describe('Message.DryRun', () => {
97
+ it('should default to undefined (real send)', () => {
98
+ const msg = new Message();
99
+ expect(msg.DryRun).toBeUndefined();
100
+ });
101
+ it('should survive the copy constructor (per-recipient copies keep the flag)', () => {
102
+ const original = new Message();
103
+ original.To = 'a@test.com';
104
+ original.DryRun = true;
105
+ const copy = new Message(original);
106
+ expect(copy.DryRun).toBe(true);
107
+ expect(copy.To).toBe('a@test.com');
108
+ });
109
+ it('should keep an explicit false through the copy constructor', () => {
110
+ const original = new Message();
111
+ original.DryRun = false;
112
+ const copy = new Message(original);
113
+ expect(copy.DryRun).toBe(false);
114
+ });
115
+ });
116
+ describe('MessageResult.DryRun', () => {
117
+ it('should be assignable and default to undefined', () => {
118
+ const result = new MessageResult();
119
+ expect(result.DryRun).toBeUndefined();
120
+ result.DryRun = true;
121
+ expect(result.DryRun).toBe(true);
122
+ });
123
+ });
124
+ describe('CommunicationEngineBase.StartLog dry-run audit marker', () => {
125
+ it('should stamp DryRun: true into MessageContent for a dry-run send', async () => {
126
+ const engine = CommunicationEngineBase.Instance;
127
+ const mockLog = makeLogMock();
128
+ mockGetEntityObject.mockResolvedValue(mockLog);
129
+ const result = await engine['StartLog'](makeProcessedMessage(true));
130
+ expect(result).toBe(mockLog);
131
+ const content = JSON.parse(mockLog.MessageContent);
132
+ expect(content.DryRun).toBe(true);
133
+ expect(content.To).toBe('user@test.com');
134
+ expect(content.Subject).toBe('Subject');
135
+ });
136
+ it('should OMIT the DryRun key entirely for a real send', async () => {
137
+ const engine = CommunicationEngineBase.Instance;
138
+ const mockLog = makeLogMock();
139
+ mockGetEntityObject.mockResolvedValue(mockLog);
140
+ await engine['StartLog'](makeProcessedMessage(undefined));
141
+ const content = JSON.parse(mockLog.MessageContent);
142
+ expect('DryRun' in content).toBe(false);
143
+ });
144
+ it('should OMIT the DryRun key when DryRun is explicitly false', async () => {
145
+ const engine = CommunicationEngineBase.Instance;
146
+ const mockLog = makeLogMock();
147
+ mockGetEntityObject.mockResolvedValue(mockLog);
148
+ await engine['StartLog'](makeProcessedMessage(false));
149
+ const content = JSON.parse(mockLog.MessageContent);
150
+ expect('DryRun' in content).toBe(false);
151
+ });
152
+ });
153
+ });
154
+ //# sourceMappingURL=DryRunContract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DryRunContract.test.js","sourceRoot":"","sources":["../../src/__tests__/DryRunContract.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './BaseEngine.js';
2
2
  export * from './BaseProvider.js';
3
3
  export * from './CredentialUtils.js';
4
+ export * from './AddressUtils.js';
4
5
  //# sourceMappingURL=index.d.ts.map