@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.
Files changed (55) hide show
  1. package/dist/api/client/types.d.ts +3 -3
  2. package/dist/api/config/types.d.ts +62 -5
  3. package/dist/api/debugger/enums.d.ts +12 -0
  4. package/dist/api/debugger/types.d.ts +1 -1
  5. package/dist/api/errors/types.d.ts +46 -238
  6. package/dist/api/events/factories/errors/types.d.ts +26 -27
  7. package/dist/api/index.cjs +1437 -669
  8. package/dist/api/index.cjs.map +1 -1
  9. package/dist/api/index.d.ts +5 -2
  10. package/dist/api/index.js +1365 -603
  11. package/dist/api/index.js.map +1 -1
  12. package/dist/db/DatabaseAdapter.d.ts +2 -2
  13. package/dist/db/DatabaseService.d.ts +5 -5
  14. package/dist/db/config.types.d.ts +1 -1
  15. package/dist/db/database.types.d.ts +2 -2
  16. package/dist/db/index.cjs.map +1 -1
  17. package/dist/db/index.d.ts +1 -1
  18. package/dist/db/index.js.map +1 -1
  19. package/dist/errors/codes.d.ts +251 -0
  20. package/dist/errors/enums.d.ts +199 -0
  21. package/dist/errors/index.cjs +1287 -0
  22. package/dist/errors/index.cjs.map +1 -1
  23. package/dist/errors/index.d.ts +1 -0
  24. package/dist/errors/index.js +1264 -1
  25. package/dist/errors/index.js.map +1 -1
  26. package/dist/errors/types.d.ts +630 -14
  27. package/dist/index.cjs +2161 -1217
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +43 -1
  30. package/dist/index.js +1829 -911
  31. package/dist/index.js.map +1 -1
  32. package/dist/notifications/enums.d.ts +140 -0
  33. package/dist/notifications/index.cjs +4353 -0
  34. package/dist/notifications/index.cjs.map +1 -0
  35. package/dist/notifications/index.js +145 -0
  36. package/dist/notifications/index.js.map +1 -0
  37. package/dist/notifications/schemas.d.ts +73 -0
  38. package/dist/notifications/types.d.ts +1937 -0
  39. package/dist/payments/base-error/enum.d.ts +79 -0
  40. package/dist/payments/base-error/index.d.ts +2 -0
  41. package/dist/payments/base-error/types.d.ts +180 -0
  42. package/dist/payments/currency/enums.d.ts +37 -0
  43. package/dist/payments/currency/index.d.ts +1 -37
  44. package/dist/payments/index.cjs +40 -40
  45. package/dist/payments/index.cjs.map +1 -1
  46. package/dist/payments/index.d.ts +2 -1
  47. package/dist/payments/index.js +40 -40
  48. package/dist/payments/index.js.map +1 -1
  49. package/dist/payments/transaction/types.d.ts +3 -3
  50. package/dist/store/index.d.ts +1 -1
  51. package/dist/store/types.d.ts +2 -3
  52. package/package.json +6 -1
  53. package/dist/api/errors/enum.d.ts +0 -214
  54. package/dist/api/errors/index.d.ts +0 -6
  55. /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;