@plyaz/types 1.13.17 → 1.14.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/dist/api/endpoints/infobip/types.d.ts +5 -0
- package/dist/auth/index.cjs +12 -4196
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +10 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/schemas.d.ts +20 -21
- package/dist/errors/types.d.ts +42 -3
- package/dist/index.cjs +165 -4206
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +142 -6
- package/dist/index.js.map +1 -1
- package/dist/notifications/index.cjs +155 -4201
- package/dist/notifications/index.cjs.map +1 -1
- package/dist/notifications/index.d.ts +11 -0
- package/dist/notifications/index.js +133 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/schemas.d.ts +13 -3
- package/dist/notifications/types.d.ts +66 -24
- package/dist/notifications/webhooks.schemas.d.ts +278 -0
- package/package.json +4 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications Module
|
|
3
|
+
*
|
|
4
|
+
* Type definitions, enums, and validation schemas for @plyaz/notifications package
|
|
5
|
+
*
|
|
6
|
+
* @module notifications
|
|
7
|
+
*/
|
|
8
|
+
export * from './enums';
|
|
9
|
+
export * from './schemas';
|
|
10
|
+
export * from './webhooks.schemas';
|
|
11
|
+
export type * from './types';
|
|
@@ -139,7 +139,139 @@ var QueuePrioritySchema = z.enum(["high", "normal", "low"]);
|
|
|
139
139
|
var CorrelationIdSchema = z.string().uuid("Correlation ID must be a valid UUID v4").describe("UUID v4 correlation ID");
|
|
140
140
|
var TemplateDataSchema = z.record(z.string(), z.unknown()).optional();
|
|
141
141
|
var DeviceTokenSchema = z.string().min(1, "Device token is required").max(MAX_DEVICE_TOKEN_LENGTH, "Device token must be 512 characters or less");
|
|
142
|
+
var InfobipEmailStatusSchema = z.object({
|
|
143
|
+
groupId: z.number().optional(),
|
|
144
|
+
groupName: z.string().optional(),
|
|
145
|
+
id: z.number().optional(),
|
|
146
|
+
name: z.string().optional(),
|
|
147
|
+
description: z.string().optional(),
|
|
148
|
+
action: z.string().optional()
|
|
149
|
+
});
|
|
150
|
+
var InfobipErrorInfoSchema = z.object({
|
|
151
|
+
groupId: z.number().optional(),
|
|
152
|
+
groupName: z.string().optional(),
|
|
153
|
+
id: z.number().optional(),
|
|
154
|
+
name: z.string().optional(),
|
|
155
|
+
description: z.string().optional(),
|
|
156
|
+
permanent: z.boolean().optional()
|
|
157
|
+
});
|
|
158
|
+
var InfobipPriceInfoSchema = z.object({
|
|
159
|
+
pricePerMessage: z.number().optional(),
|
|
160
|
+
currency: z.string().optional()
|
|
161
|
+
});
|
|
162
|
+
var InfobipDeliveryResultSchema = z.object({
|
|
163
|
+
messageId: z.string().optional(),
|
|
164
|
+
to: z.string().optional(),
|
|
165
|
+
bulkId: z.string().optional(),
|
|
166
|
+
sentAt: z.string().optional(),
|
|
167
|
+
doneAt: z.string().optional(),
|
|
168
|
+
status: InfobipEmailStatusSchema.optional(),
|
|
169
|
+
error: InfobipErrorInfoSchema.optional(),
|
|
170
|
+
attemptCount: z.number().optional(),
|
|
171
|
+
timeToFirstAttempt: z.number().optional(),
|
|
172
|
+
sendingIp: z.string().optional(),
|
|
173
|
+
price: InfobipPriceInfoSchema.optional(),
|
|
174
|
+
smsCount: z.number().optional(),
|
|
175
|
+
browserLink: z.string().optional(),
|
|
176
|
+
applicationId: z.string().optional(),
|
|
177
|
+
entityId: z.string().optional(),
|
|
178
|
+
campaignReferenceId: z.string().optional(),
|
|
179
|
+
callbackData: z.string().optional()
|
|
180
|
+
}).loose();
|
|
181
|
+
var InfobipDeliveryWebhookSchema = z.object({
|
|
182
|
+
results: z.array(InfobipDeliveryResultSchema)
|
|
183
|
+
});
|
|
184
|
+
var InfobipGeoLocationSchema = z.object({
|
|
185
|
+
countryName: z.string().optional(),
|
|
186
|
+
countryCode: z.string().optional(),
|
|
187
|
+
regionName: z.string().optional(),
|
|
188
|
+
city: z.string().optional(),
|
|
189
|
+
latitude: z.number().optional(),
|
|
190
|
+
longitude: z.number().optional()
|
|
191
|
+
}).loose();
|
|
192
|
+
var InfobipRecipientInfoSchema = z.object({
|
|
193
|
+
messageId: z.number().optional(),
|
|
194
|
+
to: z.string().optional(),
|
|
195
|
+
requestId: z.string().optional(),
|
|
196
|
+
sentDateTime: z.number().optional()
|
|
197
|
+
}).loose();
|
|
198
|
+
var InfobipTrackingEventSchema = z.object({
|
|
199
|
+
messageId: z.number().optional(),
|
|
200
|
+
bulkId: z.string().optional(),
|
|
201
|
+
recipient: z.string().optional(),
|
|
202
|
+
sender: z.string().optional(),
|
|
203
|
+
domain: z.string().optional(),
|
|
204
|
+
notificationType: z.string().optional(),
|
|
205
|
+
// OPENED, CLICKED, COMPLAINED, LATE_BOUNCE, UNSUBSCRIBED
|
|
206
|
+
eventId: z.string().optional(),
|
|
207
|
+
sendDateTime: z.number().optional(),
|
|
208
|
+
url: z.string().optional(),
|
|
209
|
+
// For CLICKED events
|
|
210
|
+
applicationId: z.string().optional(),
|
|
211
|
+
entityId: z.string().optional(),
|
|
212
|
+
campaignReferenceId: z.string().optional(),
|
|
213
|
+
callbackData: z.string().optional(),
|
|
214
|
+
geoLocation: InfobipGeoLocationSchema.optional(),
|
|
215
|
+
recipientInfo: InfobipRecipientInfoSchema.optional()
|
|
216
|
+
}).loose();
|
|
217
|
+
var InfobipTrackingWebhookSchema = z.object({
|
|
218
|
+
messageId: z.number().optional(),
|
|
219
|
+
bulkId: z.string().optional(),
|
|
220
|
+
recipient: z.string().optional(),
|
|
221
|
+
sender: z.string().optional(),
|
|
222
|
+
domain: z.string().optional(),
|
|
223
|
+
notificationType: z.string().optional(),
|
|
224
|
+
eventId: z.string().optional(),
|
|
225
|
+
sendDateTime: z.number().optional(),
|
|
226
|
+
url: z.string().optional(),
|
|
227
|
+
applicationId: z.string().optional(),
|
|
228
|
+
entityId: z.string().optional(),
|
|
229
|
+
campaignReferenceId: z.string().optional(),
|
|
230
|
+
callbackData: z.string().optional(),
|
|
231
|
+
geoLocation: InfobipGeoLocationSchema.optional(),
|
|
232
|
+
recipientInfo: InfobipRecipientInfoSchema.optional()
|
|
233
|
+
}).loose();
|
|
234
|
+
var SendGridEventSchema = z.object({
|
|
235
|
+
email: z.string().email(),
|
|
236
|
+
timestamp: z.number(),
|
|
237
|
+
event: z.enum([
|
|
238
|
+
"processed",
|
|
239
|
+
"dropped",
|
|
240
|
+
"delivered",
|
|
241
|
+
"deferred",
|
|
242
|
+
"bounce",
|
|
243
|
+
"open",
|
|
244
|
+
"click",
|
|
245
|
+
"spam_report",
|
|
246
|
+
"unsubscribe",
|
|
247
|
+
"group_unsubscribe",
|
|
248
|
+
"group_resubscribe"
|
|
249
|
+
]),
|
|
250
|
+
sg_event_id: z.string(),
|
|
251
|
+
sg_message_id: z.string(),
|
|
252
|
+
// Custom args (our notification metadata)
|
|
253
|
+
notification_id: z.string().optional(),
|
|
254
|
+
recipient_id: z.string().optional(),
|
|
255
|
+
category: z.string().optional(),
|
|
256
|
+
// Event-specific fields
|
|
257
|
+
url: z.string().optional(),
|
|
258
|
+
// For click events
|
|
259
|
+
reason: z.string().optional(),
|
|
260
|
+
// For bounce/drop events
|
|
261
|
+
status: z.string().optional(),
|
|
262
|
+
// For drop/bounce events
|
|
263
|
+
response: z.string().optional(),
|
|
264
|
+
// For bounce events
|
|
265
|
+
useragent: z.string().optional(),
|
|
266
|
+
// For open/click events
|
|
267
|
+
ip: z.string().optional(),
|
|
268
|
+
// For open/click events
|
|
269
|
+
// Unsubscribe-specific
|
|
270
|
+
asm_group_id: z.number().optional()
|
|
271
|
+
// Unsubscribe group ID
|
|
272
|
+
}).loose();
|
|
273
|
+
var SendGridWebhookSchema = z.array(SendGridEventSchema);
|
|
142
274
|
|
|
143
|
-
export { CorrelationIdSchema, DeviceTokenSchema, EmailSchema, FILE_EXTENSIONS, LocaleSchema, MIME_TYPES, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_PROVIDERS, NotificationCategorySchema, PhoneSchema, QueuePrioritySchema, SIGNATURE_METHOD, TemplateDataSchema, TemplateIdSchema, UserIdSchema, WEBHOOK_ENCRYPTION_METHOD, WEBHOOK_EVENT_TYPE };
|
|
275
|
+
export { CorrelationIdSchema, DeviceTokenSchema, EmailSchema, FILE_EXTENSIONS, InfobipDeliveryResultSchema, InfobipDeliveryWebhookSchema, InfobipEmailStatusSchema, InfobipErrorInfoSchema, InfobipGeoLocationSchema, InfobipPriceInfoSchema, InfobipRecipientInfoSchema, InfobipTrackingEventSchema, InfobipTrackingWebhookSchema, LocaleSchema, MIME_TYPES, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_PROVIDERS, NotificationCategorySchema, PhoneSchema, QueuePrioritySchema, SIGNATURE_METHOD, SendGridEventSchema, SendGridWebhookSchema, TemplateDataSchema, TemplateIdSchema, UserIdSchema, WEBHOOK_ENCRYPTION_METHOD, WEBHOOK_EVENT_TYPE };
|
|
144
276
|
//# sourceMappingURL=index.js.map
|
|
145
277
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/notifications/enums.ts","../../src/notifications/schemas.ts"],"names":["SIGNATURE_METHOD","WEBHOOK_EVENT_TYPE","WEBHOOK_ENCRYPTION_METHOD"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Notification Constants and Enums\n *\n * Type-level constants and enum values for the notifications system.\n *\n * @module notifications/enums\n */\n\n/**\n * Notification Providers\n * Standard provider names to ensure consistency across the package\n */\nexport const NOTIFICATION_PROVIDERS = {\n /** Infobip omnichannel provider (Email, SMS, WhatsApp) - PRIMARY */\n INFOBIP: 'Infobip',\n\n /** SendGrid email provider - FALLBACK */\n SENDGRID: 'SendGrid',\n\n /** Mock email provider for testing */\n MOCK_EMAIL: 'MockEmail',\n\n /** Mock SMS provider for testing */\n MOCK_SMS: 'MockSMS',\n\n /** Mock push provider for testing */\n MOCK_PUSH: 'MockPush',\n} as const;\n\n/**\n * Notification Channels\n * Available notification delivery channels\n */\nexport const NOTIFICATION_CHANNELS = {\n EMAIL: 'email',\n SMS: 'sms',\n PUSH: 'push',\n} as const;\n\n/**\n * Notification Categories (FR-4.3)\n * Determines opt-out behavior for compliance\n */\nexport const NOTIFICATION_CATEGORIES = {\n /** Cannot be opted out - compliance requirement (password resets, order confirmations) */\n TRANSACTIONAL: 'transactional',\n\n /** User can opt-out (newsletters, promotions) */\n MARKETING: 'marketing',\n\n /** User can opt-out (likes, comments, follows) */\n SOCIAL: 'social',\n\n /** System alerts and notifications (security alerts, system status) */\n SYSTEM: 'system',\n\n /** Promotional offers and campaigns */\n PROMOTIONAL: 'promotional',\n} as const;\n\n/**\n * Signature verification method for webhooks\n */\nexport enum SIGNATURE_METHOD {\n HmacSha256 = 'hmac-sha256',\n HmacSha1 = 'hmac-sha1',\n HmacSha512 = 'hmac-sha512',\n Custom = 'custom',\n}\n\n/**\n * Webhook event types mapped to internal notification events\n */\nexport enum WEBHOOK_EVENT_TYPE {\n // Delivery events\n Delivered = 'delivered',\n Bounced = 'bounced',\n Deferred = 'deferred',\n Dropped = 'dropped',\n\n // Engagement events\n Opened = 'opened',\n Clicked = 'clicked',\n\n // Spam/unsubscribe events\n SpamReport = 'spam_report',\n Unsubscribed = 'unsubscribed',\n\n // SMS-specific\n SmsDelivered = 'sms_delivered',\n SmsFailed = 'sms_failed',\n\n // Push-specific\n PushDelivered = 'push_delivered',\n PushFailed = 'push_failed',\n\n // Generic\n Unknown = 'unknown',\n}\n\n/**\n * Webhook encryption method for PII-safe IDs\n */\nexport enum WEBHOOK_ENCRYPTION_METHOD {\n /** HMAC-SHA256 hashing (recommended for IDs) */\n HmacSha256 = 'hmac-sha256',\n /** HMAC-SHA512 hashing (stronger) */\n HmacSha512 = 'hmac-sha512',\n /** No encryption (not recommended) */\n None = 'none',\n}\n\n/**\n * Common MIME types for attachments\n */\nexport const MIME_TYPES = {\n // Documents\n PDF: 'application/pdf',\n DOC: 'application/msword',\n DOCX: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n XLS: 'application/vnd.ms-excel',\n XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n PPT: 'application/vnd.ms-powerpoint',\n PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n TXT: 'text/plain',\n CSV: 'text/csv',\n\n // Images\n PNG: 'image/png',\n JPG: 'image/jpeg',\n JPEG: 'image/jpeg',\n GIF: 'image/gif',\n SVG: 'image/svg+xml',\n WEBP: 'image/webp',\n\n // Archives\n ZIP: 'application/zip',\n RAR: 'application/x-rar-compressed',\n TAR: 'application/x-tar',\n GZIP: 'application/gzip',\n\n // Other\n JSON: 'application/json',\n XML: 'application/xml',\n} as const;\n\n/**\n * Common file extensions for attachments\n */\nexport const FILE_EXTENSIONS = {\n // Documents\n PDF: '.pdf',\n DOC: '.doc',\n DOCX: '.docx',\n XLS: '.xls',\n XLSX: '.xlsx',\n PPT: '.ppt',\n PPTX: '.pptx',\n TXT: '.txt',\n CSV: '.csv',\n\n // Images\n PNG: '.png',\n JPG: '.jpg',\n JPEG: '.jpeg',\n GIF: '.gif',\n SVG: '.svg',\n WEBP: '.webp',\n\n // Archives\n ZIP: '.zip',\n RAR: '.rar',\n TAR: '.tar',\n GZ: '.gz',\n GZIP: '.gzip',\n\n // Other\n JSON: '.json',\n XML: '.xml',\n} as const;\n","/**\n * Notification Validation Schemas\n *\n * Zod schemas for validating notification inputs\n * Ensures type safety and prevents invalid data from entering the system\n *\n * @module notifications/schemas\n */\n\nimport { z } from 'zod';\nimport { NOTIFICATION_CATEGORIES } from './enums';\n\n// Validation length constants\nconst MAX_EMAIL_LENGTH = 255;\nconst MAX_USER_ID_LENGTH = 255;\nconst MAX_TEMPLATE_ID_LENGTH = 255;\nconst MAX_DEVICE_TOKEN_LENGTH = 512;\n\n/**\n * Email address validation\n * - Must be valid email format\n * - Max 255 characters\n * - Automatically lowercased and trimmed\n */\nexport const EmailSchema = z\n .string()\n .email('Invalid email address format')\n .max(MAX_EMAIL_LENGTH, 'Email address must be 255 characters or less')\n .transform(val => val.trim().toLowerCase());\n\n/**\n * Phone number validation (E.164 format)\n * - Must start with optional + followed by country code\n * - 1-15 digits total (E.164 standard)\n * - Examples: +14155552671, +442071838750, +8613800000000\n */\nexport const PhoneSchema = z\n .string()\n .regex(/^\\+?[1-9]\\d{1,14}$/, 'Invalid phone number format (E.164 expected)')\n .describe('Phone number in E.164 format');\n\n/**\n * User ID validation\n * - Required, non-empty string\n * - Max 255 characters\n */\nexport const UserIdSchema = z\n .string()\n .min(1, 'User ID is required')\n .max(MAX_USER_ID_LENGTH, 'User ID must be 255 characters or less');\n\n/**\n * Template ID validation\n * - Only lowercase letters, numbers, hyphens, and slashes\n * - Used for file path construction, must be safe\n * - Examples: welcome, password-reset, order/confirmation\n */\nexport const TemplateIdSchema = z\n .string()\n .min(1, 'Template ID is required')\n .regex(\n /^[a-z0-9-/]+$/,\n 'Template ID must contain only lowercase letters, numbers, hyphens, and slashes'\n )\n .max(MAX_TEMPLATE_ID_LENGTH, 'Template ID must be 255 characters or less');\n\n/**\n * Locale validation\n * - ISO 639-1 language code (2 lowercase letters)\n * - Optional ISO 3166-1 country code (2 uppercase letters)\n * - Examples: en, en-US, es, es-MX, fr-FR\n */\nexport const LocaleSchema = z\n .string()\n .regex(/^[a-z]{2}(-[A-Z]{2})?$/, 'Locale must be in format: en, en-US, es, es-MX')\n .describe('Locale in ISO 639-1 format');\n\n/**\n * Notification category validation (FR-4.3)\n * - transactional: Cannot be opted out (compliance requirement)\n * - marketing: User can opt-out\n * - social: User can opt-out\n */\nexport const NotificationCategorySchema = z\n .enum([\n NOTIFICATION_CATEGORIES.TRANSACTIONAL,\n NOTIFICATION_CATEGORIES.MARKETING,\n NOTIFICATION_CATEGORIES.SOCIAL,\n NOTIFICATION_CATEGORIES.SYSTEM,\n NOTIFICATION_CATEGORIES.PROMOTIONAL,\n ] as const)\n .default(NOTIFICATION_CATEGORIES.TRANSACTIONAL)\n .describe('Notification category for compliance and user preferences');\n\n/**\n * Queue priority validation\n */\nexport const QueuePrioritySchema = z.enum(['high', 'normal', 'low']);\n\n/**\n * Correlation ID validation\n * - UUID v4 format\n * - Used for tracing across systems\n */\nexport const CorrelationIdSchema = z\n .string()\n .uuid('Correlation ID must be a valid UUID v4')\n .describe('UUID v4 correlation ID');\n\n/**\n * Template data validation\n * - Must be a valid object\n * - Can contain strings, numbers, booleans, or nested objects\n * - Arrays are allowed\n */\nexport const TemplateDataSchema = z.record(z.string(), z.unknown()).optional();\n\n/**\n * Device token validation (for push notifications)\n * - Non-empty string\n * - Max 512 characters (FCM tokens can be quite long)\n */\nexport const DeviceTokenSchema = z\n .string()\n .min(1, 'Device token is required')\n .max(MAX_DEVICE_TOKEN_LENGTH, 'Device token must be 512 characters or less');\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/notifications/enums.ts","../../src/notifications/schemas.ts","../../src/notifications/webhooks.schemas.ts"],"names":["SIGNATURE_METHOD","WEBHOOK_EVENT_TYPE","WEBHOOK_ENCRYPTION_METHOD","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Notification Constants and Enums\n *\n * Type-level constants and enum values for the notifications system.\n *\n * @module notifications/enums\n */\n\n/**\n * Notification Providers\n * Standard provider names to ensure consistency across the package\n */\nexport const NOTIFICATION_PROVIDERS = {\n /** Infobip omnichannel provider (Email, SMS, WhatsApp) - PRIMARY */\n INFOBIP: 'Infobip',\n\n /** SendGrid email provider - FALLBACK */\n SENDGRID: 'SendGrid',\n\n /** Mock email provider for testing */\n MOCK_EMAIL: 'MockEmail',\n\n /** Mock SMS provider for testing */\n MOCK_SMS: 'MockSMS',\n\n /** Mock push provider for testing */\n MOCK_PUSH: 'MockPush',\n} as const;\n\n/**\n * Notification Channels\n * Available notification delivery channels\n */\nexport const NOTIFICATION_CHANNELS = {\n EMAIL: 'email',\n SMS: 'sms',\n PUSH: 'push',\n} as const;\n\n/**\n * Notification Categories (FR-4.3)\n * Determines opt-out behavior for compliance\n */\nexport const NOTIFICATION_CATEGORIES = {\n /** Cannot be opted out - compliance requirement (password resets, order confirmations) */\n TRANSACTIONAL: 'transactional',\n\n /** User can opt-out (newsletters, promotions) */\n MARKETING: 'marketing',\n\n /** User can opt-out (likes, comments, follows) */\n SOCIAL: 'social',\n\n /** System alerts and notifications (security alerts, system status) */\n SYSTEM: 'system',\n\n /** Promotional offers and campaigns */\n PROMOTIONAL: 'promotional',\n} as const;\n\n/**\n * Signature verification method for webhooks\n */\nexport enum SIGNATURE_METHOD {\n HmacSha256 = 'hmac-sha256',\n HmacSha1 = 'hmac-sha1',\n HmacSha512 = 'hmac-sha512',\n Custom = 'custom',\n}\n\n/**\n * Webhook event types mapped to internal notification events\n */\nexport enum WEBHOOK_EVENT_TYPE {\n // Delivery events\n Delivered = 'delivered',\n Bounced = 'bounced',\n Deferred = 'deferred',\n Dropped = 'dropped',\n\n // Engagement events\n Opened = 'opened',\n Clicked = 'clicked',\n\n // Spam/unsubscribe events\n SpamReport = 'spam_report',\n Unsubscribed = 'unsubscribed',\n\n // SMS-specific\n SmsDelivered = 'sms_delivered',\n SmsFailed = 'sms_failed',\n\n // Push-specific\n PushDelivered = 'push_delivered',\n PushFailed = 'push_failed',\n\n // Generic\n Unknown = 'unknown',\n}\n\n/**\n * Webhook encryption method for PII-safe IDs\n */\nexport enum WEBHOOK_ENCRYPTION_METHOD {\n /** HMAC-SHA256 hashing (recommended for IDs) */\n HmacSha256 = 'hmac-sha256',\n /** HMAC-SHA512 hashing (stronger) */\n HmacSha512 = 'hmac-sha512',\n /** No encryption (not recommended) */\n None = 'none',\n}\n\n/**\n * Common MIME types for attachments\n */\nexport const MIME_TYPES = {\n // Documents\n PDF: 'application/pdf',\n DOC: 'application/msword',\n DOCX: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n XLS: 'application/vnd.ms-excel',\n XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n PPT: 'application/vnd.ms-powerpoint',\n PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n TXT: 'text/plain',\n CSV: 'text/csv',\n\n // Images\n PNG: 'image/png',\n JPG: 'image/jpeg',\n JPEG: 'image/jpeg',\n GIF: 'image/gif',\n SVG: 'image/svg+xml',\n WEBP: 'image/webp',\n\n // Archives\n ZIP: 'application/zip',\n RAR: 'application/x-rar-compressed',\n TAR: 'application/x-tar',\n GZIP: 'application/gzip',\n\n // Other\n JSON: 'application/json',\n XML: 'application/xml',\n} as const;\n\n/**\n * Common file extensions for attachments\n */\nexport const FILE_EXTENSIONS = {\n // Documents\n PDF: '.pdf',\n DOC: '.doc',\n DOCX: '.docx',\n XLS: '.xls',\n XLSX: '.xlsx',\n PPT: '.ppt',\n PPTX: '.pptx',\n TXT: '.txt',\n CSV: '.csv',\n\n // Images\n PNG: '.png',\n JPG: '.jpg',\n JPEG: '.jpeg',\n GIF: '.gif',\n SVG: '.svg',\n WEBP: '.webp',\n\n // Archives\n ZIP: '.zip',\n RAR: '.rar',\n TAR: '.tar',\n GZ: '.gz',\n GZIP: '.gzip',\n\n // Other\n JSON: '.json',\n XML: '.xml',\n} as const;\n","/**\n * Notification Validation Schemas\n *\n * Zod schemas for validating notification inputs\n * Ensures type safety and prevents invalid data from entering the system\n *\n * @module notifications/schemas\n */\n\nimport { z } from 'zod';\nimport { NOTIFICATION_CATEGORIES } from './enums';\n\n// Validation length constants\nconst MAX_EMAIL_LENGTH = 255;\nconst MAX_USER_ID_LENGTH = 255;\nconst MAX_TEMPLATE_ID_LENGTH = 255;\nconst MAX_DEVICE_TOKEN_LENGTH = 512;\n\n/**\n * Email address validation\n * - Must be valid email format\n * - Max 255 characters\n * - Automatically lowercased and trimmed\n */\nexport const EmailSchema = z\n .string()\n .email('Invalid email address format')\n .max(MAX_EMAIL_LENGTH, 'Email address must be 255 characters or less')\n .transform(val => val.trim().toLowerCase());\n\n/**\n * Phone number validation (E.164 format)\n * - Must start with optional + followed by country code\n * - 1-15 digits total (E.164 standard)\n * - Examples: +14155552671, +442071838750, +8613800000000\n */\nexport const PhoneSchema = z\n .string()\n .regex(/^\\+?[1-9]\\d{1,14}$/, 'Invalid phone number format (E.164 expected)')\n .describe('Phone number in E.164 format');\n\n/**\n * User ID validation\n * - Required, non-empty string\n * - Max 255 characters\n */\nexport const UserIdSchema = z\n .string()\n .min(1, 'User ID is required')\n .max(MAX_USER_ID_LENGTH, 'User ID must be 255 characters or less');\n\n/**\n * Template ID validation\n * - Only lowercase letters, numbers, hyphens, and slashes\n * - Used for file path construction, must be safe\n * - Examples: welcome, password-reset, order/confirmation\n */\nexport const TemplateIdSchema = z\n .string()\n .min(1, 'Template ID is required')\n .regex(\n /^[a-z0-9-/]+$/,\n 'Template ID must contain only lowercase letters, numbers, hyphens, and slashes'\n )\n .max(MAX_TEMPLATE_ID_LENGTH, 'Template ID must be 255 characters or less');\n\n/**\n * Locale validation\n * - ISO 639-1 language code (2 lowercase letters)\n * - Optional ISO 3166-1 country code (2 uppercase letters)\n * - Examples: en, en-US, es, es-MX, fr-FR\n */\nexport const LocaleSchema = z\n .string()\n .regex(/^[a-z]{2}(-[A-Z]{2})?$/, 'Locale must be in format: en, en-US, es, es-MX')\n .describe('Locale in ISO 639-1 format');\n\n/**\n * Notification category validation (FR-4.3)\n * - transactional: Cannot be opted out (compliance requirement)\n * - marketing: User can opt-out\n * - social: User can opt-out\n */\nexport const NotificationCategorySchema = z\n .enum([\n NOTIFICATION_CATEGORIES.TRANSACTIONAL,\n NOTIFICATION_CATEGORIES.MARKETING,\n NOTIFICATION_CATEGORIES.SOCIAL,\n NOTIFICATION_CATEGORIES.SYSTEM,\n NOTIFICATION_CATEGORIES.PROMOTIONAL,\n ] as const)\n .default(NOTIFICATION_CATEGORIES.TRANSACTIONAL)\n .describe('Notification category for compliance and user preferences');\n\n/**\n * Queue priority validation\n */\nexport const QueuePrioritySchema = z.enum(['high', 'normal', 'low']);\n\n/**\n * Correlation ID validation\n * - UUID v4 format\n * - Used for tracing across systems\n */\nexport const CorrelationIdSchema = z\n .string()\n .uuid('Correlation ID must be a valid UUID v4')\n .describe('UUID v4 correlation ID');\n\n/**\n * Template data validation\n * - Must be a valid object\n * - Can contain strings, numbers, booleans, or nested objects\n * - Arrays are allowed\n */\nexport const TemplateDataSchema = z.record(z.string(), z.unknown()).optional();\n\n/**\n * Device token validation (for push notifications)\n * - Non-empty string\n * - Max 512 characters (FCM tokens can be quite long)\n */\nexport const DeviceTokenSchema = z\n .string()\n .min(1, 'Device token is required')\n .max(MAX_DEVICE_TOKEN_LENGTH, 'Device token must be 512 characters or less');\n","/**\n * Webhook Validation Schemas\n *\n * Zod schemas for validating webhook payloads from notification providers\n * Provider-specific webhook event structures\n *\n * @module notifications/webhooks.schemas\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// INFOBIP EMAIL DELIVERY WEBHOOK SCHEMAS\n// ============================================================================\n\n/**\n * Infobip Email Status schema\n */\nexport const InfobipEmailStatusSchema = z.object({\n groupId: z.number().optional(),\n groupName: z.string().optional(),\n id: z.number().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n action: z.string().optional(),\n});\n\n/**\n * Infobip Error Info schema\n */\nexport const InfobipErrorInfoSchema = z.object({\n groupId: z.number().optional(),\n groupName: z.string().optional(),\n id: z.number().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n permanent: z.boolean().optional(),\n});\n\n/**\n * Infobip Price Info schema\n */\nexport const InfobipPriceInfoSchema = z.object({\n pricePerMessage: z.number().optional(),\n currency: z.string().optional(),\n});\n\n/**\n * Infobip Delivery Result schema\n */\nexport const InfobipDeliveryResultSchema = z\n .object({\n messageId: z.string().optional(),\n to: z.string().optional(),\n bulkId: z.string().optional(),\n sentAt: z.string().optional(),\n doneAt: z.string().optional(),\n status: InfobipEmailStatusSchema.optional(),\n error: InfobipErrorInfoSchema.optional(),\n attemptCount: z.number().optional(),\n timeToFirstAttempt: z.number().optional(),\n sendingIp: z.string().optional(),\n price: InfobipPriceInfoSchema.optional(),\n smsCount: z.number().optional(),\n browserLink: z.string().optional(),\n applicationId: z.string().optional(),\n entityId: z.string().optional(),\n campaignReferenceId: z.string().optional(),\n callbackData: z.string().optional(),\n })\n .loose();\n\n/**\n * Infobip Delivery Webhook Payload schema\n */\nexport const InfobipDeliveryWebhookSchema = z.object({\n results: z.array(InfobipDeliveryResultSchema),\n});\n\n// ============================================================================\n// INFOBIP EMAIL TRACKING WEBHOOK SCHEMAS\n// ============================================================================\n\n/**\n * Infobip Geo Location schema\n */\nexport const InfobipGeoLocationSchema = z\n .object({\n countryName: z.string().optional(),\n countryCode: z.string().optional(),\n regionName: z.string().optional(),\n city: z.string().optional(),\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n })\n .loose();\n\n/**\n * Infobip Recipient Info schema\n */\nexport const InfobipRecipientInfoSchema = z\n .object({\n messageId: z.number().optional(),\n to: z.string().optional(),\n requestId: z.string().optional(),\n sentDateTime: z.number().optional(),\n })\n .loose();\n\n/**\n * Infobip Tracking Event schema\n */\nexport const InfobipTrackingEventSchema = z\n .object({\n messageId: z.number().optional(),\n bulkId: z.string().optional(),\n recipient: z.string().optional(),\n sender: z.string().optional(),\n domain: z.string().optional(),\n notificationType: z.string().optional(), // OPENED, CLICKED, COMPLAINED, LATE_BOUNCE, UNSUBSCRIBED\n eventId: z.string().optional(),\n sendDateTime: z.number().optional(),\n url: z.string().optional(), // For CLICKED events\n applicationId: z.string().optional(),\n entityId: z.string().optional(),\n campaignReferenceId: z.string().optional(),\n callbackData: z.string().optional(),\n geoLocation: InfobipGeoLocationSchema.optional(),\n recipientInfo: InfobipRecipientInfoSchema.optional(),\n })\n .loose();\n\n/**\n * Infobip Tracking Webhook Payload schema\n * Note: Tracking webhooks send a single event object, not an array\n */\nexport const InfobipTrackingWebhookSchema = z\n .object({\n messageId: z.number().optional(),\n bulkId: z.string().optional(),\n recipient: z.string().optional(),\n sender: z.string().optional(),\n domain: z.string().optional(),\n notificationType: z.string().optional(),\n eventId: z.string().optional(),\n sendDateTime: z.number().optional(),\n url: z.string().optional(),\n applicationId: z.string().optional(),\n entityId: z.string().optional(),\n campaignReferenceId: z.string().optional(),\n callbackData: z.string().optional(),\n geoLocation: InfobipGeoLocationSchema.optional(),\n recipientInfo: InfobipRecipientInfoSchema.optional(),\n })\n .loose();\n\n// ============================================================================\n// SENDGRID WEBHOOK SCHEMAS\n// ============================================================================\n\n/**\n * SendGrid Event schema\n */\nexport const SendGridEventSchema = z\n .object({\n email: z.string().email(),\n timestamp: z.number(),\n event: z.enum([\n 'processed',\n 'dropped',\n 'delivered',\n 'deferred',\n 'bounce',\n 'open',\n 'click',\n 'spam_report',\n 'unsubscribe',\n 'group_unsubscribe',\n 'group_resubscribe',\n ]),\n sg_event_id: z.string(),\n sg_message_id: z.string(),\n\n // Custom args (our notification metadata)\n notification_id: z.string().optional(),\n recipient_id: z.string().optional(),\n category: z.string().optional(),\n\n // Event-specific fields\n url: z.string().optional(), // For click events\n reason: z.string().optional(), // For bounce/drop events\n status: z.string().optional(), // For drop/bounce events\n response: z.string().optional(), // For bounce events\n useragent: z.string().optional(), // For open/click events\n ip: z.string().optional(), // For open/click events\n\n // Unsubscribe-specific\n asm_group_id: z.number().optional(), // Unsubscribe group ID\n })\n .loose(); // Allow additional fields\n\n/**\n * SendGrid Webhook Payload schema (array of events)\n */\nexport const SendGridWebhookSchema = z.array(SendGridEventSchema);\n\n// ============================================================================\n// TYPE EXPORTS\n// ============================================================================\n\n// Infobip webhook-specific types (prefixed to avoid collision with API types)\nexport type InfobipWebhookEmailStatus = z.infer<typeof InfobipEmailStatusSchema>;\nexport type InfobipWebhookErrorInfo = z.infer<typeof InfobipErrorInfoSchema>;\nexport type InfobipWebhookPriceInfo = z.infer<typeof InfobipPriceInfoSchema>;\nexport type InfobipWebhookDeliveryResult = z.infer<typeof InfobipDeliveryResultSchema>;\nexport type InfobipWebhookDeliveryPayload = z.infer<typeof InfobipDeliveryWebhookSchema>;\n\nexport type InfobipWebhookGeoLocation = z.infer<typeof InfobipGeoLocationSchema>;\nexport type InfobipWebhookRecipientInfo = z.infer<typeof InfobipRecipientInfoSchema>;\nexport type InfobipWebhookTrackingEvent = z.infer<typeof InfobipTrackingEventSchema>;\nexport type InfobipWebhookTrackingPayload = z.infer<typeof InfobipTrackingWebhookSchema>;\n\n// SendGrid webhook types\nexport type SendGridWebhookEvent = z.infer<typeof SendGridEventSchema>;\nexport type SendGridWebhookPayload = z.infer<typeof SendGridWebhookSchema>;\n"]}
|
|
@@ -13,7 +13,7 @@ import { z } from 'zod';
|
|
|
13
13
|
* - Max 255 characters
|
|
14
14
|
* - Automatically lowercased and trimmed
|
|
15
15
|
*/
|
|
16
|
-
export declare const EmailSchema: z.
|
|
16
|
+
export declare const EmailSchema: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
17
17
|
/**
|
|
18
18
|
* Phone number validation (E.164 format)
|
|
19
19
|
* - Must start with optional + followed by country code
|
|
@@ -47,11 +47,21 @@ export declare const LocaleSchema: z.ZodString;
|
|
|
47
47
|
* - marketing: User can opt-out
|
|
48
48
|
* - social: User can opt-out
|
|
49
49
|
*/
|
|
50
|
-
export declare const NotificationCategorySchema: z.ZodDefault<z.ZodEnum<
|
|
50
|
+
export declare const NotificationCategorySchema: z.ZodDefault<z.ZodEnum<{
|
|
51
|
+
system: "system";
|
|
52
|
+
transactional: "transactional";
|
|
53
|
+
marketing: "marketing";
|
|
54
|
+
social: "social";
|
|
55
|
+
promotional: "promotional";
|
|
56
|
+
}>>;
|
|
51
57
|
/**
|
|
52
58
|
* Queue priority validation
|
|
53
59
|
*/
|
|
54
|
-
export declare const QueuePrioritySchema: z.ZodEnum<
|
|
60
|
+
export declare const QueuePrioritySchema: z.ZodEnum<{
|
|
61
|
+
high: "high";
|
|
62
|
+
normal: "normal";
|
|
63
|
+
low: "low";
|
|
64
|
+
}>;
|
|
55
65
|
/**
|
|
56
66
|
* Correlation ID validation
|
|
57
67
|
* - UUID v4 format
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module notifications/types
|
|
8
8
|
*/
|
|
9
9
|
import type { UnknownRecord, Promisable } from 'type-fest';
|
|
10
|
-
import type { MessageCatalog } from '../errors';
|
|
10
|
+
import type { MessageCatalog, PackageErrorLike } from '../errors';
|
|
11
11
|
import type { WEBHOOK_ENCRYPTION_METHOD, WEBHOOK_EVENT_TYPE, SIGNATURE_METHOD } from './enums';
|
|
12
12
|
import type z from 'zod';
|
|
13
13
|
/**
|
|
@@ -271,23 +271,6 @@ export interface MockProviderConfig extends UnknownRecord {
|
|
|
271
271
|
delayMs?: number;
|
|
272
272
|
fallbackAdapter?: unknown;
|
|
273
273
|
}
|
|
274
|
-
/**
|
|
275
|
-
* Attachment definition
|
|
276
|
-
*/
|
|
277
|
-
export interface Attachment {
|
|
278
|
-
/** File name */
|
|
279
|
-
filename: string;
|
|
280
|
-
/** File content (base64 encoded or Buffer) */
|
|
281
|
-
content?: string | globalThis.Buffer;
|
|
282
|
-
/** URL to fetch the file from */
|
|
283
|
-
url?: string;
|
|
284
|
-
/** MIME type */
|
|
285
|
-
type?: string;
|
|
286
|
-
/** Content disposition (attachment or inline) */
|
|
287
|
-
disposition?: 'attachment' | 'inline';
|
|
288
|
-
/** Content ID for inline attachments */
|
|
289
|
-
contentId?: string;
|
|
290
|
-
}
|
|
291
274
|
/**
|
|
292
275
|
* Notification input sent to adapters
|
|
293
276
|
*/
|
|
@@ -358,7 +341,7 @@ export interface SendEmailParams {
|
|
|
358
341
|
/** Correlation ID for tracking (auto-generated if not provided) */
|
|
359
342
|
correlationId?: string;
|
|
360
343
|
/** File attachments for the email */
|
|
361
|
-
attachments?:
|
|
344
|
+
attachments?: NotificationAttachment[];
|
|
362
345
|
/**
|
|
363
346
|
* Notification category (default: 'transactional')
|
|
364
347
|
* Determines opt-out behavior
|
|
@@ -1175,7 +1158,7 @@ export interface AttachmentValidationResult {
|
|
|
1175
1158
|
export interface AttachmentValidationError {
|
|
1176
1159
|
type: AttachmentErrorType;
|
|
1177
1160
|
message: string;
|
|
1178
|
-
attachment?:
|
|
1161
|
+
attachment?: NotificationAttachment;
|
|
1179
1162
|
metadata?: Record<string, unknown>;
|
|
1180
1163
|
}
|
|
1181
1164
|
/**
|
|
@@ -1414,6 +1397,65 @@ export interface NotificationAdapter {
|
|
|
1414
1397
|
getUrlShortenerConfig?(): UrlShortenerConfig | undefined;
|
|
1415
1398
|
/** Validate email addresses (Email adapters only) */
|
|
1416
1399
|
validateEmails?(emails: string[]): Promise<NotificationResult<EmailValidationResult[]>>;
|
|
1400
|
+
/**
|
|
1401
|
+
* Generate a secure token URL for actions like unsubscribe, preference updates, etc.
|
|
1402
|
+
* @param type - Type of token (unsubscribe_url, preferences_url, etc.)
|
|
1403
|
+
* @param category - Notification category
|
|
1404
|
+
* @param recipientId - Recipient identifier
|
|
1405
|
+
* @param metadata - Additional metadata to include in token
|
|
1406
|
+
* @returns Generated URL or undefined if token generation not configured
|
|
1407
|
+
*/
|
|
1408
|
+
generateSecureTokenUrl?(type: TokenType, category: string, recipientId: string, metadata?: {
|
|
1409
|
+
templateName?: string;
|
|
1410
|
+
emailHash?: string;
|
|
1411
|
+
correlationId?: string;
|
|
1412
|
+
[key: string]: unknown;
|
|
1413
|
+
}): string | undefined;
|
|
1414
|
+
}
|
|
1415
|
+
/**
|
|
1416
|
+
* NotificationAdapter extended with token generation capabilities
|
|
1417
|
+
* Used when an adapter supports secure token URL generation
|
|
1418
|
+
*/
|
|
1419
|
+
export type NotificationAdapterWithTokens = NotificationAdapter & {
|
|
1420
|
+
/** Token generation method */
|
|
1421
|
+
generateSecureTokenUrl?: (type: TokenType, category: string, recipientId: string, metadata?: {
|
|
1422
|
+
templateName?: string;
|
|
1423
|
+
emailHash?: string;
|
|
1424
|
+
correlationId?: string;
|
|
1425
|
+
[key: string]: unknown;
|
|
1426
|
+
}) => string | undefined;
|
|
1427
|
+
/** Token configuration */
|
|
1428
|
+
tokenConfig?: TokenConfig;
|
|
1429
|
+
/** Token URL configuration */
|
|
1430
|
+
tokenUrls?: TokenUrlConfig;
|
|
1431
|
+
};
|
|
1432
|
+
/**
|
|
1433
|
+
* Parameters for token URL generation
|
|
1434
|
+
* Used internally by NotificationService when generating secure URLs
|
|
1435
|
+
*/
|
|
1436
|
+
export interface TokenUrlGenerationParams {
|
|
1437
|
+
/** Notification category (optional for filtering) */
|
|
1438
|
+
category: string | undefined;
|
|
1439
|
+
/** Recipient identifier */
|
|
1440
|
+
recipientId: string;
|
|
1441
|
+
/** Recipient contact info (email, phone) for hashing */
|
|
1442
|
+
recipientContact: string;
|
|
1443
|
+
/** Template identifier */
|
|
1444
|
+
templateId: string;
|
|
1445
|
+
/** Optional correlation ID */
|
|
1446
|
+
correlationId?: string;
|
|
1447
|
+
}
|
|
1448
|
+
/**
|
|
1449
|
+
* Prepared data for bulk notification operations
|
|
1450
|
+
* Used internally by NotificationService when processing bulk requests
|
|
1451
|
+
*/
|
|
1452
|
+
export interface BulkNotificationPreparedData<TParams = SendEmailParams | SendSMSParams | SendPushParams> {
|
|
1453
|
+
/** Index in the original request array */
|
|
1454
|
+
index: number;
|
|
1455
|
+
/** Original request parameters */
|
|
1456
|
+
params: TParams;
|
|
1457
|
+
/** Prepared notification input ready for sending */
|
|
1458
|
+
input: NotificationInput;
|
|
1417
1459
|
}
|
|
1418
1460
|
/**
|
|
1419
1461
|
* ProviderPlugin - Factory pattern for creating provider adapters
|
|
@@ -1460,10 +1502,10 @@ export interface PreferenceChecker {
|
|
|
1460
1502
|
* Error handler callbacks
|
|
1461
1503
|
*/
|
|
1462
1504
|
export interface NotificationErrorHandlers {
|
|
1463
|
-
onProviderError?: (error:
|
|
1464
|
-
onQueueError?: (error:
|
|
1465
|
-
onWebhookError?: (error:
|
|
1466
|
-
onAnyError?: (error:
|
|
1505
|
+
onProviderError?: (error: PackageErrorLike) => Promisable<void>;
|
|
1506
|
+
onQueueError?: (error: PackageErrorLike) => Promisable<void>;
|
|
1507
|
+
onWebhookError?: (error: PackageErrorLike) => Promisable<void>;
|
|
1508
|
+
onAnyError?: (error: PackageErrorLike) => Promisable<void>;
|
|
1467
1509
|
}
|
|
1468
1510
|
/**
|
|
1469
1511
|
* NotificationServiceConfig - Main service configuration
|