@memberjunction/notifications 4.2.0 → 4.3.1

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=NotificationEngine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/NotificationEngine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Unit tests for the Communication/notifications package.
3
+ * Tests: delivery channel resolution, type lookup, error handling.
4
+ */
5
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
6
+ // ---------------------------------------------------------------------------
7
+ // Mocks
8
+ // ---------------------------------------------------------------------------
9
+ const { mockUserInfoEngineInstance } = vi.hoisted(() => ({
10
+ mockUserInfoEngineInstance: {
11
+ Config: vi.fn().mockResolvedValue(undefined),
12
+ NotificationTypes: [],
13
+ GetUserPreferenceForType: vi.fn().mockReturnValue(null),
14
+ },
15
+ }));
16
+ vi.mock('@memberjunction/core', () => {
17
+ const mockLoad = vi.fn().mockResolvedValue(undefined);
18
+ class FakeBaseEngine {
19
+ constructor() {
20
+ this._loaded = false;
21
+ this.Load = mockLoad;
22
+ }
23
+ TryThrowIfNotLoaded() {
24
+ if (!this._loaded) {
25
+ // For testing, just mark as loaded
26
+ this._loaded = true;
27
+ }
28
+ }
29
+ static getInstance() {
30
+ return new this();
31
+ }
32
+ }
33
+ return {
34
+ BaseEngine: FakeBaseEngine,
35
+ BaseEnginePropertyConfig: class {
36
+ },
37
+ IMetadataProvider: class {
38
+ },
39
+ Metadata: class {
40
+ constructor() {
41
+ this.GetEntityObject = vi.fn().mockResolvedValue({
42
+ UserID: '',
43
+ NotificationTypeID: '',
44
+ Title: '',
45
+ Message: '',
46
+ Unread: true,
47
+ ResourceTypeID: null,
48
+ ResourceRecordID: null,
49
+ ResourceConfiguration: null,
50
+ ID: 'notif-1',
51
+ Save: vi.fn().mockResolvedValue(true),
52
+ });
53
+ }
54
+ static { this.Provider = {}; }
55
+ },
56
+ UserInfo: class {
57
+ constructor() {
58
+ this.ID = 'user-1';
59
+ }
60
+ },
61
+ LogError: vi.fn(),
62
+ LogStatus: vi.fn(),
63
+ RegisterForStartup: () => (target) => target,
64
+ };
65
+ });
66
+ vi.mock('@memberjunction/core-entities', () => ({
67
+ UserNotificationEntity: class {
68
+ },
69
+ UserNotificationTypeEntity: class {
70
+ },
71
+ UserNotificationPreferenceEntity: class {
72
+ },
73
+ UserInfoEngine: {
74
+ Instance: mockUserInfoEngineInstance,
75
+ },
76
+ }));
77
+ vi.mock('@memberjunction/templates', () => ({
78
+ TemplateEngineServer: {
79
+ Instance: {
80
+ Config: vi.fn().mockResolvedValue(undefined),
81
+ Templates: [],
82
+ },
83
+ },
84
+ }));
85
+ vi.mock('@memberjunction/communication-engine', () => ({
86
+ CommunicationEngine: {
87
+ Instance: {
88
+ Config: vi.fn().mockResolvedValue(undefined),
89
+ SendSingleMessage: vi.fn().mockResolvedValue({ Success: true }),
90
+ },
91
+ },
92
+ }));
93
+ vi.mock('@memberjunction/communication-types', () => ({
94
+ Message: class {
95
+ constructor() {
96
+ this.From = '';
97
+ this.To = '';
98
+ this.Subject = '';
99
+ this.HTMLBodyTemplate = null;
100
+ this.BodyTemplate = null;
101
+ this.ContextData = {};
102
+ }
103
+ },
104
+ }));
105
+ vi.mock('@memberjunction/sqlserver-dataprovider', () => ({
106
+ UserCache: {
107
+ Instance: {
108
+ Users: [
109
+ { ID: 'user-1', Email: 'user@example.com', Name: 'Test User' },
110
+ ],
111
+ },
112
+ },
113
+ }));
114
+ // ---------------------------------------------------------------------------
115
+ // Import after mocks
116
+ // ---------------------------------------------------------------------------
117
+ import { NotificationEngine } from '../NotificationEngine.js';
118
+ // ---------------------------------------------------------------------------
119
+ // Tests
120
+ // ---------------------------------------------------------------------------
121
+ describe('NotificationEngine', () => {
122
+ let engine;
123
+ const contextUser = { ID: 'user-1' };
124
+ beforeEach(() => {
125
+ vi.clearAllMocks();
126
+ engine = new NotificationEngine();
127
+ // Override internal _loaded state
128
+ engine['_loaded'] = true;
129
+ // Set up default notification types
130
+ mockUserInfoEngineInstance.NotificationTypes = [
131
+ {
132
+ ID: 'type-1',
133
+ Name: 'Agent Completion',
134
+ AllowUserPreference: true,
135
+ DefaultInApp: true,
136
+ DefaultEmail: false,
137
+ DefaultSMS: false,
138
+ EmailTemplateID: null,
139
+ SMSTemplateID: null,
140
+ },
141
+ {
142
+ ID: 'type-2',
143
+ Name: 'System Alert',
144
+ AllowUserPreference: false,
145
+ DefaultInApp: true,
146
+ DefaultEmail: true,
147
+ DefaultSMS: false,
148
+ EmailTemplateID: 'tmpl-email-1',
149
+ SMSTemplateID: null,
150
+ },
151
+ ];
152
+ });
153
+ describe('SendNotification - type lookup', () => {
154
+ it('should fail when notification type not found', async () => {
155
+ const params = {
156
+ userId: 'user-1',
157
+ typeNameOrId: 'NonExistentType',
158
+ title: 'Test',
159
+ message: 'Test message',
160
+ };
161
+ const result = await engine.SendNotification(params, contextUser);
162
+ expect(result.success).toBe(false);
163
+ expect(result.errors).toContain('Notification type not found: NonExistentType');
164
+ });
165
+ it('should find notification type by name (case-insensitive)', async () => {
166
+ const params = {
167
+ userId: 'user-1',
168
+ typeNameOrId: 'agent completion',
169
+ title: 'Done!',
170
+ message: 'Your agent is done',
171
+ };
172
+ const result = await engine.SendNotification(params, contextUser);
173
+ expect(result.success).toBe(true);
174
+ expect(result.deliveryChannels.inApp).toBe(true);
175
+ });
176
+ it('should find notification type by ID', async () => {
177
+ const params = {
178
+ userId: 'user-1',
179
+ typeNameOrId: 'type-1',
180
+ title: 'Done!',
181
+ message: 'Your agent is done',
182
+ };
183
+ const result = await engine.SendNotification(params, contextUser);
184
+ expect(result.success).toBe(true);
185
+ });
186
+ });
187
+ describe('SendNotification - delivery channel resolution', () => {
188
+ it('should use type defaults when no user preference exists', async () => {
189
+ const params = {
190
+ userId: 'user-1',
191
+ typeNameOrId: 'Agent Completion',
192
+ title: 'Test',
193
+ message: 'Test',
194
+ };
195
+ const result = await engine.SendNotification(params, contextUser);
196
+ expect(result.deliveryChannels.inApp).toBe(true);
197
+ expect(result.deliveryChannels.email).toBe(false);
198
+ expect(result.deliveryChannels.sms).toBe(false);
199
+ });
200
+ it('should use forceDeliveryChannels when specified', async () => {
201
+ const params = {
202
+ userId: 'user-1',
203
+ typeNameOrId: 'Agent Completion',
204
+ title: 'Test',
205
+ message: 'Test',
206
+ forceDeliveryChannels: { inApp: false, email: true, sms: true },
207
+ };
208
+ const result = await engine.SendNotification(params, contextUser);
209
+ expect(result.deliveryChannels.inApp).toBe(false);
210
+ expect(result.deliveryChannels.email).toBe(true);
211
+ expect(result.deliveryChannels.sms).toBe(true);
212
+ });
213
+ it('should disable all channels when user has opted out', async () => {
214
+ mockUserInfoEngineInstance.GetUserPreferenceForType.mockReturnValue({
215
+ Enabled: false,
216
+ InAppEnabled: null,
217
+ EmailEnabled: null,
218
+ SMSEnabled: null,
219
+ });
220
+ const params = {
221
+ userId: 'user-1',
222
+ typeNameOrId: 'Agent Completion',
223
+ title: 'Test',
224
+ message: 'Test',
225
+ };
226
+ const result = await engine.SendNotification(params, contextUser);
227
+ expect(result.deliveryChannels.inApp).toBe(false);
228
+ expect(result.deliveryChannels.email).toBe(false);
229
+ expect(result.deliveryChannels.sms).toBe(false);
230
+ });
231
+ it('should respect user preferences when allowed', async () => {
232
+ mockUserInfoEngineInstance.GetUserPreferenceForType.mockReturnValue({
233
+ Enabled: true,
234
+ InAppEnabled: false,
235
+ EmailEnabled: true,
236
+ SMSEnabled: null,
237
+ });
238
+ const params = {
239
+ userId: 'user-1',
240
+ typeNameOrId: 'Agent Completion',
241
+ title: 'Test',
242
+ message: 'Test',
243
+ };
244
+ const result = await engine.SendNotification(params, contextUser);
245
+ expect(result.deliveryChannels.inApp).toBe(false);
246
+ expect(result.deliveryChannels.email).toBe(true);
247
+ expect(result.deliveryChannels.sms).toBe(false);
248
+ });
249
+ it('should use type defaults when AllowUserPreference is false', async () => {
250
+ const params = {
251
+ userId: 'user-1',
252
+ typeNameOrId: 'System Alert',
253
+ title: 'Alert!',
254
+ message: 'System message',
255
+ };
256
+ const result = await engine.SendNotification(params, contextUser);
257
+ // System Alert: DefaultInApp=true, DefaultEmail=true, DefaultSMS=false
258
+ expect(result.deliveryChannels.inApp).toBe(true);
259
+ expect(result.deliveryChannels.email).toBe(true);
260
+ expect(result.deliveryChannels.sms).toBe(false);
261
+ });
262
+ });
263
+ });
264
+ //# sourceMappingURL=NotificationEngine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationEngine.test.js","sourceRoot":"","sources":["../../src/__tests__/NotificationEngine.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,EAAE,0BAA0B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,0BAA0B,EAAE;QAC1B,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC5C,iBAAiB,EAAE,EAAwM;QAC3N,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;KACxD;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,cAAc;QAApB;YACE,YAAO,GAAG,KAAK,CAAC;YAChB,SAAI,GAAG,QAAQ,CAAC;QAUlB,CAAC;QATC,mBAAmB;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,mCAAmC;gBACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,WAAW;YAChB,OAAO,IAAK,IAAgC,EAAE,CAAC;QACjD,CAAC;KACF;IACD,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,wBAAwB,EAAE;SAAQ;QAClC,iBAAiB,EAAE;SAAQ;QAC3B,QAAQ,EAAE;YAER;gBACE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;oBAC/C,MAAM,EAAE,EAAE;oBACV,kBAAkB,EAAE,EAAE;oBACtB,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,IAAI;oBACpB,gBAAgB,EAAE,IAAI;oBACtB,qBAAqB,EAAE,IAAI;oBAC3B,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;qBACM,aAAQ,GAAG,EAAE,CAAC;SACtB;QACD,QAAQ,EAAE;YAAA;gBAAQ,OAAE,GAAG,QAAQ,CAAC;YAAC,CAAC;SAAA;QAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;QAClB,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,MAAe,EAAE,EAAE,CAAC,MAAM;KACtD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,sBAAsB,EAAE;KAAQ;IAChC,0BAA0B,EAAE;KAAQ;IACpC,gCAAgC,EAAE;KAAQ;IAC1C,cAAc,EAAE;QACd,QAAQ,EAAE,0BAA0B;KACrC;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,oBAAoB,EAAE;QACpB,QAAQ,EAAE;YACR,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC5C,SAAS,EAAE,EAAE;SACd;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,mBAAmB,EAAE;QACnB,QAAQ,EAAE;YACR,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC5C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAChE;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,OAAO,EAAE;QAAA;YACP,SAAI,GAAG,EAAE,CAAC;YACV,OAAE,GAAG,EAAE,CAAC;YACR,YAAO,GAAG,EAAE,CAAC;YACb,qBAAgB,GAAY,IAAI,CAAC;YACjC,iBAAY,GAAY,IAAI,CAAC;YAC7B,gBAAW,GAA4B,EAAE,CAAC;QAC5C,CAAC;KAAA;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,SAAS,EAAE;QACT,QAAQ,EAAE;YACR,KAAK,EAAE;gBACL,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE;aAC/D;SACF;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,MAA0B,CAAC;IAC/B,MAAM,WAAW,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAkE,CAAC;IAErG,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAClC,kCAAkC;QACjC,MAA6C,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAEjE,oCAAoC;QACpC,0BAA0B,CAAC,iBAAiB,GAAG;YAC7C;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,kBAAkB;gBACxB,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,IAAI;aACpB;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;gBACpB,mBAAmB,EAAE,KAAK;gBAC1B,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,cAAc;gBAC/B,aAAa,EAAE,IAAI;aACpB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,iBAAiB;gBAC/B,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,cAAc;aACxB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,kBAAkB;gBAChC,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,oBAAoB;aAC9B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,QAAQ;gBACtB,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,oBAAoB;aAC9B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC9D,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,kBAAkB;gBAChC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,kBAAkB;gBAChC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,MAAM;gBACf,qBAAqB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;aAChE,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,0BAA0B,CAAC,wBAAwB,CAAC,eAAe,CAAC;gBAClE,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,kBAAkB;gBAChC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,0BAA0B,CAAC,wBAAwB,CAAC,eAAe,CAAC;gBAClE,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,KAAK;gBACnB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,kBAAkB;gBAChC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,MAAM,GAA2B;gBACrC,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,cAAc;gBAC5B,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,gBAAgB;aAC1B,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClE,uEAAuE;YACvE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/notifications",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.3.1",
5
5
  "description": "MemberJunction: Unified Notification System with Multi-Channel Delivery",
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": "vitest run"
15
15
  },
16
16
  "author": "MemberJunction.com",
17
17
  "license": "ISC",
@@ -20,13 +20,13 @@
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/core-entities": "4.2.0",
26
- "@memberjunction/templates": "4.2.0",
27
- "@memberjunction/communication-engine": "4.2.0",
28
- "@memberjunction/communication-types": "4.2.0",
29
- "@memberjunction/sqlserver-dataprovider": "4.2.0"
23
+ "@memberjunction/global": "4.3.1",
24
+ "@memberjunction/core": "4.3.1",
25
+ "@memberjunction/core-entities": "4.3.1",
26
+ "@memberjunction/templates": "4.3.1",
27
+ "@memberjunction/communication-engine": "4.3.1",
28
+ "@memberjunction/communication-types": "4.3.1",
29
+ "@memberjunction/sqlserver-dataprovider": "4.3.1"
30
30
  },
31
31
  "repository": {
32
32
  "type": "git",