@memberjunction/communication-types 4.2.0 → 4.3.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BaseEngine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/BaseEngine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,261 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ const { mockSave, mockGetEntityObject } = vi.hoisted(() => ({
3
+ mockSave: vi.fn(),
4
+ mockGetEntityObject: vi.fn(),
5
+ }));
6
+ vi.mock('@memberjunction/core', () => {
7
+ class MockBaseEngine {
8
+ constructor() {
9
+ this.ContextUser = { ID: 'user-1' };
10
+ }
11
+ async Load() { }
12
+ static { this._instances = new Map(); }
13
+ static getInstance() {
14
+ if (!this._instances.has(this)) {
15
+ this._instances.set(this, new this());
16
+ }
17
+ return this._instances.get(this);
18
+ }
19
+ }
20
+ return {
21
+ BaseEngine: MockBaseEngine,
22
+ BaseEnginePropertyConfig: class {
23
+ },
24
+ IMetadataProvider: class {
25
+ },
26
+ Metadata: vi.fn().mockImplementation(function () {
27
+ return { GetEntityObject: mockGetEntityObject };
28
+ }),
29
+ UserInfo: class {
30
+ },
31
+ };
32
+ });
33
+ vi.mock('@memberjunction/core-entities', () => ({
34
+ CommunicationBaseMessageTypeEntity: class {
35
+ },
36
+ CommunicationLogEntity: class {
37
+ },
38
+ CommunicationProviderMessageTypeEntity: class {
39
+ },
40
+ CommunicationRunEntity: class {
41
+ },
42
+ EntityCommunicationFieldEntity: class {
43
+ },
44
+ EntityCommunicationMessageTypeEntity: class {
45
+ },
46
+ }));
47
+ vi.mock('@memberjunction/global', () => ({
48
+ RegisterClass: () => () => { },
49
+ }));
50
+ vi.mock('../BaseProvider', () => ({
51
+ CommunicationProviderEntityExtended: class {
52
+ constructor() {
53
+ this.ID = 'provider-1';
54
+ this.MessageTypes = [];
55
+ }
56
+ },
57
+ ProcessedMessage: class {
58
+ },
59
+ }));
60
+ import { CommunicationEngineBase } from '../BaseEngine.js';
61
+ describe('CommunicationEngineBase', () => {
62
+ let engine;
63
+ beforeEach(() => {
64
+ vi.clearAllMocks();
65
+ engine = CommunicationEngineBase.Instance;
66
+ });
67
+ describe('Instance', () => {
68
+ it('should return a singleton instance', () => {
69
+ const instance1 = CommunicationEngineBase.Instance;
70
+ const instance2 = CommunicationEngineBase.Instance;
71
+ expect(instance1).toBeDefined();
72
+ expect(instance2).toBeDefined();
73
+ });
74
+ });
75
+ describe('Metadata getters', () => {
76
+ it('should return empty arrays for BaseMessageTypes initially', () => {
77
+ expect(engine.BaseMessageTypes).toEqual([]);
78
+ });
79
+ it('should return empty arrays for Providers initially', () => {
80
+ expect(engine.Providers).toEqual([]);
81
+ });
82
+ it('should return empty arrays for ProviderMessageTypes initially', () => {
83
+ expect(engine.ProviderMessageTypes).toEqual([]);
84
+ });
85
+ it('should return Metadata object with all sub-properties', () => {
86
+ const md = engine.Metadata;
87
+ expect(md).toBeDefined();
88
+ expect(md.BaseMessageTypes).toEqual([]);
89
+ expect(md.Providers).toEqual([]);
90
+ expect(md.ProviderMessageTypes).toEqual([]);
91
+ expect(md.EntityCommunicationMessageTypes).toEqual([]);
92
+ expect(md.EntityCommunicationFields).toEqual([]);
93
+ });
94
+ });
95
+ describe('AdditionalLoading', () => {
96
+ it('should link ProviderMessageTypes to their Providers', async () => {
97
+ // Set up metadata
98
+ const metadata = engine.Metadata;
99
+ const provider1 = { ID: 'p1', MessageTypes: [] };
100
+ const provider2 = { ID: 'p2', MessageTypes: [] };
101
+ metadata.Providers.push(provider1, provider2);
102
+ metadata.ProviderMessageTypes.push({ CommunicationProviderID: 'p1', Name: 'Email' }, { CommunicationProviderID: 'p1', Name: 'SMS' }, { CommunicationProviderID: 'p2', Name: 'Push' });
103
+ // Call AdditionalLoading (it's protected, so we access it via bracket notation)
104
+ await engine['AdditionalLoading']();
105
+ expect(provider1.MessageTypes).toHaveLength(2);
106
+ expect(provider2.MessageTypes).toHaveLength(1);
107
+ });
108
+ });
109
+ describe('StartRun', () => {
110
+ it('should create and save a communication run on success', async () => {
111
+ const mockRun = {
112
+ Status: '',
113
+ Direction: '',
114
+ StartedAt: null,
115
+ UserID: '',
116
+ Save: mockSave.mockResolvedValue(true),
117
+ };
118
+ mockGetEntityObject.mockResolvedValue(mockRun);
119
+ const result = await engine['StartRun']();
120
+ expect(mockGetEntityObject).toHaveBeenCalledWith('Communication Runs', expect.anything());
121
+ expect(result).toBe(mockRun);
122
+ expect(mockRun.Status).toBe('Pending');
123
+ expect(mockRun.Direction).toBe('Sending');
124
+ expect(mockRun.StartedAt).toBeInstanceOf(Date);
125
+ });
126
+ it('should return null when Save fails with LatestResult', async () => {
127
+ const mockRun = {
128
+ Status: '',
129
+ Direction: '',
130
+ StartedAt: null,
131
+ UserID: '',
132
+ Save: mockSave.mockResolvedValue(false),
133
+ LatestResult: { CompleteMessage: 'Save error' },
134
+ };
135
+ mockGetEntityObject.mockResolvedValue(mockRun);
136
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
137
+ const result = await engine['StartRun']();
138
+ expect(result).toBeNull();
139
+ expect(consoleSpy).toHaveBeenCalled();
140
+ consoleSpy.mockRestore();
141
+ });
142
+ it('should return null when Save fails without LatestResult', async () => {
143
+ const mockRun = {
144
+ Status: '',
145
+ Direction: '',
146
+ StartedAt: null,
147
+ UserID: '',
148
+ Save: mockSave.mockResolvedValue(false),
149
+ LatestResult: null,
150
+ };
151
+ mockGetEntityObject.mockResolvedValue(mockRun);
152
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
153
+ const result = await engine['StartRun']();
154
+ expect(result).toBeNull();
155
+ expect(consoleSpy).toHaveBeenCalledWith('Failed to save communication run: No error details available');
156
+ consoleSpy.mockRestore();
157
+ });
158
+ });
159
+ describe('EndRun', () => {
160
+ it('should set status and end date and save', async () => {
161
+ const mockRun = {
162
+ Status: 'Pending',
163
+ EndedAt: null,
164
+ Save: mockSave.mockResolvedValue(true),
165
+ };
166
+ const result = await engine['EndRun'](mockRun);
167
+ expect(result).toBe(true);
168
+ expect(mockRun.Status).toBe('Complete');
169
+ expect(mockRun.EndedAt).toBeInstanceOf(Date);
170
+ });
171
+ });
172
+ describe('StartLog', () => {
173
+ it('should create and save a communication log', async () => {
174
+ const mockLog = {
175
+ CommunicationRunID: '',
176
+ Status: '',
177
+ CommunicationProviderID: '',
178
+ CommunicationProviderMessageTypeID: '',
179
+ MessageDate: null,
180
+ Direction: '',
181
+ MessageContent: '',
182
+ Save: mockSave.mockResolvedValue(true),
183
+ };
184
+ mockGetEntityObject.mockResolvedValue(mockLog);
185
+ const processedMessage = {
186
+ MessageType: { CommunicationProviderID: 'prov-1', ID: 'pmt-1' },
187
+ To: 'user@test.com',
188
+ From: 'sender@test.com',
189
+ ProcessedSubject: 'Subject',
190
+ ProcessedHTMLBody: '<p>Hello</p>',
191
+ ProcessedBody: 'Hello',
192
+ };
193
+ const mockRun = { ID: 'run-1' };
194
+ const result = await engine['StartLog'](processedMessage, mockRun);
195
+ expect(result).toBe(mockLog);
196
+ expect(mockLog.CommunicationRunID).toBe('run-1');
197
+ expect(mockLog.Status).toBe('Pending');
198
+ expect(mockLog.Direction).toBe('Sending');
199
+ expect(mockLog.CommunicationProviderID).toBe('prov-1');
200
+ expect(mockLog.CommunicationProviderMessageTypeID).toBe('pmt-1');
201
+ expect(JSON.parse(mockLog.MessageContent)).toEqual({
202
+ To: 'user@test.com',
203
+ From: 'sender@test.com',
204
+ Subject: 'Subject',
205
+ HTMLBody: '<p>Hello</p>',
206
+ TextBody: 'Hello',
207
+ });
208
+ });
209
+ it('should handle log without a run', async () => {
210
+ const mockLog = {
211
+ CommunicationRunID: undefined,
212
+ Status: '',
213
+ CommunicationProviderID: '',
214
+ CommunicationProviderMessageTypeID: '',
215
+ MessageDate: null,
216
+ Direction: '',
217
+ MessageContent: '',
218
+ Save: mockSave.mockResolvedValue(true),
219
+ };
220
+ mockGetEntityObject.mockResolvedValue(mockLog);
221
+ const processedMessage = {
222
+ MessageType: { CommunicationProviderID: 'prov-1', ID: 'pmt-1' },
223
+ To: 'user@test.com',
224
+ From: 'sender@test.com',
225
+ ProcessedSubject: 'Subject',
226
+ ProcessedHTMLBody: '',
227
+ ProcessedBody: 'Hello',
228
+ };
229
+ const result = await engine['StartLog'](processedMessage);
230
+ expect(result).toBe(mockLog);
231
+ expect(mockLog.CommunicationRunID).toBeUndefined();
232
+ });
233
+ it('should return null when log Save fails', async () => {
234
+ const mockLog = {
235
+ CommunicationRunID: '',
236
+ Status: '',
237
+ CommunicationProviderID: '',
238
+ CommunicationProviderMessageTypeID: '',
239
+ MessageDate: null,
240
+ Direction: '',
241
+ MessageContent: '',
242
+ Save: mockSave.mockResolvedValue(false),
243
+ LatestResult: { CompleteMessage: 'Save failed' },
244
+ };
245
+ mockGetEntityObject.mockResolvedValue(mockLog);
246
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
247
+ const processedMessage = {
248
+ MessageType: { CommunicationProviderID: 'prov-1', ID: 'pmt-1' },
249
+ To: 'user@test.com',
250
+ From: 'sender@test.com',
251
+ ProcessedSubject: 'Subject',
252
+ ProcessedHTMLBody: '',
253
+ ProcessedBody: '',
254
+ };
255
+ const result = await engine['StartLog'](processedMessage);
256
+ expect(result).toBeNull();
257
+ consoleSpy.mockRestore();
258
+ });
259
+ });
260
+ });
261
+ //# sourceMappingURL=BaseEngine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseEngine.test.js","sourceRoot":"","sources":["../../src/__tests__/BaseEngine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BaseProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseProvider.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/BaseProvider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ // Mock external dependencies
3
+ vi.mock('@memberjunction/core', () => ({
4
+ BaseEntity: class {
5
+ },
6
+ UserInfo: class {
7
+ },
8
+ }));
9
+ vi.mock('@memberjunction/global', () => ({
10
+ RegisterClass: () => () => { },
11
+ }));
12
+ vi.mock('@memberjunction/core-entities', () => ({
13
+ CommunicationProviderEntity: class {
14
+ },
15
+ CommunicationProviderMessageTypeEntity: class {
16
+ },
17
+ CommunicationRunEntity: class {
18
+ },
19
+ TemplateEntityExtended: class {
20
+ },
21
+ }));
22
+ import { Message, MessageRecipient, MessageResult, BaseCommunicationProvider, CommunicationProviderEntityExtended, } from '../BaseProvider.js';
23
+ // Concrete test implementation of the abstract class
24
+ class TestProvider extends BaseCommunicationProvider {
25
+ async SendSingleMessage(message) {
26
+ return { Message: message, Success: true, Error: '' };
27
+ }
28
+ async GetMessages() {
29
+ return { Success: true, Messages: [] };
30
+ }
31
+ async ForwardMessage() {
32
+ return { Success: true };
33
+ }
34
+ async ReplyToMessage() {
35
+ return { Success: true };
36
+ }
37
+ async CreateDraft() {
38
+ return { Success: true };
39
+ }
40
+ }
41
+ describe('Message', () => {
42
+ it('should create a new Message with default properties', () => {
43
+ const msg = new Message();
44
+ expect(msg.From).toBeUndefined();
45
+ expect(msg.To).toBeUndefined();
46
+ expect(msg.Body).toBeUndefined();
47
+ expect(msg.Subject).toBeUndefined();
48
+ expect(msg.CCRecipients).toBeUndefined();
49
+ expect(msg.BCCRecipients).toBeUndefined();
50
+ expect(msg.Headers).toBeUndefined();
51
+ });
52
+ it('should copy properties from another Message via constructor', () => {
53
+ const original = new Message();
54
+ original.From = 'sender@test.com';
55
+ original.To = 'recipient@test.com';
56
+ original.Subject = 'Test Subject';
57
+ original.Body = 'Test Body';
58
+ original.CCRecipients = ['cc@test.com'];
59
+ original.BCCRecipients = ['bcc@test.com'];
60
+ original.Headers = { 'X-Custom': 'value' };
61
+ const copy = new Message(original);
62
+ expect(copy.From).toBe('sender@test.com');
63
+ expect(copy.To).toBe('recipient@test.com');
64
+ expect(copy.Subject).toBe('Test Subject');
65
+ expect(copy.Body).toBe('Test Body');
66
+ expect(copy.CCRecipients).toEqual(['cc@test.com']);
67
+ expect(copy.BCCRecipients).toEqual(['bcc@test.com']);
68
+ expect(copy.Headers).toEqual({ 'X-Custom': 'value' });
69
+ });
70
+ it('should handle copy from undefined (no copyFrom)', () => {
71
+ const msg = new Message(undefined);
72
+ expect(msg.From).toBeUndefined();
73
+ });
74
+ });
75
+ describe('MessageRecipient', () => {
76
+ it('should create a new MessageRecipient with settable properties', () => {
77
+ const recipient = new MessageRecipient();
78
+ recipient.To = 'user@test.com';
79
+ recipient.FullName = 'Test User';
80
+ recipient.ContextData = { key: 'value' };
81
+ expect(recipient.To).toBe('user@test.com');
82
+ expect(recipient.FullName).toBe('Test User');
83
+ expect(recipient.ContextData).toEqual({ key: 'value' });
84
+ });
85
+ });
86
+ describe('MessageResult', () => {
87
+ it('should create a MessageResult with all properties', () => {
88
+ const result = new MessageResult();
89
+ result.Success = true;
90
+ result.Error = '';
91
+ expect(result.Success).toBe(true);
92
+ expect(result.Error).toBe('');
93
+ expect(result.Run).toBeUndefined();
94
+ });
95
+ });
96
+ describe('BaseCommunicationProvider', () => {
97
+ let provider;
98
+ beforeEach(() => {
99
+ provider = new TestProvider();
100
+ });
101
+ describe('getSupportedOperations', () => {
102
+ it('should return core operations by default', () => {
103
+ const ops = provider.getSupportedOperations();
104
+ expect(ops).toContain('SendSingleMessage');
105
+ expect(ops).toContain('GetMessages');
106
+ expect(ops).toContain('ForwardMessage');
107
+ expect(ops).toContain('ReplyToMessage');
108
+ expect(ops).toContain('CreateDraft');
109
+ expect(ops).toHaveLength(5);
110
+ });
111
+ });
112
+ describe('supportsOperation', () => {
113
+ it('should return true for supported operations', () => {
114
+ expect(provider.supportsOperation('SendSingleMessage')).toBe(true);
115
+ expect(provider.supportsOperation('GetMessages')).toBe(true);
116
+ });
117
+ it('should return false for unsupported operations', () => {
118
+ expect(provider.supportsOperation('DeleteMessage')).toBe(false);
119
+ expect(provider.supportsOperation('MoveMessage')).toBe(false);
120
+ expect(provider.supportsOperation('ListFolders')).toBe(false);
121
+ expect(provider.supportsOperation('MarkAsRead')).toBe(false);
122
+ expect(provider.supportsOperation('ArchiveMessage')).toBe(false);
123
+ expect(provider.supportsOperation('SearchMessages')).toBe(false);
124
+ expect(provider.supportsOperation('ListAttachments')).toBe(false);
125
+ expect(provider.supportsOperation('DownloadAttachment')).toBe(false);
126
+ });
127
+ });
128
+ describe('optional operations default implementations', () => {
129
+ it('GetSingleMessage should return not supported', async () => {
130
+ const result = await provider.GetSingleMessage({ MessageID: 'msg-1' });
131
+ expect(result.Success).toBe(false);
132
+ expect(result.ErrorMessage).toContain('does not support GetSingleMessage');
133
+ expect(result.ErrorMessage).toContain('msg-1');
134
+ });
135
+ it('DeleteMessage should return not supported', async () => {
136
+ const result = await provider.DeleteMessage({ MessageID: 'msg-1' });
137
+ expect(result.Success).toBe(false);
138
+ expect(result.ErrorMessage).toContain('does not support DeleteMessage');
139
+ });
140
+ it('MoveMessage should return not supported', async () => {
141
+ const result = await provider.MoveMessage({ MessageID: 'msg-1', DestinationFolderID: 'folder-1' });
142
+ expect(result.Success).toBe(false);
143
+ expect(result.ErrorMessage).toContain('does not support MoveMessage');
144
+ expect(result.ErrorMessage).toContain('folder-1');
145
+ });
146
+ it('ListFolders should return not supported', async () => {
147
+ const result = await provider.ListFolders({});
148
+ expect(result.Success).toBe(false);
149
+ expect(result.ErrorMessage).toContain('does not support ListFolders');
150
+ });
151
+ it('MarkAsRead should return not supported', async () => {
152
+ const result = await provider.MarkAsRead({ MessageIDs: ['msg-1', 'msg-2'], IsRead: true });
153
+ expect(result.Success).toBe(false);
154
+ expect(result.ErrorMessage).toContain('does not support MarkAsRead');
155
+ expect(result.ErrorMessage).toContain('2 message(s)');
156
+ });
157
+ it('ArchiveMessage should return not supported', async () => {
158
+ const result = await provider.ArchiveMessage({ MessageID: 'msg-1' });
159
+ expect(result.Success).toBe(false);
160
+ expect(result.ErrorMessage).toContain('does not support ArchiveMessage');
161
+ });
162
+ it('SearchMessages should return not supported', async () => {
163
+ const result = await provider.SearchMessages({ Query: 'hello' });
164
+ expect(result.Success).toBe(false);
165
+ expect(result.ErrorMessage).toContain('does not support SearchMessages');
166
+ });
167
+ it('ListAttachments should return not supported', async () => {
168
+ const result = await provider.ListAttachments({ MessageID: 'msg-1' });
169
+ expect(result.Success).toBe(false);
170
+ expect(result.ErrorMessage).toContain('does not support ListAttachments');
171
+ });
172
+ it('DownloadAttachment should return not supported', async () => {
173
+ const result = await provider.DownloadAttachment({ MessageID: 'msg-1', AttachmentID: 'att-1' });
174
+ expect(result.Success).toBe(false);
175
+ expect(result.ErrorMessage).toContain('does not support DownloadAttachment');
176
+ });
177
+ it('should include credential info in error messages', async () => {
178
+ const result = await provider.GetSingleMessage({ MessageID: 'msg-1' }, { disableEnvironmentFallback: false });
179
+ expect(result.ErrorMessage).toContain('credentials provided: true');
180
+ });
181
+ it('should show credentials provided: false when no credentials', async () => {
182
+ const result = await provider.GetSingleMessage({ MessageID: 'msg-1' });
183
+ expect(result.ErrorMessage).toContain('credentials provided: false');
184
+ });
185
+ });
186
+ });
187
+ describe('CommunicationProviderEntityExtended', () => {
188
+ it('should get and set MessageTypes', () => {
189
+ const entity = new CommunicationProviderEntityExtended();
190
+ expect(entity.MessageTypes).toBeUndefined();
191
+ const mockTypes = [{ ID: '1', Name: 'Email' }];
192
+ entity.MessageTypes = mockTypes;
193
+ expect(entity.MessageTypes).toBe(mockTypes);
194
+ });
195
+ });
196
+ //# sourceMappingURL=BaseProvider.test.js.map
@@ -0,0 +1 @@
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=CredentialUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialUtils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/CredentialUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { resolveCredentialValue, validateRequiredCredentials, resolveCredentials, } from '../CredentialUtils.js';
3
+ describe('resolveCredentialValue', () => {
4
+ it('should return request value when provided', () => {
5
+ const result = resolveCredentialValue('request-val', 'env-val', false);
6
+ expect(result).toBe('request-val');
7
+ });
8
+ it('should return env value when request value is undefined and fallback enabled', () => {
9
+ const result = resolveCredentialValue(undefined, 'env-val', false);
10
+ expect(result).toBe('env-val');
11
+ });
12
+ it('should return env value when request value is null and fallback enabled', () => {
13
+ const result = resolveCredentialValue(null, 'env-val', false);
14
+ expect(result).toBe('env-val');
15
+ });
16
+ it('should return env value when request value is empty string and fallback enabled', () => {
17
+ const result = resolveCredentialValue('', 'env-val', false);
18
+ expect(result).toBe('env-val');
19
+ });
20
+ it('should return undefined when request value is empty and fallback disabled', () => {
21
+ const result = resolveCredentialValue(undefined, 'env-val', true);
22
+ expect(result).toBeUndefined();
23
+ });
24
+ it('should return undefined when both values are undefined', () => {
25
+ const result = resolveCredentialValue(undefined, undefined, false);
26
+ expect(result).toBeUndefined();
27
+ });
28
+ it('should prefer request value over env value even when both provided', () => {
29
+ const result = resolveCredentialValue('request', 'env', false);
30
+ expect(result).toBe('request');
31
+ });
32
+ it('should return request value even when fallback is disabled', () => {
33
+ const result = resolveCredentialValue('request-val', 'env-val', true);
34
+ expect(result).toBe('request-val');
35
+ });
36
+ it('should handle numeric values', () => {
37
+ const result = resolveCredentialValue(42, 100, false);
38
+ expect(result).toBe(42);
39
+ });
40
+ it('should handle boolean values', () => {
41
+ const result = resolveCredentialValue(true, false, false);
42
+ expect(result).toBe(true);
43
+ });
44
+ it('should treat 0 as a valid request value', () => {
45
+ const result = resolveCredentialValue(0, 100, false);
46
+ expect(result).toBe(0);
47
+ });
48
+ it('should treat false as a valid request value', () => {
49
+ const result = resolveCredentialValue(false, true, false);
50
+ expect(result).toBe(false);
51
+ });
52
+ });
53
+ describe('validateRequiredCredentials', () => {
54
+ it('should not throw when all required fields are present', () => {
55
+ const resolved = { apiKey: 'key-123', secret: 'secret-456' };
56
+ expect(() => validateRequiredCredentials(resolved, ['apiKey', 'secret'], 'TestProvider')).not.toThrow();
57
+ });
58
+ it('should throw when a required field is missing (undefined)', () => {
59
+ const resolved = { apiKey: undefined, secret: 'secret-456' };
60
+ expect(() => validateRequiredCredentials(resolved, ['apiKey', 'secret'], 'TestProvider'))
61
+ .toThrow('Missing required credentials for TestProvider: apiKey');
62
+ });
63
+ it('should throw when a required field is null', () => {
64
+ const resolved = { apiKey: null };
65
+ expect(() => validateRequiredCredentials(resolved, ['apiKey'], 'TestProvider'))
66
+ .toThrow('Missing required credentials for TestProvider: apiKey');
67
+ });
68
+ it('should throw when a required field is empty string', () => {
69
+ const resolved = { apiKey: '' };
70
+ expect(() => validateRequiredCredentials(resolved, ['apiKey'], 'TestProvider'))
71
+ .toThrow('Missing required credentials for TestProvider: apiKey');
72
+ });
73
+ it('should list all missing fields in error message', () => {
74
+ const resolved = { apiKey: undefined, secret: null, token: '' };
75
+ expect(() => validateRequiredCredentials(resolved, ['apiKey', 'secret', 'token'], 'TestProvider'))
76
+ .toThrow('Missing required credentials for TestProvider: apiKey, secret, token');
77
+ });
78
+ it('should include helpful guidance in error message', () => {
79
+ const resolved = { apiKey: undefined };
80
+ expect(() => validateRequiredCredentials(resolved, ['apiKey'], 'TestProvider'))
81
+ .toThrow('Provide in request or set environment variables');
82
+ });
83
+ it('should pass when field value is 0 (falsy but present)', () => {
84
+ const resolved = { count: 0 };
85
+ expect(() => validateRequiredCredentials(resolved, ['count'], 'TestProvider')).not.toThrow();
86
+ });
87
+ it('should pass when field value is false (falsy but present)', () => {
88
+ const resolved = { enabled: false };
89
+ expect(() => validateRequiredCredentials(resolved, ['enabled'], 'TestProvider')).not.toThrow();
90
+ });
91
+ it('should not throw for empty required fields array', () => {
92
+ expect(() => validateRequiredCredentials({}, [], 'TestProvider')).not.toThrow();
93
+ });
94
+ });
95
+ describe('resolveCredentials', () => {
96
+ it('should resolve all fields from request credentials', () => {
97
+ const result = resolveCredentials({ apiKey: 'req-key', secret: 'req-secret' }, { apiKey: 'env-key', secret: 'env-secret' }, ['apiKey', 'secret'], false);
98
+ expect(result.values.apiKey).toBe('req-key');
99
+ expect(result.values.secret).toBe('req-secret');
100
+ expect(result.source).toBe('request');
101
+ expect(result.fieldSources.apiKey).toBe('request');
102
+ expect(result.fieldSources.secret).toBe('request');
103
+ });
104
+ it('should resolve all fields from environment when no request credentials', () => {
105
+ const result = resolveCredentials(undefined, { apiKey: 'env-key', secret: 'env-secret' }, ['apiKey', 'secret'], false);
106
+ expect(result.values.apiKey).toBe('env-key');
107
+ expect(result.values.secret).toBe('env-secret');
108
+ expect(result.source).toBe('environment');
109
+ expect(result.fieldSources.apiKey).toBe('environment');
110
+ expect(result.fieldSources.secret).toBe('environment');
111
+ });
112
+ it('should return mixed source when some from request and some from env', () => {
113
+ const result = resolveCredentials({ apiKey: 'req-key' }, { apiKey: 'env-key', secret: 'env-secret' }, ['apiKey', 'secret'], false);
114
+ expect(result.values.apiKey).toBe('req-key');
115
+ expect(result.values.secret).toBe('env-secret');
116
+ expect(result.source).toBe('mixed');
117
+ expect(result.fieldSources.apiKey).toBe('request');
118
+ expect(result.fieldSources.secret).toBe('environment');
119
+ });
120
+ it('should not use env values when fallback disabled', () => {
121
+ const result = resolveCredentials({ apiKey: 'req-key' }, { apiKey: 'env-key', secret: 'env-secret' }, ['apiKey', 'secret'], true);
122
+ expect(result.values.apiKey).toBe('req-key');
123
+ expect(result.values.secret).toBeUndefined();
124
+ expect(result.source).toBe('request');
125
+ });
126
+ it('should skip empty request values and fall back to env', () => {
127
+ const result = resolveCredentials({ apiKey: '', secret: 'req-secret' }, { apiKey: 'env-key', secret: 'env-secret' }, ['apiKey', 'secret'], false);
128
+ expect(result.values.apiKey).toBe('env-key');
129
+ expect(result.values.secret).toBe('req-secret');
130
+ expect(result.source).toBe('mixed');
131
+ });
132
+ it('should handle empty env and empty request', () => {
133
+ const result = resolveCredentials({}, {}, ['apiKey'], false);
134
+ expect(result.values.apiKey).toBeUndefined();
135
+ expect(result.source).toBe('environment'); // no hasRequest, no hasEnv, defaults to environment
136
+ });
137
+ });
138
+ //# sourceMappingURL=CredentialUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialUtils.test.js","sourceRoot":"","sources":["../../src/__tests__/CredentialUtils.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/communication-types",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.3.0",
5
5
  "description": "MemberJunction: Communication Framework Library Generic Types",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  "scripts": {
12
12
  "start": "ts-node-dev src/index.ts",
13
13
  "build": "tsc && tsc-alias -f",
14
- "test": "echo \"Error: no test specified\" && exit 1"
14
+ "test": "echo \"No tests configured yet\""
15
15
  },
16
16
  "author": "MemberJunction.com",
17
17
  "license": "ISC",
@@ -20,10 +20,10 @@
20
20
  "typescript": "^5.9.3"
21
21
  },
22
22
  "dependencies": {
23
- "@memberjunction/global": "4.2.0",
24
- "@memberjunction/core": "4.2.0",
25
- "@memberjunction/templates-base-types": "4.2.0",
26
- "@memberjunction/core-entities": "4.2.0",
23
+ "@memberjunction/global": "4.3.0",
24
+ "@memberjunction/core": "4.3.0",
25
+ "@memberjunction/templates-base-types": "4.3.0",
26
+ "@memberjunction/core-entities": "4.3.0",
27
27
  "rxjs": "^7.8.2"
28
28
  },
29
29
  "repository": {