@plyaz/types 1.13.2 → 1.13.4
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/client/types.d.ts +3 -3
- package/dist/api/config/types.d.ts +62 -5
- package/dist/api/debugger/enums.d.ts +12 -0
- package/dist/api/debugger/types.d.ts +1 -1
- package/dist/api/errors/types.d.ts +46 -238
- package/dist/api/events/factories/errors/types.d.ts +26 -27
- package/dist/api/index.cjs +1437 -669
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.d.ts +5 -2
- package/dist/api/index.js +1365 -603
- package/dist/api/index.js.map +1 -1
- package/dist/db/DatabaseAdapter.d.ts +2 -2
- package/dist/db/DatabaseService.d.ts +5 -5
- package/dist/db/config.types.d.ts +1 -1
- package/dist/db/database.types.d.ts +2 -2
- package/dist/db/index.cjs.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/errors/codes.d.ts +251 -0
- package/dist/errors/enums.d.ts +199 -0
- package/dist/errors/index.cjs +1287 -0
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +1264 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/types.d.ts +630 -14
- package/dist/index.cjs +2161 -1217
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +43 -1
- package/dist/index.js +1829 -911
- package/dist/index.js.map +1 -1
- package/dist/notifications/enums.d.ts +140 -0
- package/dist/notifications/index.cjs +4353 -0
- package/dist/notifications/index.cjs.map +1 -0
- package/dist/notifications/index.js +145 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/schemas.d.ts +73 -0
- package/dist/notifications/types.d.ts +1937 -0
- package/dist/payments/base-error/enum.d.ts +79 -0
- package/dist/payments/base-error/index.d.ts +2 -0
- package/dist/payments/base-error/types.d.ts +180 -0
- package/dist/payments/currency/enums.d.ts +37 -0
- package/dist/payments/currency/index.d.ts +1 -37
- package/dist/payments/index.cjs +40 -40
- package/dist/payments/index.cjs.map +1 -1
- package/dist/payments/index.d.ts +2 -1
- package/dist/payments/index.js +40 -40
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/transaction/types.d.ts +3 -3
- package/dist/store/index.d.ts +1 -1
- package/dist/store/types.d.ts +2 -3
- package/package.json +6 -1
- package/dist/api/errors/enum.d.ts +0 -214
- package/dist/api/errors/index.d.ts +0 -6
- /package/dist/db/{enhanced-config.types.d.ts → features-config.types.d.ts} +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// @plyaz package - Built with tsup
|
|
4
|
+
|
|
5
|
+
// src/notifications/enums.ts
|
|
6
|
+
var NOTIFICATION_PROVIDERS = {
|
|
7
|
+
/** Infobip omnichannel provider (Email, SMS, WhatsApp) - PRIMARY */
|
|
8
|
+
INFOBIP: "Infobip",
|
|
9
|
+
/** SendGrid email provider - FALLBACK */
|
|
10
|
+
SENDGRID: "SendGrid",
|
|
11
|
+
/** Mock email provider for testing */
|
|
12
|
+
MOCK_EMAIL: "MockEmail",
|
|
13
|
+
/** Mock SMS provider for testing */
|
|
14
|
+
MOCK_SMS: "MockSMS",
|
|
15
|
+
/** Mock push provider for testing */
|
|
16
|
+
MOCK_PUSH: "MockPush"
|
|
17
|
+
};
|
|
18
|
+
var NOTIFICATION_CHANNELS = {
|
|
19
|
+
EMAIL: "email",
|
|
20
|
+
SMS: "sms",
|
|
21
|
+
PUSH: "push"
|
|
22
|
+
};
|
|
23
|
+
var NOTIFICATION_CATEGORIES = {
|
|
24
|
+
/** Cannot be opted out - compliance requirement (password resets, order confirmations) */
|
|
25
|
+
TRANSACTIONAL: "transactional",
|
|
26
|
+
/** User can opt-out (newsletters, promotions) */
|
|
27
|
+
MARKETING: "marketing",
|
|
28
|
+
/** User can opt-out (likes, comments, follows) */
|
|
29
|
+
SOCIAL: "social",
|
|
30
|
+
/** System alerts and notifications (security alerts, system status) */
|
|
31
|
+
SYSTEM: "system",
|
|
32
|
+
/** Promotional offers and campaigns */
|
|
33
|
+
PROMOTIONAL: "promotional"
|
|
34
|
+
};
|
|
35
|
+
var SIGNATURE_METHOD = /* @__PURE__ */ ((SIGNATURE_METHOD2) => {
|
|
36
|
+
SIGNATURE_METHOD2["HmacSha256"] = "hmac-sha256";
|
|
37
|
+
SIGNATURE_METHOD2["HmacSha1"] = "hmac-sha1";
|
|
38
|
+
SIGNATURE_METHOD2["HmacSha512"] = "hmac-sha512";
|
|
39
|
+
SIGNATURE_METHOD2["Custom"] = "custom";
|
|
40
|
+
return SIGNATURE_METHOD2;
|
|
41
|
+
})(SIGNATURE_METHOD || {});
|
|
42
|
+
var WEBHOOK_EVENT_TYPE = /* @__PURE__ */ ((WEBHOOK_EVENT_TYPE2) => {
|
|
43
|
+
WEBHOOK_EVENT_TYPE2["Delivered"] = "delivered";
|
|
44
|
+
WEBHOOK_EVENT_TYPE2["Bounced"] = "bounced";
|
|
45
|
+
WEBHOOK_EVENT_TYPE2["Deferred"] = "deferred";
|
|
46
|
+
WEBHOOK_EVENT_TYPE2["Dropped"] = "dropped";
|
|
47
|
+
WEBHOOK_EVENT_TYPE2["Opened"] = "opened";
|
|
48
|
+
WEBHOOK_EVENT_TYPE2["Clicked"] = "clicked";
|
|
49
|
+
WEBHOOK_EVENT_TYPE2["SpamReport"] = "spam_report";
|
|
50
|
+
WEBHOOK_EVENT_TYPE2["Unsubscribed"] = "unsubscribed";
|
|
51
|
+
WEBHOOK_EVENT_TYPE2["SmsDelivered"] = "sms_delivered";
|
|
52
|
+
WEBHOOK_EVENT_TYPE2["SmsFailed"] = "sms_failed";
|
|
53
|
+
WEBHOOK_EVENT_TYPE2["PushDelivered"] = "push_delivered";
|
|
54
|
+
WEBHOOK_EVENT_TYPE2["PushFailed"] = "push_failed";
|
|
55
|
+
WEBHOOK_EVENT_TYPE2["Unknown"] = "unknown";
|
|
56
|
+
return WEBHOOK_EVENT_TYPE2;
|
|
57
|
+
})(WEBHOOK_EVENT_TYPE || {});
|
|
58
|
+
var WEBHOOK_ENCRYPTION_METHOD = /* @__PURE__ */ ((WEBHOOK_ENCRYPTION_METHOD2) => {
|
|
59
|
+
WEBHOOK_ENCRYPTION_METHOD2["HmacSha256"] = "hmac-sha256";
|
|
60
|
+
WEBHOOK_ENCRYPTION_METHOD2["HmacSha512"] = "hmac-sha512";
|
|
61
|
+
WEBHOOK_ENCRYPTION_METHOD2["None"] = "none";
|
|
62
|
+
return WEBHOOK_ENCRYPTION_METHOD2;
|
|
63
|
+
})(WEBHOOK_ENCRYPTION_METHOD || {});
|
|
64
|
+
var MIME_TYPES = {
|
|
65
|
+
// Documents
|
|
66
|
+
PDF: "application/pdf",
|
|
67
|
+
DOC: "application/msword",
|
|
68
|
+
DOCX: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
69
|
+
XLS: "application/vnd.ms-excel",
|
|
70
|
+
XLSX: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
71
|
+
PPT: "application/vnd.ms-powerpoint",
|
|
72
|
+
PPTX: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
73
|
+
TXT: "text/plain",
|
|
74
|
+
CSV: "text/csv",
|
|
75
|
+
// Images
|
|
76
|
+
PNG: "image/png",
|
|
77
|
+
JPG: "image/jpeg",
|
|
78
|
+
JPEG: "image/jpeg",
|
|
79
|
+
GIF: "image/gif",
|
|
80
|
+
SVG: "image/svg+xml",
|
|
81
|
+
WEBP: "image/webp",
|
|
82
|
+
// Archives
|
|
83
|
+
ZIP: "application/zip",
|
|
84
|
+
RAR: "application/x-rar-compressed",
|
|
85
|
+
TAR: "application/x-tar",
|
|
86
|
+
GZIP: "application/gzip",
|
|
87
|
+
// Other
|
|
88
|
+
JSON: "application/json",
|
|
89
|
+
XML: "application/xml"
|
|
90
|
+
};
|
|
91
|
+
var FILE_EXTENSIONS = {
|
|
92
|
+
// Documents
|
|
93
|
+
PDF: ".pdf",
|
|
94
|
+
DOC: ".doc",
|
|
95
|
+
DOCX: ".docx",
|
|
96
|
+
XLS: ".xls",
|
|
97
|
+
XLSX: ".xlsx",
|
|
98
|
+
PPT: ".ppt",
|
|
99
|
+
PPTX: ".pptx",
|
|
100
|
+
TXT: ".txt",
|
|
101
|
+
CSV: ".csv",
|
|
102
|
+
// Images
|
|
103
|
+
PNG: ".png",
|
|
104
|
+
JPG: ".jpg",
|
|
105
|
+
JPEG: ".jpeg",
|
|
106
|
+
GIF: ".gif",
|
|
107
|
+
SVG: ".svg",
|
|
108
|
+
WEBP: ".webp",
|
|
109
|
+
// Archives
|
|
110
|
+
ZIP: ".zip",
|
|
111
|
+
RAR: ".rar",
|
|
112
|
+
TAR: ".tar",
|
|
113
|
+
GZ: ".gz",
|
|
114
|
+
GZIP: ".gzip",
|
|
115
|
+
// Other
|
|
116
|
+
JSON: ".json",
|
|
117
|
+
XML: ".xml"
|
|
118
|
+
};
|
|
119
|
+
var MAX_EMAIL_LENGTH = 255;
|
|
120
|
+
var MAX_USER_ID_LENGTH = 255;
|
|
121
|
+
var MAX_TEMPLATE_ID_LENGTH = 255;
|
|
122
|
+
var MAX_DEVICE_TOKEN_LENGTH = 512;
|
|
123
|
+
var EmailSchema = z.string().email("Invalid email address format").max(MAX_EMAIL_LENGTH, "Email address must be 255 characters or less").transform((val) => val.trim().toLowerCase());
|
|
124
|
+
var PhoneSchema = z.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number format (E.164 expected)").describe("Phone number in E.164 format");
|
|
125
|
+
var UserIdSchema = z.string().min(1, "User ID is required").max(MAX_USER_ID_LENGTH, "User ID must be 255 characters or less");
|
|
126
|
+
var TemplateIdSchema = z.string().min(1, "Template ID is required").regex(
|
|
127
|
+
/^[a-z0-9-/]+$/,
|
|
128
|
+
"Template ID must contain only lowercase letters, numbers, hyphens, and slashes"
|
|
129
|
+
).max(MAX_TEMPLATE_ID_LENGTH, "Template ID must be 255 characters or less");
|
|
130
|
+
var LocaleSchema = z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/, "Locale must be in format: en, en-US, es, es-MX").describe("Locale in ISO 639-1 format");
|
|
131
|
+
var NotificationCategorySchema = z.enum([
|
|
132
|
+
NOTIFICATION_CATEGORIES.TRANSACTIONAL,
|
|
133
|
+
NOTIFICATION_CATEGORIES.MARKETING,
|
|
134
|
+
NOTIFICATION_CATEGORIES.SOCIAL,
|
|
135
|
+
NOTIFICATION_CATEGORIES.SYSTEM,
|
|
136
|
+
NOTIFICATION_CATEGORIES.PROMOTIONAL
|
|
137
|
+
]).default(NOTIFICATION_CATEGORIES.TRANSACTIONAL).describe("Notification category for compliance and user preferences");
|
|
138
|
+
var QueuePrioritySchema = z.enum(["high", "normal", "low"]);
|
|
139
|
+
var CorrelationIdSchema = z.string().uuid("Correlation ID must be a valid UUID v4").describe("UUID v4 correlation ID");
|
|
140
|
+
var TemplateDataSchema = z.record(z.string(), z.unknown()).optional();
|
|
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
|
+
|
|
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 };
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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 * Configuration defaults have been moved to @plyaz/config/notifications.\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"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification Validation Schemas
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for validating notification inputs
|
|
5
|
+
* Ensures type safety and prevents invalid data from entering the system
|
|
6
|
+
*
|
|
7
|
+
* @module notifications/schemas
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
/**
|
|
11
|
+
* Email address validation
|
|
12
|
+
* - Must be valid email format
|
|
13
|
+
* - Max 255 characters
|
|
14
|
+
* - Automatically lowercased and trimmed
|
|
15
|
+
*/
|
|
16
|
+
export declare const EmailSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
17
|
+
/**
|
|
18
|
+
* Phone number validation (E.164 format)
|
|
19
|
+
* - Must start with optional + followed by country code
|
|
20
|
+
* - 1-15 digits total (E.164 standard)
|
|
21
|
+
* - Examples: +14155552671, +442071838750, +8613800000000
|
|
22
|
+
*/
|
|
23
|
+
export declare const PhoneSchema: z.ZodString;
|
|
24
|
+
/**
|
|
25
|
+
* User ID validation
|
|
26
|
+
* - Required, non-empty string
|
|
27
|
+
* - Max 255 characters
|
|
28
|
+
*/
|
|
29
|
+
export declare const UserIdSchema: z.ZodString;
|
|
30
|
+
/**
|
|
31
|
+
* Template ID validation
|
|
32
|
+
* - Only lowercase letters, numbers, hyphens, and slashes
|
|
33
|
+
* - Used for file path construction, must be safe
|
|
34
|
+
* - Examples: welcome, password-reset, order/confirmation
|
|
35
|
+
*/
|
|
36
|
+
export declare const TemplateIdSchema: z.ZodString;
|
|
37
|
+
/**
|
|
38
|
+
* Locale validation
|
|
39
|
+
* - ISO 639-1 language code (2 lowercase letters)
|
|
40
|
+
* - Optional ISO 3166-1 country code (2 uppercase letters)
|
|
41
|
+
* - Examples: en, en-US, es, es-MX, fr-FR
|
|
42
|
+
*/
|
|
43
|
+
export declare const LocaleSchema: z.ZodString;
|
|
44
|
+
/**
|
|
45
|
+
* Notification category validation (FR-4.3)
|
|
46
|
+
* - transactional: Cannot be opted out (compliance requirement)
|
|
47
|
+
* - marketing: User can opt-out
|
|
48
|
+
* - social: User can opt-out
|
|
49
|
+
*/
|
|
50
|
+
export declare const NotificationCategorySchema: z.ZodDefault<z.ZodEnum<["transactional", "marketing", "social", "system", "promotional"]>>;
|
|
51
|
+
/**
|
|
52
|
+
* Queue priority validation
|
|
53
|
+
*/
|
|
54
|
+
export declare const QueuePrioritySchema: z.ZodEnum<["high", "normal", "low"]>;
|
|
55
|
+
/**
|
|
56
|
+
* Correlation ID validation
|
|
57
|
+
* - UUID v4 format
|
|
58
|
+
* - Used for tracing across systems
|
|
59
|
+
*/
|
|
60
|
+
export declare const CorrelationIdSchema: z.ZodString;
|
|
61
|
+
/**
|
|
62
|
+
* Template data validation
|
|
63
|
+
* - Must be a valid object
|
|
64
|
+
* - Can contain strings, numbers, booleans, or nested objects
|
|
65
|
+
* - Arrays are allowed
|
|
66
|
+
*/
|
|
67
|
+
export declare const TemplateDataSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
68
|
+
/**
|
|
69
|
+
* Device token validation (for push notifications)
|
|
70
|
+
* - Non-empty string
|
|
71
|
+
* - Max 512 characters (FCM tokens can be quite long)
|
|
72
|
+
*/
|
|
73
|
+
export declare const DeviceTokenSchema: z.ZodString;
|