@explorins/pers-shared 2.1.154 → 2.1.156

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 (181) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.d.ts.map +1 -1
  3. package/dist/cjs/index.js +1 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.d.ts.map +1 -1
  6. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.js +2 -0
  7. package/dist/cjs/shared-lib/dto/ai/ai-generation-log.dto.js.map +1 -1
  8. package/dist/cjs/shared-lib/dto/analytics/redemption-redeem-analytics-request.dto.d.ts +1 -1
  9. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.d.ts.map +1 -1
  10. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.js +1 -0
  11. package/dist/cjs/shared-lib/dto/api-key/api-key.dto.js.map +1 -1
  12. package/dist/cjs/shared-lib/dto/business/business-membership.dto.d.ts.map +1 -1
  13. package/dist/cjs/shared-lib/dto/business/business-membership.dto.js +4 -2
  14. package/dist/cjs/shared-lib/dto/business/business-membership.dto.js.map +1 -1
  15. package/dist/cjs/shared-lib/dto/business/business-type.dto.d.ts.map +1 -1
  16. package/dist/cjs/shared-lib/dto/business/business-type.dto.js +8 -0
  17. package/dist/cjs/shared-lib/dto/business/business-type.dto.js.map +1 -1
  18. package/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto.js +2 -2
  19. package/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto.js.map +1 -1
  20. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.d.ts +4 -2
  21. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.d.ts.map +1 -1
  22. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.js +14 -6
  23. package/dist/cjs/shared-lib/dto/purchase/donationType.dto.js.map +1 -1
  24. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts +7 -0
  25. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
  26. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js +26 -0
  27. package/dist/cjs/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
  28. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts +0 -2
  29. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
  30. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js +8 -11
  31. package/dist/cjs/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
  32. package/dist/cjs/shared-lib/dto/transaction/transaction.dto.js +2 -2
  33. package/dist/cjs/shared-lib/dto/transaction/transaction.dto.js.map +1 -1
  34. package/dist/cjs/shared-lib/dto/wallet.dto.d.ts.map +1 -1
  35. package/dist/cjs/shared-lib/dto/wallet.dto.js +4 -2
  36. package/dist/cjs/shared-lib/dto/wallet.dto.js.map +1 -1
  37. package/dist/cjs/shared-lib/dto/webhook/webhook.dto.js +2 -2
  38. package/dist/cjs/shared-lib/dto/webhook/webhook.dto.js.map +1 -1
  39. package/dist/cjs/shared-lib/enum/index.d.ts +1 -0
  40. package/dist/cjs/shared-lib/enum/index.d.ts.map +1 -1
  41. package/dist/cjs/shared-lib/enum/index.js +2 -0
  42. package/dist/cjs/shared-lib/enum/index.js.map +1 -1
  43. package/dist/cjs/shared-lib/errors/domains/validation-errors.d.ts +12 -1
  44. package/dist/cjs/shared-lib/errors/domains/validation-errors.d.ts.map +1 -1
  45. package/dist/cjs/shared-lib/errors/domains/validation-errors.js +25 -1
  46. package/dist/cjs/shared-lib/errors/domains/validation-errors.js.map +1 -1
  47. package/dist/cjs/shared-lib/interfaces/email-config.interface.d.ts +2 -0
  48. package/dist/cjs/shared-lib/interfaces/email-config.interface.d.ts.map +1 -1
  49. package/dist/cjs/shared-lib/types/filter-options.type.d.ts +4 -4
  50. package/dist/cjs/shared-lib/types/filter-options.type.d.ts.map +1 -1
  51. package/dist/cjs/shared-lib/types/index.d.ts +3 -0
  52. package/dist/cjs/shared-lib/types/index.d.ts.map +1 -1
  53. package/dist/cjs/shared-lib/types/index.js +3 -0
  54. package/dist/cjs/shared-lib/types/index.js.map +1 -1
  55. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.d.ts +13 -0
  56. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.d.ts.map +1 -1
  57. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.js +22 -3
  58. package/dist/cjs/shared-lib/types/unique-user-identifier-keys.js.map +1 -1
  59. package/dist/cjs/shared-lib/types/user-fields.type.d.ts +105 -0
  60. package/dist/cjs/shared-lib/types/user-fields.type.d.ts.map +1 -0
  61. package/dist/cjs/shared-lib/types/user-fields.type.js +76 -0
  62. package/dist/cjs/shared-lib/types/user-fields.type.js.map +1 -0
  63. package/dist/cjs/shared-lib/types/uuid.type.d.ts +15 -0
  64. package/dist/cjs/shared-lib/types/uuid.type.d.ts.map +1 -0
  65. package/dist/cjs/shared-lib/types/uuid.type.js +11 -0
  66. package/dist/cjs/shared-lib/types/uuid.type.js.map +1 -0
  67. package/dist/cjs/shared-lib/validation/field-validation.d.ts +35 -0
  68. package/dist/cjs/shared-lib/validation/field-validation.d.ts.map +1 -0
  69. package/dist/cjs/shared-lib/validation/field-validation.js +238 -0
  70. package/dist/cjs/shared-lib/validation/field-validation.js.map +1 -0
  71. package/dist/cjs/shared-lib/validation/index.d.ts +4 -0
  72. package/dist/cjs/shared-lib/validation/index.d.ts.map +1 -0
  73. package/dist/cjs/shared-lib/validation/index.js +23 -0
  74. package/dist/cjs/shared-lib/validation/index.js.map +1 -0
  75. package/dist/cjs/shared-lib/validation/validation.types.d.ts +50 -0
  76. package/dist/cjs/shared-lib/validation/validation.types.d.ts.map +1 -0
  77. package/dist/cjs/shared-lib/validation/validation.types.js +19 -0
  78. package/dist/cjs/shared-lib/validation/validation.types.js.map +1 -0
  79. package/dist/cjs/shared-lib/validation/validators.d.ts +37 -0
  80. package/dist/cjs/shared-lib/validation/validators.d.ts.map +1 -0
  81. package/dist/cjs/shared-lib/validation/validators.js +69 -0
  82. package/dist/cjs/shared-lib/validation/validators.js.map +1 -0
  83. package/dist/cjs/shared-patterns/errors/error-factory.d.ts +3 -1
  84. package/dist/cjs/shared-patterns/errors/error-factory.d.ts.map +1 -1
  85. package/dist/cjs/shared-patterns/errors/error-factory.js +8 -0
  86. package/dist/cjs/shared-patterns/errors/error-factory.js.map +1 -1
  87. package/dist/esm/index.d.ts +1 -0
  88. package/dist/esm/index.d.ts.map +1 -1
  89. package/dist/esm/index.js +1 -0
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.d.ts.map +1 -1
  92. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.js +2 -0
  93. package/dist/esm/shared-lib/dto/ai/ai-generation-log.dto.js.map +1 -1
  94. package/dist/esm/shared-lib/dto/analytics/redemption-redeem-analytics-request.dto.d.ts +1 -1
  95. package/dist/esm/shared-lib/dto/api-key/api-key.dto.d.ts.map +1 -1
  96. package/dist/esm/shared-lib/dto/api-key/api-key.dto.js +1 -0
  97. package/dist/esm/shared-lib/dto/api-key/api-key.dto.js.map +1 -1
  98. package/dist/esm/shared-lib/dto/business/business-membership.dto.d.ts.map +1 -1
  99. package/dist/esm/shared-lib/dto/business/business-membership.dto.js +4 -2
  100. package/dist/esm/shared-lib/dto/business/business-membership.dto.js.map +1 -1
  101. package/dist/esm/shared-lib/dto/business/business-type.dto.d.ts.map +1 -1
  102. package/dist/esm/shared-lib/dto/business/business-type.dto.js +13 -5
  103. package/dist/esm/shared-lib/dto/business/business-type.dto.js.map +1 -1
  104. package/dist/esm/shared-lib/dto/campaign/campaignUserClaim.dto.js +2 -2
  105. package/dist/esm/shared-lib/dto/campaign/campaignUserClaim.dto.js.map +1 -1
  106. package/dist/esm/shared-lib/dto/purchase/donationType.dto.d.ts +4 -2
  107. package/dist/esm/shared-lib/dto/purchase/donationType.dto.d.ts.map +1 -1
  108. package/dist/esm/shared-lib/dto/purchase/donationType.dto.js +14 -7
  109. package/dist/esm/shared-lib/dto/purchase/donationType.dto.js.map +1 -1
  110. package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts +7 -0
  111. package/dist/esm/shared-lib/dto/tenant/email-config.dto.d.ts.map +1 -1
  112. package/dist/esm/shared-lib/dto/tenant/email-config.dto.js +24 -0
  113. package/dist/esm/shared-lib/dto/tenant/email-config.dto.js.map +1 -1
  114. package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts +0 -2
  115. package/dist/esm/shared-lib/dto/tenant/tenant.dto.d.ts.map +1 -1
  116. package/dist/esm/shared-lib/dto/tenant/tenant.dto.js +8 -10
  117. package/dist/esm/shared-lib/dto/tenant/tenant.dto.js.map +1 -1
  118. package/dist/esm/shared-lib/dto/transaction/transaction.dto.js +2 -2
  119. package/dist/esm/shared-lib/dto/transaction/transaction.dto.js.map +1 -1
  120. package/dist/esm/shared-lib/dto/wallet.dto.d.ts.map +1 -1
  121. package/dist/esm/shared-lib/dto/wallet.dto.js +4 -2
  122. package/dist/esm/shared-lib/dto/wallet.dto.js.map +1 -1
  123. package/dist/esm/shared-lib/dto/webhook/webhook.dto.js +2 -2
  124. package/dist/esm/shared-lib/dto/webhook/webhook.dto.js.map +1 -1
  125. package/dist/esm/shared-lib/enum/index.d.ts +1 -0
  126. package/dist/esm/shared-lib/enum/index.d.ts.map +1 -1
  127. package/dist/esm/shared-lib/enum/index.js +2 -0
  128. package/dist/esm/shared-lib/enum/index.js.map +1 -1
  129. package/dist/esm/shared-lib/errors/domains/validation-errors.d.ts +12 -1
  130. package/dist/esm/shared-lib/errors/domains/validation-errors.d.ts.map +1 -1
  131. package/dist/esm/shared-lib/errors/domains/validation-errors.js +24 -1
  132. package/dist/esm/shared-lib/errors/domains/validation-errors.js.map +1 -1
  133. package/dist/esm/shared-lib/interfaces/email-config.interface.d.ts +2 -0
  134. package/dist/esm/shared-lib/interfaces/email-config.interface.d.ts.map +1 -1
  135. package/dist/esm/shared-lib/types/filter-options.type.d.ts +4 -4
  136. package/dist/esm/shared-lib/types/filter-options.type.d.ts.map +1 -1
  137. package/dist/esm/shared-lib/types/index.d.ts +3 -0
  138. package/dist/esm/shared-lib/types/index.d.ts.map +1 -1
  139. package/dist/esm/shared-lib/types/index.js +3 -0
  140. package/dist/esm/shared-lib/types/index.js.map +1 -1
  141. package/dist/esm/shared-lib/types/unique-user-identifier-keys.d.ts +13 -0
  142. package/dist/esm/shared-lib/types/unique-user-identifier-keys.d.ts.map +1 -1
  143. package/dist/esm/shared-lib/types/unique-user-identifier-keys.js +21 -2
  144. package/dist/esm/shared-lib/types/unique-user-identifier-keys.js.map +1 -1
  145. package/dist/esm/shared-lib/types/user-fields.type.d.ts +105 -0
  146. package/dist/esm/shared-lib/types/user-fields.type.d.ts.map +1 -0
  147. package/dist/esm/shared-lib/types/user-fields.type.js +67 -0
  148. package/dist/esm/shared-lib/types/user-fields.type.js.map +1 -0
  149. package/dist/esm/shared-lib/types/uuid.type.d.ts +15 -0
  150. package/dist/esm/shared-lib/types/uuid.type.d.ts.map +1 -0
  151. package/dist/esm/shared-lib/types/uuid.type.js +7 -0
  152. package/dist/esm/shared-lib/types/uuid.type.js.map +1 -0
  153. package/dist/esm/shared-lib/validation/field-validation.d.ts +35 -0
  154. package/dist/esm/shared-lib/validation/field-validation.d.ts.map +1 -0
  155. package/dist/esm/shared-lib/validation/field-validation.js +219 -0
  156. package/dist/esm/shared-lib/validation/field-validation.js.map +1 -0
  157. package/dist/esm/shared-lib/validation/index.d.ts +4 -0
  158. package/dist/esm/shared-lib/validation/index.d.ts.map +1 -0
  159. package/dist/esm/shared-lib/validation/index.js +7 -0
  160. package/dist/esm/shared-lib/validation/index.js.map +1 -0
  161. package/dist/esm/shared-lib/validation/validation.types.d.ts +50 -0
  162. package/dist/esm/shared-lib/validation/validation.types.d.ts.map +1 -0
  163. package/dist/esm/shared-lib/validation/validation.types.js +16 -0
  164. package/dist/esm/shared-lib/validation/validation.types.js.map +1 -0
  165. package/dist/esm/shared-lib/validation/validators.d.ts +37 -0
  166. package/dist/esm/shared-lib/validation/validators.d.ts.map +1 -0
  167. package/dist/esm/shared-lib/validation/validators.js +61 -0
  168. package/dist/esm/shared-lib/validation/validators.js.map +1 -0
  169. package/dist/esm/shared-patterns/errors/error-factory.d.ts +3 -1
  170. package/dist/esm/shared-patterns/errors/error-factory.d.ts.map +1 -1
  171. package/dist/esm/shared-patterns/errors/error-factory.js +9 -1
  172. package/dist/esm/shared-patterns/errors/error-factory.js.map +1 -1
  173. package/package.json +1 -1
  174. package/dist/cjs/shared-lib/enum/lambda.enum.d.ts +0 -25
  175. package/dist/cjs/shared-lib/enum/lambda.enum.d.ts.map +0 -1
  176. package/dist/cjs/shared-lib/enum/lambda.enum.js +0 -31
  177. package/dist/cjs/shared-lib/enum/lambda.enum.js.map +0 -1
  178. package/dist/esm/shared-lib/enum/lambda.enum.d.ts +0 -25
  179. package/dist/esm/shared-lib/enum/lambda.enum.d.ts.map +0 -1
  180. package/dist/esm/shared-lib/enum/lambda.enum.js +0 -28
  181. package/dist/esm/shared-lib/enum/lambda.enum.js.map +0 -1
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAllFields = exports.validateFieldComparisons = exports.validateFieldValue = exports.getOperatorText = exports.compareValues = exports.UUID_REGEX = exports.WALLET_ADDRESS_REGEX = exports.URL_REGEX = exports.EMAIL_MAX_LENGTH = exports.EMAIL_REGEX = exports.isValidUuid = exports.isValidNonEmptyString = exports.isValidWalletAddress = exports.isValidUrl = exports.isValidEmail = exports.operatorText = void 0;
4
+ const validation_types_1 = require("./validation.types");
5
+ const validators_1 = require("./validators");
6
+ var validation_types_2 = require("./validation.types");
7
+ Object.defineProperty(exports, "operatorText", { enumerable: true, get: function () { return validation_types_2.operatorText; } });
8
+ // Re-export standalone validators
9
+ var validators_2 = require("./validators");
10
+ Object.defineProperty(exports, "isValidEmail", { enumerable: true, get: function () { return validators_2.isValidEmail; } });
11
+ Object.defineProperty(exports, "isValidUrl", { enumerable: true, get: function () { return validators_2.isValidUrl; } });
12
+ Object.defineProperty(exports, "isValidWalletAddress", { enumerable: true, get: function () { return validators_2.isValidWalletAddress; } });
13
+ Object.defineProperty(exports, "isValidNonEmptyString", { enumerable: true, get: function () { return validators_2.isValidNonEmptyString; } });
14
+ Object.defineProperty(exports, "isValidUuid", { enumerable: true, get: function () { return validators_2.isValidUuid; } });
15
+ Object.defineProperty(exports, "EMAIL_REGEX", { enumerable: true, get: function () { return validators_2.EMAIL_REGEX; } });
16
+ Object.defineProperty(exports, "EMAIL_MAX_LENGTH", { enumerable: true, get: function () { return validators_2.EMAIL_MAX_LENGTH; } });
17
+ Object.defineProperty(exports, "URL_REGEX", { enumerable: true, get: function () { return validators_2.URL_REGEX; } });
18
+ Object.defineProperty(exports, "WALLET_ADDRESS_REGEX", { enumerable: true, get: function () { return validators_2.WALLET_ADDRESS_REGEX; } });
19
+ Object.defineProperty(exports, "UUID_REGEX", { enumerable: true, get: function () { return validators_2.UUID_REGEX; } });
20
+ // ============================================================================
21
+ // Comparison Functions
22
+ // ============================================================================
23
+ /**
24
+ * Compare two values using the specified operator.
25
+ * Works with numbers, dates, and strings.
26
+ */
27
+ const compareValues = (a, b, op) => {
28
+ switch (op) {
29
+ case '<': return a < b;
30
+ case '<=': return a <= b;
31
+ case '>': return a > b;
32
+ case '>=': return a >= b;
33
+ case '==': return a === b;
34
+ case '!=': return a !== b;
35
+ }
36
+ };
37
+ exports.compareValues = compareValues;
38
+ /** Get human-readable operator text for error messages. */
39
+ const getOperatorText = (op) => validation_types_1.operatorText[op];
40
+ exports.getOperatorText = getOperatorText;
41
+ // ============================================================================
42
+ // Single Field Validation
43
+ // ============================================================================
44
+ /**
45
+ * Validate a single field value against validation rules.
46
+ * Does not check cross-field comparisons (use validateFieldComparisons for that).
47
+ */
48
+ const validateFieldValue = (value, rules, fieldType) => {
49
+ // No rules = valid
50
+ if (!rules) {
51
+ return null;
52
+ }
53
+ const stringValue = value !== null && value !== undefined ? String(value) : '';
54
+ const isEmpty = value === null || value === undefined || value === '';
55
+ // Required check
56
+ if (rules.required && isEmpty) {
57
+ return { field: '', message: 'This field is required', code: 'required' };
58
+ }
59
+ // If empty and not required, skip other validations
60
+ if (isEmpty) {
61
+ return null;
62
+ }
63
+ // Type-specific validation
64
+ switch (fieldType) {
65
+ case 'text':
66
+ if (rules.minLength && stringValue.length < rules.minLength) {
67
+ return { field: '', message: `Minimum ${rules.minLength} characters required`, code: 'minLength' };
68
+ }
69
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
70
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, code: 'maxLength' };
71
+ }
72
+ if (rules.pattern && !new RegExp(rules.pattern).test(stringValue)) {
73
+ return { field: '', message: rules.patternMessage || 'Invalid format', code: 'pattern' };
74
+ }
75
+ break;
76
+ case 'email':
77
+ if (stringValue.length > validators_1.EMAIL_MAX_LENGTH || !validators_1.EMAIL_REGEX.test(stringValue)) {
78
+ return { field: '', message: 'Invalid email format', code: 'email' };
79
+ }
80
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
81
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, code: 'maxLength' };
82
+ }
83
+ break;
84
+ case 'url':
85
+ if (!validators_1.URL_REGEX.test(stringValue)) {
86
+ return { field: '', message: 'Invalid URL format', code: 'url' };
87
+ }
88
+ if (rules.maxLength && stringValue.length > rules.maxLength) {
89
+ return { field: '', message: `Maximum ${rules.maxLength} characters allowed`, code: 'maxLength' };
90
+ }
91
+ break;
92
+ case 'number':
93
+ const numValue = typeof value === 'number' ? value : parseFloat(stringValue);
94
+ if (isNaN(numValue)) {
95
+ return { field: '', message: 'Must be a valid number', code: 'type' };
96
+ }
97
+ if (rules.min !== undefined && numValue < rules.min) {
98
+ return { field: '', message: `Minimum value is ${rules.min}`, code: 'min' };
99
+ }
100
+ if (rules.max !== undefined && numValue > rules.max) {
101
+ return { field: '', message: `Maximum value is ${rules.max}`, code: 'max' };
102
+ }
103
+ break;
104
+ case 'boolean':
105
+ if (typeof value !== 'boolean' && stringValue !== 'true' && stringValue !== 'false') {
106
+ return { field: '', message: 'Must be true or false', code: 'type' };
107
+ }
108
+ break;
109
+ case 'date':
110
+ const dateValue = new Date(stringValue);
111
+ if (isNaN(dateValue.getTime())) {
112
+ return { field: '', message: 'Must be a valid date', code: 'type' };
113
+ }
114
+ const now = new Date();
115
+ if (rules.minDate) {
116
+ const minDate = rules.minDate === 'now' ? now : new Date(rules.minDate);
117
+ if (dateValue < minDate) {
118
+ return {
119
+ field: '',
120
+ message: rules.minDate === 'now' ? 'Date must be in the future' : `Date must be after ${rules.minDate}`,
121
+ code: 'minDate'
122
+ };
123
+ }
124
+ }
125
+ if (rules.maxDate) {
126
+ const maxDate = rules.maxDate === 'now' ? now : new Date(rules.maxDate);
127
+ if (dateValue > maxDate) {
128
+ return {
129
+ field: '',
130
+ message: rules.maxDate === 'now' ? 'Date must be in the past' : `Date must be before ${rules.maxDate}`,
131
+ code: 'maxDate'
132
+ };
133
+ }
134
+ }
135
+ break;
136
+ }
137
+ return null;
138
+ };
139
+ exports.validateFieldValue = validateFieldValue;
140
+ // ============================================================================
141
+ // Cross-Field / Literal Comparison Validation
142
+ // ============================================================================
143
+ /** Type guard for field comparison */
144
+ const isFieldComparison = (c) => 'field' in c && c.field !== undefined;
145
+ /**
146
+ * Validate comparison rules for a single field.
147
+ * Supports comparing to another field OR a literal value.
148
+ */
149
+ const validateFieldComparisons = (fieldKey, value, comparisons, allData, fieldType) => {
150
+ if (!comparisons || comparisons.length === 0)
151
+ return [];
152
+ const errors = [];
153
+ for (const comparison of comparisons) {
154
+ // Skip if this field's value is empty
155
+ if (value === null || value === undefined || value === '')
156
+ continue;
157
+ // Get the comparison target (field value or literal)
158
+ const isField = isFieldComparison(comparison);
159
+ const targetValue = isField ? allData[comparison.field] : comparison.value;
160
+ const targetLabel = isField ? comparison.field : String(comparison.value);
161
+ // Skip if comparing to field and that field is empty
162
+ if (isField && (targetValue === null || targetValue === undefined || targetValue === ''))
163
+ continue;
164
+ let isValid = true;
165
+ const { operator, message } = comparison;
166
+ switch (fieldType) {
167
+ case 'date': {
168
+ const thisDate = new Date(String(value));
169
+ const otherDate = new Date(String(targetValue));
170
+ if (isNaN(thisDate.getTime()) || isNaN(otherDate.getTime()))
171
+ continue;
172
+ isValid = (0, exports.compareValues)(thisDate.getTime(), otherDate.getTime(), operator);
173
+ break;
174
+ }
175
+ case 'number': {
176
+ const thisNum = typeof value === 'number' ? value : parseFloat(String(value));
177
+ const otherNum = typeof targetValue === 'number' ? targetValue : parseFloat(String(targetValue));
178
+ if (isNaN(thisNum) || isNaN(otherNum))
179
+ continue;
180
+ isValid = (0, exports.compareValues)(thisNum, otherNum, operator);
181
+ break;
182
+ }
183
+ case 'boolean': {
184
+ const thisBool = typeof value === 'boolean' ? value : value === 'true';
185
+ const otherBool = typeof targetValue === 'boolean' ? targetValue : targetValue === 'true';
186
+ isValid = operator === '==' ? thisBool === otherBool :
187
+ operator === '!=' ? thisBool !== otherBool : true;
188
+ break;
189
+ }
190
+ default: {
191
+ isValid = (0, exports.compareValues)(String(value), String(targetValue), operator);
192
+ break;
193
+ }
194
+ }
195
+ if (!isValid) {
196
+ errors.push({
197
+ field: fieldKey,
198
+ message: message || `Must be ${(0, exports.getOperatorText)(operator)} ${targetLabel}`,
199
+ code: `comparison:${operator}:${targetLabel}`,
200
+ });
201
+ }
202
+ }
203
+ return errors;
204
+ };
205
+ exports.validateFieldComparisons = validateFieldComparisons;
206
+ // ============================================================================
207
+ // Full Data Validation
208
+ // ============================================================================
209
+ /**
210
+ * Validate all fields in a data object against their definitions.
211
+ * Runs both single-field and comparison validations.
212
+ *
213
+ * @param data - The data object to validate
214
+ * @param definitions - Field definitions with validation rules
215
+ * @returns Array of all validation errors
216
+ */
217
+ const validateAllFields = (data, definitions) => {
218
+ const errors = [];
219
+ const definitionMap = new Map(definitions.map(d => [d.key, d]));
220
+ for (const [key, value] of Object.entries(data)) {
221
+ const def = definitionMap.get(key);
222
+ if (!def)
223
+ continue;
224
+ // Single-field validation
225
+ const error = (0, exports.validateFieldValue)(value, def.validation, def.fieldType);
226
+ if (error) {
227
+ errors.push({ ...error, field: key });
228
+ }
229
+ // Comparison validation
230
+ if (def.validation?.comparisons) {
231
+ const comparisonErrors = (0, exports.validateFieldComparisons)(key, value, def.validation.comparisons, data, def.fieldType);
232
+ errors.push(...comparisonErrors);
233
+ }
234
+ }
235
+ return errors;
236
+ };
237
+ exports.validateAllFields = validateAllFields;
238
+ //# sourceMappingURL=field-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validation.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/field-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './validation.types';
2
+ export * from './validators';
3
+ export * from './field-validation';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC;AAG7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Types
18
+ __exportStar(require("./validation.types"), exports);
19
+ // Standalone validators
20
+ __exportStar(require("./validators"), exports);
21
+ // Field validation functions (also re-exports types and validators)
22
+ __exportStar(require("./field-validation"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,qDAAmC;AAEnC,wBAAwB;AACxB,+CAA6B;AAE7B,oEAAoE;AACpE,qDAAmC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Validation Types
3
+ * Shared type definitions for field validation.
4
+ */
5
+ export type ComparisonOperator = '<' | '<=' | '>' | '>=' | '==' | '!=';
6
+ /**
7
+ * Compare to another field by key.
8
+ * Example: { field: 'checkOutDate', operator: '<' } // thisField < checkOutDate
9
+ */
10
+ export interface FieldComparisonToField {
11
+ field: string;
12
+ operator: ComparisonOperator;
13
+ message?: string;
14
+ }
15
+ /**
16
+ * Compare to a literal value.
17
+ * Example: { value: 18, operator: '>=' } // thisField >= 18
18
+ */
19
+ export interface FieldComparisonToValue {
20
+ value: number | boolean | string;
21
+ operator: ComparisonOperator;
22
+ message?: string;
23
+ }
24
+ /** Discriminated union - compare to field OR value, never both */
25
+ export type FieldComparison = FieldComparisonToField | FieldComparisonToValue;
26
+ export interface FieldValidationRules {
27
+ required?: boolean;
28
+ minLength?: number;
29
+ maxLength?: number;
30
+ min?: number;
31
+ max?: number;
32
+ pattern?: string;
33
+ patternMessage?: string;
34
+ /** Minimum date - supports 'now' for dynamic current date comparison */
35
+ minDate?: string;
36
+ /** Maximum date - supports 'now' for dynamic current date comparison */
37
+ maxDate?: string;
38
+ /** Cross-field / literal comparison rules */
39
+ comparisons?: FieldComparison[];
40
+ }
41
+ export type FieldType = 'text' | 'number' | 'date' | 'select' | 'boolean' | 'url' | 'email';
42
+ export type { ValidationErrorDetail } from '../errors/base/error-classification-enums';
43
+ export interface FieldDefinition {
44
+ key: string;
45
+ fieldType: FieldType;
46
+ label: string;
47
+ validation?: FieldValidationRules | null;
48
+ }
49
+ export declare const operatorText: Record<ComparisonOperator, string>;
50
+ //# sourceMappingURL=validation.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.types.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/validation/validation.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;AAM9E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAM5F,YAAY,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC1C;AAMD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAO3D,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Validation Types
4
+ * Shared type definitions for field validation.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.operatorText = void 0;
8
+ // ============================================================================
9
+ // Operator Text Mapping
10
+ // ============================================================================
11
+ exports.operatorText = {
12
+ '<': 'less than',
13
+ '<=': 'less than or equal to',
14
+ '>': 'greater than',
15
+ '>=': 'greater than or equal to',
16
+ '==': 'equal to',
17
+ '!=': 'not equal to',
18
+ };
19
+ //# sourceMappingURL=validation.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.types.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/validation.types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkEH,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAElE,QAAA,YAAY,GAAuC;IAC9D,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,uBAAuB;IAC7B,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,0BAA0B;IAChC,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,cAAc;CACrB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Standalone Validators
3
+ * Pure validation functions that can be used independently.
4
+ * Shared between backend and frontend.
5
+ */
6
+ /** RFC-compliant email regex */
7
+ export declare const EMAIL_REGEX: RegExp;
8
+ export declare const EMAIL_MAX_LENGTH = 254;
9
+ /** Basic URL pattern - http(s) with domain */
10
+ export declare const URL_REGEX: RegExp;
11
+ /** Ethereum address format: 0x followed by 40 hexadecimal characters */
12
+ export declare const WALLET_ADDRESS_REGEX: RegExp;
13
+ /** UUID v4 format */
14
+ export declare const UUID_REGEX: RegExp;
15
+ /**
16
+ * Validates email format according to RFC standards.
17
+ * RFC 5321 length limit (254 characters) enforced.
18
+ */
19
+ export declare function isValidEmail(email: string): boolean;
20
+ /**
21
+ * Validates URL format (http/https only).
22
+ */
23
+ export declare function isValidUrl(url: string): boolean;
24
+ /**
25
+ * Validates Ethereum wallet address format.
26
+ * Format: 0x followed by 40 hexadecimal characters.
27
+ */
28
+ export declare function isValidWalletAddress(address: string): boolean;
29
+ /**
30
+ * Validates that a string is not empty and meets minimum length.
31
+ */
32
+ export declare function isValidNonEmptyString(value: string, minLength?: number): boolean;
33
+ /**
34
+ * Validates UUID v4 format.
35
+ */
36
+ export declare function isValidUuid(uuid: string): boolean;
37
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/validation/validators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,gCAAgC;AAChC,eAAO,MAAM,WAAW,QAA+B,CAAC;AACxD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,8CAA8C;AAC9C,eAAO,MAAM,SAAS,QAAoC,CAAC;AAE3D,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,QAAwB,CAAC;AAE1D,qBAAqB;AACrB,eAAO,MAAM,UAAU,QAA2E,CAAC;AAMnG;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAEnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Standalone Validators
4
+ * Pure validation functions that can be used independently.
5
+ * Shared between backend and frontend.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.UUID_REGEX = exports.WALLET_ADDRESS_REGEX = exports.URL_REGEX = exports.EMAIL_MAX_LENGTH = exports.EMAIL_REGEX = void 0;
9
+ exports.isValidEmail = isValidEmail;
10
+ exports.isValidUrl = isValidUrl;
11
+ exports.isValidWalletAddress = isValidWalletAddress;
12
+ exports.isValidNonEmptyString = isValidNonEmptyString;
13
+ exports.isValidUuid = isValidUuid;
14
+ // ============================================================================
15
+ // Regex Patterns
16
+ // ============================================================================
17
+ /** RFC-compliant email regex */
18
+ exports.EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
19
+ exports.EMAIL_MAX_LENGTH = 254; // RFC 5321
20
+ /** Basic URL pattern - http(s) with domain */
21
+ exports.URL_REGEX = /^https?:\/\/[^\s/$.?#].[^\s]*$/i;
22
+ /** Ethereum address format: 0x followed by 40 hexadecimal characters */
23
+ exports.WALLET_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
24
+ /** UUID v4 format */
25
+ exports.UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
26
+ // ============================================================================
27
+ // Validators
28
+ // ============================================================================
29
+ /**
30
+ * Validates email format according to RFC standards.
31
+ * RFC 5321 length limit (254 characters) enforced.
32
+ */
33
+ function isValidEmail(email) {
34
+ if (!email || email.length > exports.EMAIL_MAX_LENGTH)
35
+ return false;
36
+ return exports.EMAIL_REGEX.test(email);
37
+ }
38
+ /**
39
+ * Validates URL format (http/https only).
40
+ */
41
+ function isValidUrl(url) {
42
+ if (!url)
43
+ return false;
44
+ return exports.URL_REGEX.test(url);
45
+ }
46
+ /**
47
+ * Validates Ethereum wallet address format.
48
+ * Format: 0x followed by 40 hexadecimal characters.
49
+ */
50
+ function isValidWalletAddress(address) {
51
+ if (!address)
52
+ return false;
53
+ return exports.WALLET_ADDRESS_REGEX.test(address);
54
+ }
55
+ /**
56
+ * Validates that a string is not empty and meets minimum length.
57
+ */
58
+ function isValidNonEmptyString(value, minLength = 1) {
59
+ return typeof value === 'string' && value.trim().length >= minLength;
60
+ }
61
+ /**
62
+ * Validates UUID v4 format.
63
+ */
64
+ function isValidUuid(uuid) {
65
+ if (!uuid)
66
+ return false;
67
+ return exports.UUID_REGEX.test(uuid);
68
+ }
69
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../src/shared-lib/validation/validators.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA2BH,oCAGC;AAKD,gCAGC;AAMD,oDAGC;AAKD,sDAEC;AAKD,kCAGC;AA5DD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,gCAAgC;AACnB,QAAA,WAAW,GAAG,4BAA4B,CAAC;AAC3C,QAAA,gBAAgB,GAAG,GAAG,CAAC,CAAC,WAAW;AAEhD,8CAA8C;AACjC,QAAA,SAAS,GAAG,iCAAiC,CAAC;AAE3D,wEAAwE;AAC3D,QAAA,oBAAoB,GAAG,qBAAqB,CAAC;AAE1D,qBAAqB;AACR,QAAA,UAAU,GAAG,wEAAwE,CAAC;AAEnG,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;GAGG;AACH,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAgB;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,mBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,iBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,4BAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,KAAa,EAAE,YAAoB,CAAC;IACxE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,SAAS,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,kBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -4,7 +4,7 @@ import { TokenNotFoundError, TokenNotActiveError, TokenIdRequiredError, TokenTyp
4
4
  import { TransactionNotFoundError, TransactionAlreadyCompletedError, TransactionNotPendingError, TransactionValidationError, UnexpectedValidationScenarioError, TransactionExpiredError } from '../../shared-lib/errors/domains/transaction-errors';
5
5
  import { AuthenticationRequiredError, InvalidTokenError, TokenExpiredError, TokenRevokedException, RefreshTokenExpiredError, RefreshTokenRevokedError, AuthorizationFailedError, MultipleContextSelectionRequiredError, AdminTenantRequiredError } from '../../shared-lib/errors/domains/authentication-errors';
6
6
  import { InsufficientBalanceError } from '../../shared-lib/errors/domains/balance-errors';
7
- import { InvalidInputError, RequiredFieldError, InvalidFormatError } from '../../shared-lib/errors/domains/validation-errors';
7
+ import { InvalidInputError, RequiredFieldError, InvalidFormatError, FieldValidationFailedError } from '../../shared-lib/errors/domains/validation-errors';
8
8
  import { SystemError, ExternalServiceError, ConfigurationMissingError } from '../../shared-lib/errors/domains/system-errors';
9
9
  import { TriggerSourceNotFoundError } from '../../shared-lib/errors/domains/trigger-source-errors';
10
10
  import { WebhookNotFoundError, WebhookInactiveError, WebhookSourceNotAllowedError, WebhookSignatureInvalidError, WebhookForwardFailedError, WebhookTimeoutError, WebhookValidationError, WebhookBlockedError, WebhookMethodNotAllowedError, WebhookExecutionNotFoundError, WebhookCallbackRejectedError } from '../../shared-lib/errors/domains/webhook-errors';
@@ -12,6 +12,7 @@ import { SigningAccountValidationError, SigningAccountNotFoundError, SigningAcco
12
12
  import { WalletNotFoundError, WalletMissingSigningError, SmartWalletProcessingError } from '../../shared-lib/errors/domains/wallet-errors';
13
13
  import { TenantNotFoundError } from '../../shared-lib/errors/domains/tenant-errors';
14
14
  import { CampaignUserInfoRequiredError, CampaignBusinessRequiredError, CampaignConditionNotMetError, CampaignAlreadyClaimedError, CampaignNoTriggerError, CampaignLocationRequiredError, CampaignDistanceExceededError, CampaignNotActiveError, CampaignEndedError, CampaignNotStartedError, CampaignClaimLimitReachedError, CampaignCooldownActiveError, CampaignDailyLimitReachedError, CampaignGlobalLimitReachedError, CampaignGlobalDailyLimitReachedError, TriggerNotFoundError, ResourceAlreadyExistsError, ResourceInUseError } from '../../shared-lib/errors/domains/campaign-errors';
15
+ import type { ValidationErrorDetail } from '../../shared-lib/errors/base/error-classification-enums';
15
16
  /**
16
17
  * Convenient shortcut object for the most commonly used error patterns
17
18
  * Provides clean, discoverable API for NestJS applications
@@ -61,6 +62,7 @@ export declare const Errors: {
61
62
  invalidInput: (field: string, reason?: string) => InvalidInputError;
62
63
  requiredField: (field: string) => RequiredFieldError;
63
64
  invalidFormat: (field: string, format: string) => InvalidFormatError;
65
+ fieldValidation: (target: string, violations: ValidationErrorDetail[]) => FieldValidationFailedError;
64
66
  insufficientBalance: (required: string, available: string) => InsufficientBalanceError;
65
67
  systemError: (operation: string, details: string) => SystemError;
66
68
  externalServiceError: (service: string, operation: string) => ExternalServiceError;
@@ -1 +1 @@
1
- {"version":3,"file":"error-factory.d.ts","sourceRoot":"","sources":["../../../../src/shared-patterns/errors/error-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-factory.d.ts","sourceRoot":"","sources":["../../../../src/shared-patterns/errors/error-factory.ts"],"names":[],"mappings":"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"}
@@ -192,6 +192,13 @@ class ErrorFactory {
192
192
  static invalidFormat(field, expectedFormat) {
193
193
  return new validation_errors_1.InvalidFormatError(field, expectedFormat);
194
194
  }
195
+ /**
196
+ * Field validation with multiple violations.
197
+ * Use when validateAllFields() returns errors to throw as structured error.
198
+ */
199
+ static fieldValidation(target, violations) {
200
+ return new validation_errors_1.FieldValidationFailedError(target, violations);
201
+ }
195
202
  /**
196
203
  * Financial/Balance patterns
197
204
  */
@@ -392,6 +399,7 @@ exports.Errors = {
392
399
  invalidInput: (field, reason) => ErrorFactory.invalidInput(field, reason),
393
400
  requiredField: (field) => ErrorFactory.requiredField(field),
394
401
  invalidFormat: (field, format) => ErrorFactory.invalidFormat(field, format),
402
+ fieldValidation: (target, violations) => ErrorFactory.fieldValidation(target, violations),
395
403
  // Financial
396
404
  insufficientBalance: (required, available) => ErrorFactory.insufficientBalance(required, available),
397
405
  // Technical