@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.
Files changed (94) hide show
  1. package/README.md +864 -0
  2. package/dist/core/action-grid-view.d.ts +57 -0
  3. package/dist/core/action-grid-view.d.ts.map +1 -0
  4. package/dist/core/action-grid-view.js +112 -0
  5. package/dist/core/action-grid-view.js.map +1 -0
  6. package/dist/core/action-list-view.d.ts +39 -0
  7. package/dist/core/action-list-view.d.ts.map +1 -0
  8. package/dist/core/action-list-view.js +77 -0
  9. package/dist/core/action-list-view.js.map +1 -0
  10. package/dist/core/base/base-action-view.d.ts +82 -0
  11. package/dist/core/base/base-action-view.d.ts.map +1 -0
  12. package/dist/core/base/base-action-view.js +143 -0
  13. package/dist/core/base/base-action-view.js.map +1 -0
  14. package/dist/core/base-view.d.ts +105 -0
  15. package/dist/core/base-view.d.ts.map +1 -0
  16. package/dist/core/base-view.js +426 -0
  17. package/dist/core/base-view.js.map +1 -0
  18. package/dist/core/card-view.d.ts +24 -0
  19. package/dist/core/card-view.d.ts.map +1 -0
  20. package/dist/core/card-view.js +127 -0
  21. package/dist/core/card-view.js.map +1 -0
  22. package/dist/core/carousel-view.d.ts +22 -0
  23. package/dist/core/carousel-view.d.ts.map +1 -0
  24. package/dist/core/carousel-view.js +99 -0
  25. package/dist/core/carousel-view.js.map +1 -0
  26. package/dist/core/form-view.d.ts +165 -0
  27. package/dist/core/form-view.d.ts.map +1 -0
  28. package/dist/core/form-view.js +365 -0
  29. package/dist/core/form-view.js.map +1 -0
  30. package/dist/core/jsonapp.d.ts +263 -0
  31. package/dist/core/jsonapp.d.ts.map +1 -0
  32. package/dist/core/jsonapp.js +528 -0
  33. package/dist/core/jsonapp.js.map +1 -0
  34. package/dist/core/key-store.d.ts +51 -0
  35. package/dist/core/key-store.d.ts.map +1 -0
  36. package/dist/core/key-store.js +138 -0
  37. package/dist/core/key-store.js.map +1 -0
  38. package/dist/core/map-view.d.ts +45 -0
  39. package/dist/core/map-view.d.ts.map +1 -0
  40. package/dist/core/map-view.js +318 -0
  41. package/dist/core/map-view.js.map +1 -0
  42. package/dist/core/media-view.d.ts +20 -0
  43. package/dist/core/media-view.d.ts.map +1 -0
  44. package/dist/core/media-view.js +75 -0
  45. package/dist/core/media-view.js.map +1 -0
  46. package/dist/core/message-view.d.ts +53 -0
  47. package/dist/core/message-view.d.ts.map +1 -0
  48. package/dist/core/message-view.js +109 -0
  49. package/dist/core/message-view.js.map +1 -0
  50. package/dist/core/notification.d.ts +17 -0
  51. package/dist/core/notification.d.ts.map +1 -0
  52. package/dist/core/notification.js +33 -0
  53. package/dist/core/notification.js.map +1 -0
  54. package/dist/core/qr-display-view.d.ts +32 -0
  55. package/dist/core/qr-display-view.d.ts.map +1 -0
  56. package/dist/core/qr-display-view.js +66 -0
  57. package/dist/core/qr-display-view.js.map +1 -0
  58. package/dist/core/qr-scan-view.d.ts +148 -0
  59. package/dist/core/qr-scan-view.d.ts.map +1 -0
  60. package/dist/core/qr-scan-view.js +259 -0
  61. package/dist/core/qr-scan-view.js.map +1 -0
  62. package/dist/core/reader-view.d.ts +73 -0
  63. package/dist/core/reader-view.d.ts.map +1 -0
  64. package/dist/core/reader-view.js +285 -0
  65. package/dist/core/reader-view.js.map +1 -0
  66. package/dist/core/timeline-view.d.ts +16 -0
  67. package/dist/core/timeline-view.d.ts.map +1 -0
  68. package/dist/core/timeline-view.js +68 -0
  69. package/dist/core/timeline-view.js.map +1 -0
  70. package/dist/errors/index.d.ts +276 -0
  71. package/dist/errors/index.d.ts.map +1 -0
  72. package/dist/errors/index.js +431 -0
  73. package/dist/errors/index.js.map +1 -0
  74. package/dist/index.d.ts +26 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +103 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/types/index.d.ts +576 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/index.js +48 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/utils/fileFormats.d.ts +52 -0
  83. package/dist/utils/fileFormats.d.ts.map +1 -0
  84. package/dist/utils/fileFormats.js +198 -0
  85. package/dist/utils/fileFormats.js.map +1 -0
  86. package/dist/utils/logger.d.ts +38 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +109 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/utils/validators.d.ts +48 -0
  91. package/dist/utils/validators.d.ts.map +1 -0
  92. package/dist/utils/validators.js +445 -0
  93. package/dist/utils/validators.js.map +1 -0
  94. 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, '&lt;')
27
+ .replace(/>/g, '&gt;')
28
+ .replace(/"/g, '&quot;')
29
+ .replace(/'/g, '&#x27;')
30
+ .replace(/\//g, '&#x2F;');
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
+ }