@numerum-tech/yeriasdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +864 -0
- package/dist/core/action-grid-view.d.ts +57 -0
- package/dist/core/action-grid-view.d.ts.map +1 -0
- package/dist/core/action-grid-view.js +112 -0
- package/dist/core/action-grid-view.js.map +1 -0
- package/dist/core/action-list-view.d.ts +39 -0
- package/dist/core/action-list-view.d.ts.map +1 -0
- package/dist/core/action-list-view.js +77 -0
- package/dist/core/action-list-view.js.map +1 -0
- package/dist/core/base/base-action-view.d.ts +82 -0
- package/dist/core/base/base-action-view.d.ts.map +1 -0
- package/dist/core/base/base-action-view.js +143 -0
- package/dist/core/base/base-action-view.js.map +1 -0
- package/dist/core/base-view.d.ts +105 -0
- package/dist/core/base-view.d.ts.map +1 -0
- package/dist/core/base-view.js +426 -0
- package/dist/core/base-view.js.map +1 -0
- package/dist/core/card-view.d.ts +24 -0
- package/dist/core/card-view.d.ts.map +1 -0
- package/dist/core/card-view.js +127 -0
- package/dist/core/card-view.js.map +1 -0
- package/dist/core/carousel-view.d.ts +22 -0
- package/dist/core/carousel-view.d.ts.map +1 -0
- package/dist/core/carousel-view.js +99 -0
- package/dist/core/carousel-view.js.map +1 -0
- package/dist/core/form-view.d.ts +165 -0
- package/dist/core/form-view.d.ts.map +1 -0
- package/dist/core/form-view.js +365 -0
- package/dist/core/form-view.js.map +1 -0
- package/dist/core/jsonapp.d.ts +263 -0
- package/dist/core/jsonapp.d.ts.map +1 -0
- package/dist/core/jsonapp.js +528 -0
- package/dist/core/jsonapp.js.map +1 -0
- package/dist/core/key-store.d.ts +51 -0
- package/dist/core/key-store.d.ts.map +1 -0
- package/dist/core/key-store.js +138 -0
- package/dist/core/key-store.js.map +1 -0
- package/dist/core/map-view.d.ts +45 -0
- package/dist/core/map-view.d.ts.map +1 -0
- package/dist/core/map-view.js +318 -0
- package/dist/core/map-view.js.map +1 -0
- package/dist/core/media-view.d.ts +20 -0
- package/dist/core/media-view.d.ts.map +1 -0
- package/dist/core/media-view.js +75 -0
- package/dist/core/media-view.js.map +1 -0
- package/dist/core/message-view.d.ts +53 -0
- package/dist/core/message-view.d.ts.map +1 -0
- package/dist/core/message-view.js +109 -0
- package/dist/core/message-view.js.map +1 -0
- package/dist/core/notification.d.ts +17 -0
- package/dist/core/notification.d.ts.map +1 -0
- package/dist/core/notification.js +33 -0
- package/dist/core/notification.js.map +1 -0
- package/dist/core/qr-display-view.d.ts +32 -0
- package/dist/core/qr-display-view.d.ts.map +1 -0
- package/dist/core/qr-display-view.js +66 -0
- package/dist/core/qr-display-view.js.map +1 -0
- package/dist/core/qr-scan-view.d.ts +148 -0
- package/dist/core/qr-scan-view.d.ts.map +1 -0
- package/dist/core/qr-scan-view.js +259 -0
- package/dist/core/qr-scan-view.js.map +1 -0
- package/dist/core/reader-view.d.ts +73 -0
- package/dist/core/reader-view.d.ts.map +1 -0
- package/dist/core/reader-view.js +285 -0
- package/dist/core/reader-view.js.map +1 -0
- package/dist/core/timeline-view.d.ts +16 -0
- package/dist/core/timeline-view.d.ts.map +1 -0
- package/dist/core/timeline-view.js +68 -0
- package/dist/core/timeline-view.js.map +1 -0
- package/dist/errors/index.d.ts +276 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +431 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +576 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +48 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/fileFormats.d.ts +52 -0
- package/dist/utils/fileFormats.d.ts.map +1 -0
- package/dist/utils/fileFormats.js +198 -0
- package/dist/utils/fileFormats.js.map +1 -0
- package/dist/utils/logger.d.ts +38 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +109 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validators.d.ts +48 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +445 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_URL_CONFIG = exports.FormValidator = exports.FieldValidator = exports.DataSanitizer = void 0;
|
|
4
|
+
exports.validateSubmissionURL = validateSubmissionURL;
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
class DataSanitizer {
|
|
7
|
+
/**
|
|
8
|
+
* Sanitizes user input to prevent injection attacks
|
|
9
|
+
* @param input - String to sanitize
|
|
10
|
+
* @param options - Sanitization options
|
|
11
|
+
* @returns Sanitized string
|
|
12
|
+
*/
|
|
13
|
+
static sanitizeInput(input, options = {}) {
|
|
14
|
+
if (typeof input !== 'string')
|
|
15
|
+
return '';
|
|
16
|
+
let sanitized = input.trim();
|
|
17
|
+
// Remove null bytes (can cause issues in C-based parsers)
|
|
18
|
+
sanitized = sanitized.replace(/\0/g, '');
|
|
19
|
+
// Normalize Unicode to prevent homograph attacks
|
|
20
|
+
// NFD = Canonical Decomposition, then recompose to NFC
|
|
21
|
+
sanitized = sanitized.normalize('NFC');
|
|
22
|
+
// HTML encoding unless explicitly allowed
|
|
23
|
+
if (!options.allowHtml) {
|
|
24
|
+
sanitized = sanitized
|
|
25
|
+
.replace(/&/g, '&') // Must be first
|
|
26
|
+
.replace(/</g, '<')
|
|
27
|
+
.replace(/>/g, '>')
|
|
28
|
+
.replace(/"/g, '"')
|
|
29
|
+
.replace(/'/g, ''')
|
|
30
|
+
.replace(/\//g, '/');
|
|
31
|
+
}
|
|
32
|
+
return sanitized;
|
|
33
|
+
}
|
|
34
|
+
static validateCoordinates(lat, lon) {
|
|
35
|
+
return lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180;
|
|
36
|
+
}
|
|
37
|
+
static validateEmail(email) {
|
|
38
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
39
|
+
return emailRegex.test(email);
|
|
40
|
+
}
|
|
41
|
+
static validateURL(url) {
|
|
42
|
+
try {
|
|
43
|
+
new URL(url);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static validatePhoneNumber(phone) {
|
|
51
|
+
const phoneRegex = /^[\+]?[1-9][\d]{0,15}$/;
|
|
52
|
+
return phoneRegex.test(phone.replace(/\s/g, ''));
|
|
53
|
+
}
|
|
54
|
+
static validateDate(dateString) {
|
|
55
|
+
// Validate ISO 8601 date format (YYYY-MM-DD)
|
|
56
|
+
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
57
|
+
if (!dateRegex.test(dateString))
|
|
58
|
+
return false;
|
|
59
|
+
const date = new Date(dateString);
|
|
60
|
+
return !isNaN(date.getTime()) && date.toISOString().split('T')[0] === dateString;
|
|
61
|
+
}
|
|
62
|
+
static validateNumber(value) {
|
|
63
|
+
return typeof value === 'number' && !isNaN(value) && isFinite(value);
|
|
64
|
+
}
|
|
65
|
+
static validatePlusCode(plusCode) {
|
|
66
|
+
// Plus Code format: 8 characters + separator + 2-3 characters (e.g., 8FVC9G8F+6W)
|
|
67
|
+
const plusCodeRegex = /^[23456789CFGHJMPQRVWX]{8}\+[23456789CFGHJMPQRVWX]{2,3}$/;
|
|
68
|
+
return plusCodeRegex.test(plusCode.replace(/\s/g, '').toUpperCase());
|
|
69
|
+
}
|
|
70
|
+
static validatePassword(password, minLength = 8) {
|
|
71
|
+
if (password.length < minLength) {
|
|
72
|
+
return { valid: false, error: `Password must be at least ${minLength} characters long` };
|
|
73
|
+
}
|
|
74
|
+
// Check for at least one lowercase letter
|
|
75
|
+
if (!/[a-z]/.test(password)) {
|
|
76
|
+
return { valid: false, error: 'Password must contain at least one lowercase letter' };
|
|
77
|
+
}
|
|
78
|
+
// Check for at least one uppercase letter
|
|
79
|
+
if (!/[A-Z]/.test(password)) {
|
|
80
|
+
return { valid: false, error: 'Password must contain at least one uppercase letter' };
|
|
81
|
+
}
|
|
82
|
+
// Check for at least one digit
|
|
83
|
+
if (!/\d/.test(password)) {
|
|
84
|
+
return { valid: false, error: 'Password must contain at least one digit' };
|
|
85
|
+
}
|
|
86
|
+
return { valid: true };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.DataSanitizer = DataSanitizer;
|
|
90
|
+
class FieldValidator {
|
|
91
|
+
static validateField(fieldType, fieldId, fieldLabel, params) {
|
|
92
|
+
const errors = [];
|
|
93
|
+
const warnings = [];
|
|
94
|
+
// Validation de base
|
|
95
|
+
if (!fieldId || fieldId.trim() === '') {
|
|
96
|
+
errors.push((0, types_1.createValidationError)('Field ID is required', fieldId));
|
|
97
|
+
}
|
|
98
|
+
// Separator fields don't require a label
|
|
99
|
+
if (fieldType !== 'separator' && (!fieldLabel || fieldLabel.trim() === '')) {
|
|
100
|
+
errors.push((0, types_1.createValidationError)('Field label is required', fieldId));
|
|
101
|
+
}
|
|
102
|
+
if (!fieldType || fieldType.trim() === '') {
|
|
103
|
+
errors.push((0, types_1.createValidationError)('Field type is required', fieldId));
|
|
104
|
+
}
|
|
105
|
+
// Skip validation rules for separator fields (they're visual elements only)
|
|
106
|
+
if (fieldType === 'separator') {
|
|
107
|
+
return {
|
|
108
|
+
isValid: errors.length === 0,
|
|
109
|
+
errors,
|
|
110
|
+
warnings
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Validation des paramètres
|
|
114
|
+
if (params) {
|
|
115
|
+
// Validation des longueurs
|
|
116
|
+
if (params.minLength !== undefined && params.minLength < 0) {
|
|
117
|
+
errors.push((0, types_1.createValidationError)('minLength must be non-negative', fieldId));
|
|
118
|
+
}
|
|
119
|
+
if (params.maxLength !== undefined && params.maxLength < 0) {
|
|
120
|
+
errors.push((0, types_1.createValidationError)('maxLength must be non-negative', fieldId));
|
|
121
|
+
}
|
|
122
|
+
if (params.minLength !== undefined && params.maxLength !== undefined &&
|
|
123
|
+
params.minLength > params.maxLength) {
|
|
124
|
+
errors.push((0, types_1.createValidationError)('minLength cannot be greater than maxLength', fieldId));
|
|
125
|
+
}
|
|
126
|
+
// Validation des valeurs numériques
|
|
127
|
+
if (params.min !== undefined && params.max !== undefined &&
|
|
128
|
+
params.min > params.max) {
|
|
129
|
+
errors.push((0, types_1.createValidationError)('min value cannot be greater than max value', fieldId));
|
|
130
|
+
}
|
|
131
|
+
// Validation des options pour les champs de sélection
|
|
132
|
+
if (params.options && (!Array.isArray(params.options) || params.options.length === 0)) {
|
|
133
|
+
errors.push((0, types_1.createValidationError)('Options must be a non-empty array for select fields', fieldId));
|
|
134
|
+
}
|
|
135
|
+
// Validation des types MIME
|
|
136
|
+
if (params.accept && (!Array.isArray(params.accept) || params.accept.length === 0)) {
|
|
137
|
+
errors.push((0, types_1.createValidationError)('Accept must be a non-empty array for file fields', fieldId));
|
|
138
|
+
}
|
|
139
|
+
// Validation des dépendances
|
|
140
|
+
if (params.dependencies && (!Array.isArray(params.dependencies) ||
|
|
141
|
+
params.dependencies.some(dep => !dep || dep.trim() === ''))) {
|
|
142
|
+
errors.push((0, types_1.createValidationError)('Dependencies must be a non-empty array of valid field IDs', fieldId));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Validation spécifique par type de champ
|
|
146
|
+
switch (fieldType) {
|
|
147
|
+
case 'email':
|
|
148
|
+
if (params?.value && !DataSanitizer.validateEmail(params.value)) {
|
|
149
|
+
errors.push((0, types_1.createValidationError)('Invalid email format', fieldId));
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
case 'url':
|
|
153
|
+
if (params?.value && !DataSanitizer.validateURL(params.value)) {
|
|
154
|
+
errors.push((0, types_1.createValidationError)('Invalid URL format', fieldId));
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
case 'phone':
|
|
158
|
+
if (params?.value && !DataSanitizer.validatePhoneNumber(params.value)) {
|
|
159
|
+
errors.push((0, types_1.createValidationError)('Invalid phone number format', fieldId));
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
case 'gps':
|
|
163
|
+
if (params?.value) {
|
|
164
|
+
try {
|
|
165
|
+
const coords = JSON.parse(params.value);
|
|
166
|
+
if (!DataSanitizer.validateCoordinates(coords.lat, coords.lon)) {
|
|
167
|
+
errors.push((0, types_1.createValidationError)('Invalid GPS coordinates', fieldId));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
errors.push((0, types_1.createValidationError)('Invalid GPS coordinates format', fieldId));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
case 'password':
|
|
176
|
+
if (params?.minLength !== undefined && params.minLength < 8) {
|
|
177
|
+
warnings.push((0, types_1.createValidationError)('Password minimum length should be at least 8 characters for security', fieldId));
|
|
178
|
+
}
|
|
179
|
+
if (params?.value) {
|
|
180
|
+
const passwordResult = DataSanitizer.validatePassword(params.value, params?.minLength || 8);
|
|
181
|
+
if (!passwordResult.valid && passwordResult.error) {
|
|
182
|
+
errors.push((0, types_1.createValidationError)(passwordResult.error, fieldId));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case 'number':
|
|
187
|
+
if (params?.value !== undefined && !DataSanitizer.validateNumber(params.value)) {
|
|
188
|
+
errors.push((0, types_1.createValidationError)('Invalid number value', fieldId));
|
|
189
|
+
}
|
|
190
|
+
if (params?.min !== undefined && !DataSanitizer.validateNumber(params.min)) {
|
|
191
|
+
errors.push((0, types_1.createValidationError)('Invalid min value', fieldId));
|
|
192
|
+
}
|
|
193
|
+
if (params?.max !== undefined && !DataSanitizer.validateNumber(params.max)) {
|
|
194
|
+
errors.push((0, types_1.createValidationError)('Invalid max value', fieldId));
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
197
|
+
case 'date':
|
|
198
|
+
if (params?.value && typeof params.value === 'string' && !DataSanitizer.validateDate(params.value)) {
|
|
199
|
+
errors.push((0, types_1.createValidationError)('Invalid date format (expected YYYY-MM-DD)', fieldId));
|
|
200
|
+
}
|
|
201
|
+
if (params?.minDate && typeof params.minDate === 'string' && !DataSanitizer.validateDate(params.minDate)) {
|
|
202
|
+
errors.push((0, types_1.createValidationError)('Invalid minDate format (expected YYYY-MM-DD)', fieldId));
|
|
203
|
+
}
|
|
204
|
+
if (params?.maxDate && typeof params.maxDate === 'string' && !DataSanitizer.validateDate(params.maxDate)) {
|
|
205
|
+
errors.push((0, types_1.createValidationError)('Invalid maxDate format (expected YYYY-MM-DD)', fieldId));
|
|
206
|
+
}
|
|
207
|
+
// Validate date range logic
|
|
208
|
+
if (params?.minDate && params?.maxDate &&
|
|
209
|
+
typeof params.minDate === 'string' && typeof params.maxDate === 'string') {
|
|
210
|
+
const minDate = new Date(params.minDate);
|
|
211
|
+
const maxDate = new Date(params.maxDate);
|
|
212
|
+
if (minDate > maxDate) {
|
|
213
|
+
errors.push((0, types_1.createValidationError)('minDate cannot be after maxDate', fieldId));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
break;
|
|
217
|
+
case 'pluscode':
|
|
218
|
+
if (params?.value && typeof params.value === 'string' && !DataSanitizer.validatePlusCode(params.value)) {
|
|
219
|
+
errors.push((0, types_1.createValidationError)('Invalid Plus Code format (expected format: 8FVC9G8F+6W)', fieldId));
|
|
220
|
+
}
|
|
221
|
+
break;
|
|
222
|
+
case 'textarea':
|
|
223
|
+
// Same validations as text field but with larger typical limits
|
|
224
|
+
if (params?.maxLength && params.maxLength < 10) {
|
|
225
|
+
warnings.push((0, types_1.createValidationError)('Textarea maxLength is very small, consider using text field instead', fieldId));
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
case 'checkbox':
|
|
229
|
+
if (params?.value !== undefined && typeof params.value !== 'boolean') {
|
|
230
|
+
errors.push((0, types_1.createValidationError)('Checkbox value must be boolean', fieldId));
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
case 'select':
|
|
234
|
+
if (!params?.options || params.options.length === 0) {
|
|
235
|
+
errors.push((0, types_1.createValidationError)('Select fields must have options', fieldId));
|
|
236
|
+
}
|
|
237
|
+
// Validate option structure
|
|
238
|
+
if (params?.options && Array.isArray(params.options)) {
|
|
239
|
+
params.options.forEach((option, index) => {
|
|
240
|
+
if (!option || typeof option !== 'object') {
|
|
241
|
+
errors.push((0, types_1.createValidationError)(`Option at index ${index} must be an object with label and value`, fieldId));
|
|
242
|
+
}
|
|
243
|
+
else if (!('label' in option) || !('value' in option)) {
|
|
244
|
+
errors.push((0, types_1.createValidationError)(`Option at index ${index} must have 'label' and 'value' properties`, fieldId));
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
break;
|
|
249
|
+
case 'file':
|
|
250
|
+
case 'photo':
|
|
251
|
+
if (!params?.accept || params.accept.length === 0) {
|
|
252
|
+
errors.push((0, types_1.createValidationError)('File fields must specify accepted types', fieldId));
|
|
253
|
+
}
|
|
254
|
+
// Validate file format specifications
|
|
255
|
+
if (params?.accept && Array.isArray(params.accept)) {
|
|
256
|
+
params.accept.forEach((format, index) => {
|
|
257
|
+
if (typeof format !== 'string' || format.trim() === '') {
|
|
258
|
+
errors.push((0, types_1.createValidationError)(`File format at index ${index} must be a non-empty string`, fieldId));
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
case 'hidden':
|
|
264
|
+
// Hidden fields must have a value
|
|
265
|
+
if (params?.value === undefined || params?.value === null) {
|
|
266
|
+
errors.push((0, types_1.createValidationError)('Hidden fields must have a value', fieldId));
|
|
267
|
+
}
|
|
268
|
+
break;
|
|
269
|
+
case 'text':
|
|
270
|
+
// Basic text field validation is already handled in general params validation
|
|
271
|
+
break;
|
|
272
|
+
default:
|
|
273
|
+
warnings.push((0, types_1.createValidationError)(`Unknown field type: ${fieldType}`, fieldId));
|
|
274
|
+
}
|
|
275
|
+
// Warnings
|
|
276
|
+
if (fieldId.length > 50) {
|
|
277
|
+
warnings.push((0, types_1.createValidationError)('Field ID is quite long, consider using a shorter identifier', fieldId));
|
|
278
|
+
}
|
|
279
|
+
if (fieldLabel.length > 100) {
|
|
280
|
+
warnings.push((0, types_1.createValidationError)('Field label is quite long, consider using a shorter label', fieldId));
|
|
281
|
+
}
|
|
282
|
+
return {
|
|
283
|
+
isValid: errors.length === 0,
|
|
284
|
+
errors,
|
|
285
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
exports.FieldValidator = FieldValidator;
|
|
290
|
+
class FormValidator {
|
|
291
|
+
static validateFormData(formData, fieldValidations) {
|
|
292
|
+
const errors = [];
|
|
293
|
+
const warnings = [];
|
|
294
|
+
for (const [fieldId, validation] of fieldValidations) {
|
|
295
|
+
const value = formData[fieldId];
|
|
296
|
+
// Validation des champs requis
|
|
297
|
+
if (validation.required && (value === undefined || value === null || value === '')) {
|
|
298
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' is required`, fieldId));
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
// Validation des dépendances
|
|
302
|
+
if (validation.dependencies) {
|
|
303
|
+
for (const dependency of validation.dependencies) {
|
|
304
|
+
if (!formData[dependency]) {
|
|
305
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' depends on '${dependency}' which is not filled`, fieldId));
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Validation conditionnelle
|
|
311
|
+
if (validation.conditional && !validation.conditional(formData)) {
|
|
312
|
+
continue; // Skip validation if condition is not met
|
|
313
|
+
}
|
|
314
|
+
// Validation des patterns
|
|
315
|
+
if (validation.pattern && typeof value === 'string' && !validation.pattern.test(value)) {
|
|
316
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' does not match required pattern`, fieldId));
|
|
317
|
+
}
|
|
318
|
+
// Validation des longueurs
|
|
319
|
+
if (typeof value === 'string') {
|
|
320
|
+
if (validation.minLength !== undefined && value.length < validation.minLength) {
|
|
321
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' must be at least ${validation.minLength} characters long`, fieldId));
|
|
322
|
+
}
|
|
323
|
+
if (validation.maxLength !== undefined && value.length > validation.maxLength) {
|
|
324
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' must be at most ${validation.maxLength} characters long`, fieldId));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Validation des valeurs numériques
|
|
328
|
+
if (typeof value === 'number') {
|
|
329
|
+
if (validation.min !== undefined && value < validation.min) {
|
|
330
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' must be at least ${validation.min}`, fieldId));
|
|
331
|
+
}
|
|
332
|
+
if (validation.max !== undefined && value > validation.max) {
|
|
333
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' must be at most ${validation.max}`, fieldId));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Validation personnalisée
|
|
337
|
+
if (validation.customValidator) {
|
|
338
|
+
try {
|
|
339
|
+
const result = validation.customValidator(value);
|
|
340
|
+
if (typeof result === 'string') {
|
|
341
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}': ${result}`, fieldId));
|
|
342
|
+
}
|
|
343
|
+
else if (!result) {
|
|
344
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' failed custom validation`, fieldId));
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
errors.push((0, types_1.createValidationError)(`Field '${fieldId}' custom validation error: ${error instanceof Error ? error.message : 'Unknown error'}`, fieldId));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
isValid: errors.length === 0,
|
|
354
|
+
errors,
|
|
355
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
exports.FormValidator = FormValidator;
|
|
360
|
+
/**
|
|
361
|
+
* Valide une URL de soumission de manière sécurisée
|
|
362
|
+
*/
|
|
363
|
+
function validateSubmissionURL(url, config = {}) {
|
|
364
|
+
const errors = [];
|
|
365
|
+
const warnings = [];
|
|
366
|
+
try {
|
|
367
|
+
const urlObj = new URL(url);
|
|
368
|
+
// 1. Validation de la longueur
|
|
369
|
+
if (config.maxUrlLength && url.length > config.maxUrlLength) {
|
|
370
|
+
errors.push((0, types_1.createValidationError)(`URL too long (max ${config.maxUrlLength} characters)`));
|
|
371
|
+
}
|
|
372
|
+
// 2. Validation des protocoles autorisés
|
|
373
|
+
const allowedProtocols = config.allowedProtocols || ['https:', 'http:'];
|
|
374
|
+
if (!allowedProtocols.includes(urlObj.protocol)) {
|
|
375
|
+
errors.push((0, types_1.createValidationError)(`Protocol '${urlObj.protocol}' not allowed. Allowed: ${allowedProtocols.join(', ')}`));
|
|
376
|
+
}
|
|
377
|
+
// 3. Blocage des IPs privées
|
|
378
|
+
if (config.blockPrivateIPs !== false) {
|
|
379
|
+
const hostname = urlObj.hostname;
|
|
380
|
+
const privateIPPatterns = [
|
|
381
|
+
/^10\./,
|
|
382
|
+
/^172\.(1[6-9]|2[0-9]|3[0-1])\./,
|
|
383
|
+
/^192\.168\./,
|
|
384
|
+
/^127\./,
|
|
385
|
+
/^169\.254\./,
|
|
386
|
+
/^fc00:/,
|
|
387
|
+
/^fe80:/
|
|
388
|
+
];
|
|
389
|
+
if (privateIPPatterns.some(pattern => pattern.test(hostname))) {
|
|
390
|
+
errors.push((0, types_1.createValidationError)('Private/local IP addresses are not allowed'));
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// 4. Blocage de localhost
|
|
394
|
+
if (config.blockLocalhost !== false) {
|
|
395
|
+
if (urlObj.hostname === 'localhost' || urlObj.hostname === '127.0.0.1') {
|
|
396
|
+
errors.push((0, types_1.createValidationError)('Localhost is not allowed'));
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// 5. Validation des domaines autorisés
|
|
400
|
+
if (config.allowedDomains && config.allowedDomains.length > 0) {
|
|
401
|
+
const hostname = urlObj.hostname.toLowerCase();
|
|
402
|
+
const isAllowed = config.allowedDomains.some(domain => {
|
|
403
|
+
const allowedDomain = domain.toLowerCase();
|
|
404
|
+
return hostname === allowedDomain || hostname.endsWith('.' + allowedDomain);
|
|
405
|
+
});
|
|
406
|
+
if (!isAllowed) {
|
|
407
|
+
errors.push((0, types_1.createValidationError)(`Domain '${hostname}' not in allowed list: ${config.allowedDomains.join(', ')}`));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// 6. Validation des ports dangereux
|
|
411
|
+
const dangerousPorts = [21, 22, 23, 25, 53, 80, 110, 143, 993, 995, 3306, 5432, 6379, 27017];
|
|
412
|
+
if (urlObj.port && dangerousPorts.includes(parseInt(urlObj.port))) {
|
|
413
|
+
warnings.push((0, types_1.createValidationError)(`Using potentially dangerous port: ${urlObj.port}`));
|
|
414
|
+
}
|
|
415
|
+
// 7. Validation des caractères suspects
|
|
416
|
+
const suspiciousPatterns = [
|
|
417
|
+
/\.\./, // Directory traversal
|
|
418
|
+
/javascript:/i, // JavaScript protocol
|
|
419
|
+
/data:/i, // Data URLs
|
|
420
|
+
/vbscript:/i, // VBScript protocol
|
|
421
|
+
/file:/i // File protocol
|
|
422
|
+
];
|
|
423
|
+
if (suspiciousPatterns.some(pattern => pattern.test(url))) {
|
|
424
|
+
errors.push((0, types_1.createValidationError)('URL contains suspicious patterns'));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
errors.push((0, types_1.createValidationError)('Invalid URL format'));
|
|
429
|
+
}
|
|
430
|
+
return {
|
|
431
|
+
isValid: errors.length === 0,
|
|
432
|
+
errors,
|
|
433
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Configuration par défaut sécurisée
|
|
438
|
+
*/
|
|
439
|
+
exports.DEFAULT_URL_CONFIG = {
|
|
440
|
+
allowedProtocols: ['https:'],
|
|
441
|
+
blockPrivateIPs: true,
|
|
442
|
+
blockLocalhost: true,
|
|
443
|
+
maxUrlLength: 2048
|
|
444
|
+
};
|
|
445
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@numerum-tech/yeriasdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A modern TypeScript SDK for generating dynamic JSON interfaces",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "npm run clean && tsc",
|
|
9
|
+
"clean": "node scripts/clean.mjs",
|
|
10
|
+
"dev": "tsc --watch",
|
|
11
|
+
"test": "jest",
|
|
12
|
+
"test:watch": "jest --watch",
|
|
13
|
+
"test:coverage": "jest --coverage",
|
|
14
|
+
"test:sdk": "node -r ts-node/register scripts/test-sdk.ts",
|
|
15
|
+
"example": "node -r ts-node/register examples/basic-usage.ts",
|
|
16
|
+
"example:logger": "node -r ts-node/register examples/logger-demo.ts",
|
|
17
|
+
"example:errors": "node -r ts-node/register examples/error-handling-demo.ts",
|
|
18
|
+
"lint": "eslint src/**/*.ts",
|
|
19
|
+
"lint:fix": "eslint src/**/*.ts --fix",
|
|
20
|
+
"docs": "typedoc src/index.ts --out docs",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"json",
|
|
28
|
+
"interface",
|
|
29
|
+
"form-builder",
|
|
30
|
+
"typescript",
|
|
31
|
+
"sdk",
|
|
32
|
+
"dynamic-ui",
|
|
33
|
+
"mobile-apps"
|
|
34
|
+
],
|
|
35
|
+
"author": "JsonApp Team",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/yeria/jsonapp-js.git"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/jest": "^29.5.14",
|
|
43
|
+
"@types/node": "^22.10.5",
|
|
44
|
+
"@types/sanitize-html": "^2.14.0",
|
|
45
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
46
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
47
|
+
"eslint": "^8.57.0",
|
|
48
|
+
"jest": "^29.7.0",
|
|
49
|
+
"rimraf": "^5.0.10",
|
|
50
|
+
"ts-jest": "^29.2.5",
|
|
51
|
+
"ts-node": "^10.9.2",
|
|
52
|
+
"typedoc": "^0.26.0",
|
|
53
|
+
"typescript": "^5.6.3"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"marked": "^15.0.7",
|
|
57
|
+
"sanitize-html": "^2.14.0",
|
|
58
|
+
"zod": "^3.24.1"
|
|
59
|
+
},
|
|
60
|
+
"files": [
|
|
61
|
+
"dist",
|
|
62
|
+
"README.md",
|
|
63
|
+
"LICENSE"
|
|
64
|
+
]
|
|
65
|
+
}
|