@memberjunction/notifications 3.4.0 → 4.1.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.
- package/README.md +195 -0
- package/dist/NotificationEngine.d.ts +1 -1
- package/dist/NotificationEngine.js +29 -33
- package/dist/NotificationEngine.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/types.js +1 -2
- package/package.json +11 -10
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# @memberjunction/notifications
|
|
2
|
+
|
|
3
|
+
Unified notification engine for MemberJunction that handles in-app, email, and SMS delivery based on notification types and user preferences. This server-side package coordinates between the MJ entity system, template engine, and communication engine to deliver notifications through the appropriate channels.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
graph TD
|
|
9
|
+
subgraph notif["@memberjunction/notifications"]
|
|
10
|
+
NE["NotificationEngine\n(Singleton)"]
|
|
11
|
+
TYPES["SendNotificationParams\nNotificationResult\nDeliveryChannels"]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
subgraph entities["MJ Entity System"]
|
|
15
|
+
UNT["UserNotificationTypes"]
|
|
16
|
+
UNP["UserNotificationPreferences"]
|
|
17
|
+
UNN["UserNotifications\n(In-App Records)"]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
subgraph comm["@memberjunction/communication-engine"]
|
|
21
|
+
CE["CommunicationEngine"]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
subgraph templates["@memberjunction/templates"]
|
|
25
|
+
TE["TemplateEngineServer"]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
subgraph providers["Delivery Channels"]
|
|
29
|
+
INAPP["In-App\n(Database Record)"]
|
|
30
|
+
EMAIL["Email\n(via SendGrid)"]
|
|
31
|
+
SMS["SMS\n(via Twilio)"]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
NE -->|reads types| UNT
|
|
35
|
+
NE -->|checks prefs| UNP
|
|
36
|
+
NE -->|creates| UNN
|
|
37
|
+
NE -->|sends via| CE
|
|
38
|
+
CE -->|renders| TE
|
|
39
|
+
UNN --> INAPP
|
|
40
|
+
CE --> EMAIL
|
|
41
|
+
CE --> SMS
|
|
42
|
+
|
|
43
|
+
style notif fill:#7c5295,stroke:#563a6b,color:#fff
|
|
44
|
+
style entities fill:#2d6a9f,stroke:#1a4971,color:#fff
|
|
45
|
+
style comm fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
46
|
+
style templates fill:#b8762f,stroke:#8a5722,color:#fff
|
|
47
|
+
style providers fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Installation
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install @memberjunction/notifications
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
### Sending a Notification
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { NotificationEngine } from '@memberjunction/notifications';
|
|
62
|
+
import { SendNotificationParams } from '@memberjunction/notifications';
|
|
63
|
+
|
|
64
|
+
const engine = NotificationEngine.Instance;
|
|
65
|
+
await engine.Config(false, contextUser);
|
|
66
|
+
|
|
67
|
+
const params: SendNotificationParams = {
|
|
68
|
+
userId: 'user-uuid',
|
|
69
|
+
typeNameOrId: 'Agent Completion',
|
|
70
|
+
title: 'Agent Run Finished',
|
|
71
|
+
message: 'Your AI agent has completed processing.',
|
|
72
|
+
templateData: {
|
|
73
|
+
agentName: 'Data Analyzer',
|
|
74
|
+
duration: '2m 34s'
|
|
75
|
+
},
|
|
76
|
+
resourceTypeId: 'resource-type-uuid',
|
|
77
|
+
resourceRecordId: 'agent-run-uuid',
|
|
78
|
+
resourceConfiguration: { conversationId: 'conv-uuid' }
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const result = await engine.SendNotification(params, contextUser);
|
|
82
|
+
|
|
83
|
+
if (result.success) {
|
|
84
|
+
console.log('Channels used:', result.deliveryChannels);
|
|
85
|
+
// { inApp: true, email: true, sms: false }
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Forcing Delivery Channels
|
|
90
|
+
|
|
91
|
+
Override user preferences and type defaults by specifying exact channels:
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const result = await engine.SendNotification({
|
|
95
|
+
userId: 'user-uuid',
|
|
96
|
+
typeNameOrId: 'System Alert',
|
|
97
|
+
title: 'Critical Error',
|
|
98
|
+
message: 'Database connection lost',
|
|
99
|
+
forceDeliveryChannels: {
|
|
100
|
+
inApp: true,
|
|
101
|
+
email: true,
|
|
102
|
+
sms: true
|
|
103
|
+
}
|
|
104
|
+
}, contextUser);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Channel Resolution Logic
|
|
108
|
+
|
|
109
|
+
```mermaid
|
|
110
|
+
flowchart TD
|
|
111
|
+
START["SendNotification()"] --> FORCE{"forceDeliveryChannels\nspecified?"}
|
|
112
|
+
FORCE -->|Yes| USE_FORCE["Use forced channels directly"]
|
|
113
|
+
FORCE -->|No| CHECK_PREFS{"User preference\nexists?"}
|
|
114
|
+
CHECK_PREFS -->|Yes| CHECK_ENABLED{"Preference\nenabled?"}
|
|
115
|
+
CHECK_ENABLED -->|No| ALL_OFF["All channels disabled\n(user opted out)"]
|
|
116
|
+
CHECK_ENABLED -->|Yes| CHECK_ALLOW{"Type allows\nuser preference?"}
|
|
117
|
+
CHECK_ALLOW -->|Yes| USE_PREFS["Use user preference\nper-channel settings"]
|
|
118
|
+
CHECK_ALLOW -->|No| USE_DEFAULTS["Use type defaults"]
|
|
119
|
+
CHECK_PREFS -->|No| USE_DEFAULTS
|
|
120
|
+
|
|
121
|
+
style START fill:#2d6a9f,stroke:#1a4971,color:#fff
|
|
122
|
+
style USE_FORCE fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
123
|
+
style USE_PREFS fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
124
|
+
style USE_DEFAULTS fill:#b8762f,stroke:#8a5722,color:#fff
|
|
125
|
+
style ALL_OFF fill:#7c5295,stroke:#563a6b,color:#fff
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The engine resolves delivery channels with this priority:
|
|
129
|
+
|
|
130
|
+
1. **Force override**: If `forceDeliveryChannels` is set, use it directly
|
|
131
|
+
2. **User opt-out**: If user preference exists but `Enabled` is false, all channels are disabled
|
|
132
|
+
3. **User preference**: If the notification type allows user preferences, use per-channel settings (`InAppEnabled`, `EmailEnabled`, `SMSEnabled`)
|
|
133
|
+
4. **Type defaults**: Fall back to `DefaultInApp`, `DefaultEmail`, `DefaultSMS` from the notification type
|
|
134
|
+
|
|
135
|
+
## Delivery Channels
|
|
136
|
+
|
|
137
|
+
| Channel | How It Works |
|
|
138
|
+
|---------|-------------|
|
|
139
|
+
| **In-App** | Creates a `UserNotification` entity record in the database. Synchronous, instant. |
|
|
140
|
+
| **Email** | Renders the notification type's `EmailTemplateID` via `TemplateEngineServer`, then sends through `CommunicationEngine` using SendGrid. Fire-and-forget (async). |
|
|
141
|
+
| **SMS** | Renders the notification type's `SMSTemplateID` via `TemplateEngineServer`, then sends through `CommunicationEngine` using Twilio. Fire-and-forget (async). |
|
|
142
|
+
|
|
143
|
+
## Type Definitions
|
|
144
|
+
|
|
145
|
+
### SendNotificationParams
|
|
146
|
+
|
|
147
|
+
| Property | Type | Required | Description |
|
|
148
|
+
|----------|------|----------|-------------|
|
|
149
|
+
| `userId` | `string` | Yes | Target user ID |
|
|
150
|
+
| `typeNameOrId` | `string` | Yes | Notification type name or UUID |
|
|
151
|
+
| `title` | `string` | Yes | Short title (in-app display, email subject) |
|
|
152
|
+
| `message` | `string` | Yes | Full notification message |
|
|
153
|
+
| `templateData` | `Record<string, unknown>` | No | Data for email/SMS template rendering |
|
|
154
|
+
| `resourceTypeId` | `string` | No | Link notification to a resource type |
|
|
155
|
+
| `resourceRecordId` | `string` | No | Link notification to a specific record |
|
|
156
|
+
| `resourceConfiguration` | `object` | No | Navigation context stored as JSON |
|
|
157
|
+
| `forceDeliveryChannels` | `DeliveryChannels` | No | Override channel resolution |
|
|
158
|
+
|
|
159
|
+
### NotificationResult
|
|
160
|
+
|
|
161
|
+
| Property | Type | Description |
|
|
162
|
+
|----------|------|-------------|
|
|
163
|
+
| `success` | `boolean` | Overall operation success |
|
|
164
|
+
| `inAppNotificationId` | `string` | ID of created in-app notification |
|
|
165
|
+
| `emailSent` | `boolean` | Whether email delivery was initiated |
|
|
166
|
+
| `smsSent` | `boolean` | Whether SMS delivery was initiated |
|
|
167
|
+
| `deliveryChannels` | `DeliveryChannels` | Resolved channels used |
|
|
168
|
+
| `errors` | `string[]` | Error messages if any |
|
|
169
|
+
|
|
170
|
+
### DeliveryChannels
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
interface DeliveryChannels {
|
|
174
|
+
inApp: boolean;
|
|
175
|
+
email: boolean;
|
|
176
|
+
sms: boolean;
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Dependencies
|
|
181
|
+
|
|
182
|
+
| Package | Purpose |
|
|
183
|
+
|---------|---------|
|
|
184
|
+
| `@memberjunction/core` | BaseEngine, Metadata, UserInfo, logging |
|
|
185
|
+
| `@memberjunction/core-entities` | UserNotification, UserNotificationType entities |
|
|
186
|
+
| `@memberjunction/communication-engine` | CommunicationEngine for email/SMS delivery |
|
|
187
|
+
| `@memberjunction/communication-types` | Message class |
|
|
188
|
+
| `@memberjunction/templates` | TemplateEngineServer for rendering |
|
|
189
|
+
| `@memberjunction/sqlserver-dataprovider` | UserCache for server-side user lookup |
|
|
190
|
+
|
|
191
|
+
## Development
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
npm run build # Compile TypeScript
|
|
195
|
+
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseEngine, IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
2
|
-
import { SendNotificationParams, NotificationResult } from './types';
|
|
2
|
+
import { SendNotificationParams, NotificationResult } from './types.js';
|
|
3
3
|
export declare class NotificationEngine extends BaseEngine<NotificationEngine> {
|
|
4
4
|
/**
|
|
5
5
|
* Returns the singleton instance of the NotificationEngine
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const communication_engine_1 = require("@memberjunction/communication-engine");
|
|
8
|
-
const communication_types_1 = require("@memberjunction/communication-types");
|
|
9
|
-
const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
|
|
1
|
+
import { BaseEngine, Metadata, LogError, LogStatus } from '@memberjunction/core';
|
|
2
|
+
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
3
|
+
import { TemplateEngineServer } from '@memberjunction/templates';
|
|
4
|
+
import { CommunicationEngine } from '@memberjunction/communication-engine';
|
|
5
|
+
import { Message } from '@memberjunction/communication-types';
|
|
6
|
+
import { UserCache } from '@memberjunction/sqlserver-dataprovider';
|
|
10
7
|
/*
|
|
11
8
|
* Unified notification engine that handles in-app, email, and SMS delivery
|
|
12
9
|
* based on notification types and user preferences.
|
|
@@ -14,7 +11,7 @@ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider
|
|
|
14
11
|
* This engine relies on UserInfoEngine for notification types and preferences.
|
|
15
12
|
* UserInfoEngine loads and caches all notification metadata via BaseEngine.
|
|
16
13
|
*/
|
|
17
|
-
class NotificationEngine extends
|
|
14
|
+
export class NotificationEngine extends BaseEngine {
|
|
18
15
|
/**
|
|
19
16
|
* Returns the singleton instance of the NotificationEngine
|
|
20
17
|
*/
|
|
@@ -34,9 +31,9 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
34
31
|
*/
|
|
35
32
|
async Config(forceRefresh = false, contextUser, provider) {
|
|
36
33
|
// Ensure UserInfoEngine is configured (it loads notification types)
|
|
37
|
-
await
|
|
34
|
+
await UserInfoEngine.Instance.Config(forceRefresh, contextUser, provider);
|
|
38
35
|
// BaseEngine Load with empty configs - we don't load our own data
|
|
39
|
-
await this.Load([], provider ||
|
|
36
|
+
await this.Load([], provider || Metadata.Provider, forceRefresh, contextUser);
|
|
40
37
|
}
|
|
41
38
|
/**
|
|
42
39
|
* Get a notification type by name (case-insensitive) or ID.
|
|
@@ -46,7 +43,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
46
43
|
* @returns The notification type entity or null if not found
|
|
47
44
|
*/
|
|
48
45
|
getNotificationType(nameOrId) {
|
|
49
|
-
const types =
|
|
46
|
+
const types = UserInfoEngine.Instance.NotificationTypes;
|
|
50
47
|
// Try by ID first
|
|
51
48
|
const byId = types.find(t => t.ID === nameOrId);
|
|
52
49
|
if (byId)
|
|
@@ -88,7 +85,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
88
85
|
result.deliveryChannels = channels;
|
|
89
86
|
// Early return if user has opted out (all channels disabled)
|
|
90
87
|
if (!channels.inApp && !channels.email && !channels.sms) {
|
|
91
|
-
|
|
88
|
+
LogStatus(`User has opted out or all channels disabled for notification type: ${type.Name}`);
|
|
92
89
|
return result;
|
|
93
90
|
}
|
|
94
91
|
// 5. Create in-app notification if enabled (awaited - fast DB insert)
|
|
@@ -100,7 +97,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
100
97
|
result.emailSent = true; // Optimistically set - actual send is async
|
|
101
98
|
this.sendEmail(params, type, contextUser).catch((error) => {
|
|
102
99
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
103
|
-
|
|
100
|
+
LogError(`Email delivery failed for notification type ${type.Name}: ${errorMessage}`);
|
|
104
101
|
});
|
|
105
102
|
}
|
|
106
103
|
// 7. Send SMS if enabled - fire and forget (don't block)
|
|
@@ -108,7 +105,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
108
105
|
result.smsSent = true; // Optimistically set - actual send is async
|
|
109
106
|
this.sendSMS(params, type, contextUser).catch((error) => {
|
|
110
107
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
111
|
-
|
|
108
|
+
LogError(`SMS delivery failed for notification type ${type.Name}: ${errorMessage}`);
|
|
112
109
|
});
|
|
113
110
|
}
|
|
114
111
|
return result;
|
|
@@ -117,7 +114,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
117
114
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
118
115
|
result.success = false;
|
|
119
116
|
result.errors?.push(errorMessage);
|
|
120
|
-
|
|
117
|
+
LogError(`Notification delivery failed: ${errorMessage}`);
|
|
121
118
|
return result;
|
|
122
119
|
}
|
|
123
120
|
}
|
|
@@ -156,7 +153,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
156
153
|
*/
|
|
157
154
|
getUserPreferences(userId, typeId) {
|
|
158
155
|
// Use cached preferences from UserInfoEngine (user-specific)
|
|
159
|
-
const pref =
|
|
156
|
+
const pref = UserInfoEngine.Instance.GetUserPreferenceForType(userId, typeId);
|
|
160
157
|
// If preference exists, return it
|
|
161
158
|
if (pref) {
|
|
162
159
|
return pref;
|
|
@@ -174,7 +171,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
174
171
|
* Create in-app notification record
|
|
175
172
|
*/
|
|
176
173
|
async createInAppNotification(params, type, contextUser) {
|
|
177
|
-
const md = new
|
|
174
|
+
const md = new Metadata();
|
|
178
175
|
const notification = await md.GetEntityObject('User Notifications', contextUser);
|
|
179
176
|
notification.UserID = params.userId;
|
|
180
177
|
notification.NotificationTypeID = type.ID;
|
|
@@ -191,7 +188,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
191
188
|
notification.ResourceConfiguration = JSON.stringify(params.resourceConfiguration);
|
|
192
189
|
}
|
|
193
190
|
if (await notification.Save()) {
|
|
194
|
-
|
|
191
|
+
LogStatus(`In-app notification created: ${notification.ID} for type: ${type.Name}`);
|
|
195
192
|
return notification.ID;
|
|
196
193
|
}
|
|
197
194
|
throw new Error('Failed to save in-app notification');
|
|
@@ -203,11 +200,11 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
203
200
|
// Access EmailTemplateID
|
|
204
201
|
const emailTemplateId = type.EmailTemplateID;
|
|
205
202
|
if (!emailTemplateId) {
|
|
206
|
-
|
|
203
|
+
LogStatus(`No email template configured for notification type: ${type.Name}`);
|
|
207
204
|
return false;
|
|
208
205
|
}
|
|
209
206
|
// Load and configure template engine (loads all template metadata)
|
|
210
|
-
const templateEngine =
|
|
207
|
+
const templateEngine = TemplateEngineServer.Instance;
|
|
211
208
|
await templateEngine.Config(false, contextUser);
|
|
212
209
|
// Find the email template from the cached Templates array
|
|
213
210
|
const templateEntity = templateEngine.Templates.find((t) => t.ID === emailTemplateId);
|
|
@@ -215,7 +212,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
215
212
|
throw new Error(`Email template not found: ${emailTemplateId}`);
|
|
216
213
|
}
|
|
217
214
|
// Get user from cache (server-side optimization - no database query)
|
|
218
|
-
const user =
|
|
215
|
+
const user = UserCache.Instance.Users.find((u) => u.ID === params.userId);
|
|
219
216
|
if (!user) {
|
|
220
217
|
throw new Error('User not found for email delivery');
|
|
221
218
|
}
|
|
@@ -223,9 +220,9 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
223
220
|
throw new Error('User has no email address configured');
|
|
224
221
|
}
|
|
225
222
|
// Configure and send via CommunicationEngine
|
|
226
|
-
const commEngine =
|
|
223
|
+
const commEngine = CommunicationEngine.Instance;
|
|
227
224
|
await commEngine.Config(false, contextUser);
|
|
228
|
-
const message = new
|
|
225
|
+
const message = new Message();
|
|
229
226
|
message.From = process.env.NOTIFICATION_FROM_EMAIL || 'notifications@memberjunction.com';
|
|
230
227
|
message.To = user.Email;
|
|
231
228
|
message.HTMLBodyTemplate = templateEntity;
|
|
@@ -234,7 +231,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
234
231
|
const sendResult = await commEngine.SendSingleMessage('SendGrid', 'Email', message, undefined, false);
|
|
235
232
|
const success = sendResult?.Success === true;
|
|
236
233
|
if (success) {
|
|
237
|
-
|
|
234
|
+
LogStatus(`Email sent successfully to ${user.Email} for notification type: ${type.Name}`);
|
|
238
235
|
}
|
|
239
236
|
return success;
|
|
240
237
|
}
|
|
@@ -245,11 +242,11 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
245
242
|
// Access SMSTemplateID
|
|
246
243
|
const smsTemplateId = type.SMSTemplateID;
|
|
247
244
|
if (!smsTemplateId) {
|
|
248
|
-
|
|
245
|
+
LogStatus(`No SMS template configured for notification type: ${type.Name}`);
|
|
249
246
|
return false;
|
|
250
247
|
}
|
|
251
248
|
// Load and configure template engine (loads all template metadata)
|
|
252
|
-
const templateEngine =
|
|
249
|
+
const templateEngine = TemplateEngineServer.Instance;
|
|
253
250
|
await templateEngine.Config(false, contextUser);
|
|
254
251
|
// Find the SMS template from the cached Templates array
|
|
255
252
|
const templateEntity = templateEngine.Templates.find((t) => t.ID === smsTemplateId);
|
|
@@ -257,7 +254,7 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
257
254
|
throw new Error(`SMS template not found: ${smsTemplateId}`);
|
|
258
255
|
}
|
|
259
256
|
// Get user from cache (server-side optimization - no database query)
|
|
260
|
-
const user =
|
|
257
|
+
const user = UserCache.Instance.Users.find((u) => u.ID === params.userId);
|
|
261
258
|
if (!user) {
|
|
262
259
|
throw new Error('User not found for SMS delivery');
|
|
263
260
|
}
|
|
@@ -267,19 +264,18 @@ class NotificationEngine extends core_1.BaseEngine {
|
|
|
267
264
|
throw new Error('User has no phone number configured');
|
|
268
265
|
}
|
|
269
266
|
// Send via CommunicationEngine - let it handle template rendering
|
|
270
|
-
const commEngine =
|
|
267
|
+
const commEngine = CommunicationEngine.Instance;
|
|
271
268
|
await commEngine.Config(false, contextUser);
|
|
272
|
-
const message = new
|
|
269
|
+
const message = new Message();
|
|
273
270
|
message.To = userWithPhone.Phone;
|
|
274
271
|
message.BodyTemplate = templateEntity;
|
|
275
272
|
message.ContextData = params.templateData || {};
|
|
276
273
|
const sendResult = await commEngine.SendSingleMessage('Twilio', 'Standard SMS', message, undefined, false);
|
|
277
274
|
const success = sendResult?.Success === true;
|
|
278
275
|
if (success) {
|
|
279
|
-
|
|
276
|
+
LogStatus(`SMS sent successfully to ${userWithPhone.Phone} for notification type: ${type.Name}`);
|
|
280
277
|
}
|
|
281
278
|
return success;
|
|
282
279
|
}
|
|
283
280
|
}
|
|
284
|
-
exports.NotificationEngine = NotificationEngine;
|
|
285
281
|
//# sourceMappingURL=NotificationEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationEngine.js","sourceRoot":"","sources":["../src/NotificationEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NotificationEngine.js","sourceRoot":"","sources":["../src/NotificationEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
* }, contextUser);
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
|
-
export { NotificationEngine } from './NotificationEngine';
|
|
35
|
-
export { SendNotificationParams, NotificationResult, DeliveryChannels } from './types';
|
|
34
|
+
export { NotificationEngine } from './NotificationEngine.js';
|
|
35
|
+
export { SendNotificationParams, NotificationResult, DeliveryChannels } from './types.js';
|
|
36
36
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @memberjunction/notifications
|
|
4
3
|
*
|
|
@@ -32,8 +31,5 @@
|
|
|
32
31
|
* }, contextUser);
|
|
33
32
|
* ```
|
|
34
33
|
*/
|
|
35
|
-
|
|
36
|
-
exports.NotificationEngine = void 0;
|
|
37
|
-
var NotificationEngine_1 = require("./NotificationEngine");
|
|
38
|
-
Object.defineProperty(exports, "NotificationEngine", { enumerable: true, get: function () { return NotificationEngine_1.NotificationEngine; } });
|
|
34
|
+
export { NotificationEngine } from './NotificationEngine.js';
|
|
39
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/types.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/notifications",
|
|
3
|
-
"
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "4.1.0",
|
|
4
5
|
"description": "MemberJunction: Unified Notification System with Multi-Channel Delivery",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
@@ -9,23 +10,23 @@
|
|
|
9
10
|
],
|
|
10
11
|
"scripts": {
|
|
11
12
|
"start": "ts-node-dev src/index.ts",
|
|
12
|
-
"build": "tsc",
|
|
13
|
+
"build": "tsc && tsc-alias -f",
|
|
13
14
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
15
|
},
|
|
15
16
|
"author": "MemberJunction.com",
|
|
16
17
|
"license": "ISC",
|
|
17
18
|
"devDependencies": {
|
|
18
19
|
"ts-node-dev": "^2.0.0",
|
|
19
|
-
"typescript": "^5.
|
|
20
|
+
"typescript": "^5.9.3"
|
|
20
21
|
},
|
|
21
22
|
"dependencies": {
|
|
22
|
-
"@memberjunction/global": "
|
|
23
|
-
"@memberjunction/core": "
|
|
24
|
-
"@memberjunction/core-entities": "
|
|
25
|
-
"@memberjunction/templates": "
|
|
26
|
-
"@memberjunction/communication-engine": "
|
|
27
|
-
"@memberjunction/communication-types": "
|
|
28
|
-
"@memberjunction/sqlserver-dataprovider": "
|
|
23
|
+
"@memberjunction/global": "4.1.0",
|
|
24
|
+
"@memberjunction/core": "4.1.0",
|
|
25
|
+
"@memberjunction/core-entities": "4.1.0",
|
|
26
|
+
"@memberjunction/templates": "4.1.0",
|
|
27
|
+
"@memberjunction/communication-engine": "4.1.0",
|
|
28
|
+
"@memberjunction/communication-types": "4.1.0",
|
|
29
|
+
"@memberjunction/sqlserver-dataprovider": "4.1.0"
|
|
29
30
|
},
|
|
30
31
|
"repository": {
|
|
31
32
|
"type": "git",
|