@inputdev/sdk 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 ADDED
@@ -0,0 +1,457 @@
1
+ # InputDev SDK
2
+
3
+ 🚀 **SDK JavaScript ultra-simple pour la soumission de formulaires**
4
+
5
+ Un SDK moderne et intelligent qui facilite l'intégration de formulaires avec votre backend InputDev.
6
+
7
+ ## ✨ **Caractéristiques principales**
8
+
9
+ - 🎯 **Installation instantanée** - Un simple attribut HTML
10
+ - 📧 **Validation emails automatique**
11
+ - 🔇 **Mode silencieux** pour la production
12
+ - 🎨 **Messages d'erreur intelligents**
13
+ - 📊 **Logs détaillés et configurables**
14
+ - ⚡ **Compatible avec tous les frameworks**
15
+
16
+ ## 🚀 **Installation**
17
+
18
+ ### **CDN (recommandé)**
19
+ ```html
20
+ <script src="https://cdn.jsdelivr.net/npm/inputdev-sdk@latest/dist/inputdev-sdk.min.js"></script>
21
+ ```
22
+
23
+ ### **NPM**
24
+ ```bash
25
+ npm install inputdev-sdk
26
+ ```
27
+
28
+ ## 📖 **Utilisation rapide**
29
+
30
+ ### **1. Formulaire automatique**
31
+ ```html
32
+ <form data-inputdev="votre-clé-api">
33
+ <input type="text" name="name" required>
34
+ <input type="email" name="email" required>
35
+ <textarea name="message" required></textarea>
36
+ <button type="submit">Envoyer</button>
37
+ </form>
38
+ ```
39
+
40
+ ### **2. Mode silencieux** (pas de logs)
41
+ ```html
42
+ <form data-inputdev-silence="votre-clé-api">
43
+ <input type="text" name="name" required>
44
+ <input type="email" name="email" required>
45
+ <textarea name="message" required></textarea>
46
+ <button type="submit">Envoyer</button>
47
+ </form>
48
+ ```
49
+
50
+ **🔇 Mode silencieux =**
51
+ - ❌ **Aucun log dans la console**
52
+ - ❌ **Pas de messages d'erreur visibles**
53
+ - ✅ **Uniquement les événements personnalisés**
54
+ - ✅ **Idéal pour la production**
55
+
56
+ ### **3. Appel manuel (avec logs)**
57
+ ```javascript
58
+ const dev = new InputDevSDK();
59
+
60
+ await dev.submit("votre-clé-api", {
61
+ name: "John Doe",
62
+ email: "john@example.com",
63
+ message: "Hello!"
64
+ });
65
+ ```
66
+
67
+ **📊 Mode normal =**
68
+ - ✅ **Logs détaillés dans la console**
69
+ - ✅ **Messages d'erreur intelligents**
70
+ - ✅ **Instructions pour les erreurs courantes**
71
+ - ✅ **Idéal pour le développement**
72
+
73
+ ### **4. Appel manuel silencieux**
74
+ ```javascript
75
+ await dev.submit("votre-clé-api", "silence", {
76
+ name: "John Doe",
77
+ email: "john@example.com",
78
+ message: "Hello!"
79
+ });
80
+ ```
81
+
82
+ **🔇 Mode silencieux manuel =**
83
+ - ❌ **Aucun log dans la console**
84
+ - ❌ **Pas de messages d'erreur**
85
+ - ✅ **Uniquement les événements personnalisés**
86
+ - ✅ **Parfait pour la production**
87
+
88
+ ## 🎨 **Fonctionnalités avancées**
89
+
90
+ ### **Validation emails automatique**
91
+ Le SDK valide automatiquement les champs `<input type="email">` et les données contenant "email" :
92
+
93
+ - ✅ **Validation en temps réel** sur les champs HTML
94
+ - ✅ **Validation des données JSON** dans `submit()`
95
+ - ✅ **Feedback visuel** avec messages d'erreur
96
+ - ✅ **Messages console** détaillés
97
+
98
+ ### **Gestion des erreurs intelligente**
99
+ Messages d'aide contextuels pour les erreurs courantes :
100
+
101
+ - **DOM_001** : Erreur de domaine non autorisé
102
+ - **API_003** : Clé API désactivée
103
+ - **EMAIL_INVALID** : Email invalide
104
+
105
+ ### **Logs configurables**
106
+ ```javascript
107
+ const dev = new InputDevSDK();
108
+
109
+ // Contrôler les logs
110
+ dev.disableLogs(); // Désactiver tous les logs
111
+ dev.enableLogs(); // Réactiver les logs
112
+ ```
113
+
114
+ ## 🔧 **Configuration**
115
+
116
+ ### **Modes de fonctionnement**
117
+
118
+ #### **📊 Mode normal (développement)**
119
+ ```javascript
120
+ const dev = new InputDevSDK();
121
+ // Par défaut : logs activés, messages activés
122
+ ```
123
+
124
+ **Avantages :**
125
+ - ✅ **Logs complets** pour le débogage
126
+ - ✅ **Messages d'erreur détaillés**
127
+ - ✅ **Instructions contextuelles** (DOM_001, API_003)
128
+ - ✅ **Validation emails** avec feedback visuel
129
+
130
+ #### **🔇 Mode silencieux (production)**
131
+ ```javascript
132
+ // Attribut HTML
133
+ <form data-inputdev-silence="votre-clé-api">
134
+
135
+ // Ou appel manuel
136
+ await dev.submit("votre-clé-api", "silence", data);
137
+ ```
138
+
139
+ **Avantages :**
140
+ - ❌ **Aucun log** dans la console
141
+ - ❌ **Pas de messages d'erreur** visibles
142
+ - ✅ **Console propre** pour les utilisateurs
143
+ - ✅ **Uniquement les événements** personnalisés
144
+
145
+ ### **Contrôle manuel des logs**
146
+ ```javascript
147
+ const dev = new InputDevSDK();
148
+
149
+ // Désactiver tous les logs
150
+ dev.disableLogs();
151
+
152
+ // Réactiver les logs
153
+ dev.enableLogs();
154
+ ```
155
+
156
+ ### **Contrôle manuel des messages**
157
+ ```javascript
158
+ // Désactiver les notifications visuelles
159
+ dev.disableMessages();
160
+
161
+ // Réactiver les notifications
162
+ dev.enableMessages();
163
+ ```
164
+
165
+ ### **Quand utiliser quel mode ?**
166
+
167
+ | Situation | Mode recommandé | Pourquoi ? |
168
+ |-----------|-----------------|-----------|
169
+ | **Développement** | 📊 **Normal** | Débogage facile avec logs complets |
170
+ | **Production** | 🔇 **Silencieux** | Console propre pour les utilisateurs |
171
+ | **Tests** | 🔇 **Silencieux** | Pas de pollution des logs de test |
172
+ | **Débogage client** | 📊 **Normal** | Instructions d'erreur détaillées |
173
+
174
+ ## 📋 **Événements personnalisés**
175
+
176
+ ```javascript
177
+ // Écouter les succès
178
+ document.addEventListener('inputdev:success', (event) => {
179
+ console.log('Formulaire envoyé!', event.detail);
180
+ });
181
+
182
+ // Écouter les erreurs
183
+ document.addEventListener('inputdev:error', (event) => {
184
+ console.log('Erreur:', event.detail);
185
+ });
186
+ ```
187
+
188
+ ## 🌍 **Compatibilité**
189
+
190
+ - ✅ **Vanilla JavaScript**
191
+ - ✅ **React**
192
+ - ✅ **Vue.js**
193
+ - ✅ **Angular**
194
+ - ✅ **Svelte**
195
+ - ✅ **Tous les navigateurs modernes**
196
+
197
+ ## 📦 **Taille et performance**
198
+
199
+ - 📊 **~5KB** minifié et gzippé
200
+ - ⚡ **Chargement instantané**
201
+ - 🔄 **Aucune dépendance**
202
+ - 📱 **Mobile-friendly**
203
+
204
+ ## 🔐 **Sécurité**
205
+
206
+ - 🔒 **Clés API masquées** dans les logs
207
+ - 🛡️ **Validation côté client**
208
+ - 🚫 **Pas de données sensibles** exposées
209
+
210
+ ## 📚 **Exemples complets**
211
+
212
+ ### **React**
213
+ ```jsx
214
+ import { InputDevSDK } from 'inputdev-sdk';
215
+
216
+ const dev = new InputDevSDK();
217
+
218
+ const handleSubmit = async (data) => {
219
+ try {
220
+ await dev.submit("votre-clé-api", data);
221
+ alert("Message envoyé !");
222
+ } catch (error) {
223
+ console.error("Erreur:", error);
224
+ }
225
+ };
226
+ ```
227
+
228
+ ### **Vanilla JS**
229
+ ```html
230
+ <script src="inputdev-sdk.min.js"></script>
231
+ <script>
232
+ const dev = new InputDevSDK();
233
+
234
+ document.getElementById('myForm').addEventListener('submit', async (e) => {
235
+ e.preventDefault();
236
+
237
+ const data = {
238
+ name: document.getElementById('name').value,
239
+ email: document.getElementById('email').value
240
+ };
241
+
242
+ await dev.submit("votre-clé-api", "silence", data);
243
+ });
244
+ </script>
245
+ ```
246
+
247
+ ## 🤝 **Contribution**
248
+
249
+ Contributions bienvenues !
250
+ - Fork le projet
251
+ - Créez une branche (`git checkout -b feature/amazing-feature`)
252
+ - Committez (`git commit -m 'Add amazing feature'`)
253
+ - Push (`git push origin feature/amazing-feature`)
254
+ - Ouvrez une Pull Request
255
+
256
+ ## 📄 **Licence**
257
+
258
+ MIT License - libre pour usage commercial et personnel
259
+
260
+ ## 🔗 **Liens utiles**
261
+
262
+ - 📖 **Documentation complète** : [docs.inputdev.com](https://docs.inputdev.com)
263
+ - 🚀 **Démo en ligne** : [demo.inputdev.com](https://demo.inputdev.com)
264
+ - 🐛 **Issues** : [GitHub Issues](https://github.com/inputdev/sdk/issues)
265
+ - 💬 **Support** : [Discord](https://discord.gg/inputdev)
266
+
267
+ ---
268
+
269
+ **Made with ❤️ by InputDev Team**
270
+
271
+ ## API Reference
272
+
273
+ ### `dev.submit(apiKey, data)`
274
+
275
+ Envoie les données du formulaire vers l'API InputDev.
276
+
277
+ **Paramètres :**
278
+ - `apiKey` (string): Votre clé API InputDev
279
+ - `data` (object): Données du formulaire
280
+
281
+ **Retour :**
282
+ - `Promise`: Résolution avec la réponse de l'API
283
+
284
+ **Exemple :**
285
+ ```javascript
286
+ const data = {
287
+ email: "contact@example.com",
288
+ message: "Bonjour, j'aimerais en savoir plus...",
289
+ telephone: "+33612345678",
290
+ plan: "free"
291
+ };
292
+
293
+ dev.submit("grts_VotreCleApiDeCeSite", data)
294
+ .then(response => {
295
+ console.log('Formulaire soumis:', response);
296
+ })
297
+ .catch(error => {
298
+ console.error('Erreur:', error.message);
299
+ });
300
+ ```
301
+
302
+ ## Événements personnalisés
303
+
304
+ Le SDK émet des événements que vous pouvez écouter :
305
+
306
+ ```javascript
307
+ // Succès de la soumission
308
+ document.addEventListener('inputdev:success', (event) => {
309
+ const { form, response } = event.detail;
310
+ console.log('Formulaire envoyé avec succès:', response);
311
+ });
312
+
313
+ // Erreur de soumission
314
+ document.addEventListener('inputdev:error', (event) => {
315
+ const { form, error } = event.detail;
316
+ console.error('Erreur lors de l\'envoi:', error);
317
+ });
318
+ ```
319
+
320
+ ## Codes d'erreur
321
+
322
+ | Code | Message | Description |
323
+ |------|---------|-------------|
324
+ | API_001 | Clé API invalide | La clé API n'existe pas ou est mal formatée |
325
+ | API_003 | Clé API désactivée | La clé API a été désactivée |
326
+ | DOM_001 | Domaine non autorisé | Le domaine n'est pas autorisé pour cette clé |
327
+ | QUO_001 | Quota de soumissions épuisé | Vous avez atteint votre limite de soumissions |
328
+ | STO_001 | Quota de stockage épuisé | Vous avez atteint votre limite de stockage |
329
+ | SRV_001 | Erreur serveur | Erreur interne du serveur |
330
+ | SRV_004 | Trop de requêtes | Rate limit dépassé (10 req/min par clé) |
331
+
332
+ ## Configuration avancée
333
+
334
+ ### Personnaliser la configuration
335
+
336
+ ```javascript
337
+ // Mettre à jour la configuration
338
+ dev.updateConfig({
339
+ apiEndpoint: 'https://votre-serveur-personnalisé.com/submit',
340
+ timeout: 15000,
341
+ retries: 3
342
+ });
343
+
344
+ // Voir la configuration actuelle
345
+ console.log(dev.getConfig());
346
+ ```
347
+
348
+ ### Options de configuration
349
+
350
+ | Option | Défaut | Description |
351
+ |--------|--------|-------------|
352
+ | `apiEndpoint` | `https://votre-serveur.com/submit` | URL de l'API InputDev |
353
+ | `timeout` | `10000` | Timeout en millisecondes |
354
+ | `retries` | `2` | Nombre de tentatives en cas d'échec |
355
+
356
+ ## Exemples pratiques
357
+
358
+ ### Formulaire de contact
359
+ ```html
360
+ <form data-inputdev="grts_VotreCleApi">
361
+ <div>
362
+ <label for="name">Nom:</label>
363
+ <input type="text" id="name" name="name" required>
364
+ </div>
365
+
366
+ <div>
367
+ <label for="email">Email:</label>
368
+ <input type="email" id="email" name="email" required>
369
+ </div>
370
+
371
+ <div>
372
+ <label for="subject">Sujet:</label>
373
+ <input type="text" id="subject" name="subject">
374
+ </div>
375
+
376
+ <div>
377
+ <label for="message">Message:</label>
378
+ <textarea id="message" name="message" required></textarea>
379
+ </div>
380
+
381
+ <button type="submit">Envoyer</button>
382
+ </form>
383
+
384
+ <script src="https://cdn.inputdev.dev/latest.js"></script>
385
+ ```
386
+
387
+ ### Formulaire avec validation personnalisée
388
+ ```javascript
389
+ document.addEventListener('inputdev:success', (event) => {
390
+ // Rediriger après succès
391
+ window.location.href = '/merci.html';
392
+ });
393
+
394
+ document.addEventListener('inputdev:error', (event) => {
395
+ // Afficher une notification personnalisée
396
+ showNotification('Erreur: ' + event.detail.error.message, 'error');
397
+ });
398
+ ```
399
+
400
+ ### Intégration React
401
+ ```jsx
402
+ import { dev } from "@inputdev/sdk";
403
+
404
+ function ContactForm() {
405
+ const [formData, setFormData] = useState({
406
+ email: '',
407
+ message: ''
408
+ });
409
+ const [loading, setLoading] = useState(false);
410
+
411
+ const handleSubmit = async (e) => {
412
+ e.preventDefault();
413
+ setLoading(true);
414
+
415
+ try {
416
+ await dev.submit("grts_VotreCleApi", formData);
417
+ alert('Message envoyé avec succès!');
418
+ setFormData({ email: '', message: '' });
419
+ } catch (error) {
420
+ alert('Erreur: ' + error.message);
421
+ } finally {
422
+ setLoading(false);
423
+ }
424
+ };
425
+
426
+ return (
427
+ <form onSubmit={handleSubmit}>
428
+ <input
429
+ type="email"
430
+ value={formData.email}
431
+ onChange={(e) => setFormData({...formData, email: e.target.value})}
432
+ placeholder="Votre email"
433
+ required
434
+ />
435
+ <textarea
436
+ value={formData.message}
437
+ onChange={(e) => setFormData({...formData, message: e.target.value})}
438
+ placeholder="Votre message"
439
+ required
440
+ />
441
+ <button type="submit" disabled={loading}>
442
+ {loading ? 'Envoi...' : 'Envoyer'}
443
+ </button>
444
+ </form>
445
+ );
446
+ }
447
+ ```
448
+
449
+ ## Support
450
+
451
+ - 📖 Documentation complète : [docs.inputdev.dev](https://docs.inputdev.dev)
452
+ - 🐛 Rapports de bugs : [GitHub Issues](https://github.com/inputdev/sdk/issues)
453
+ - 💬 Communauté : [Discord](https://discord.gg/inputdev)
454
+
455
+ ## Licence
456
+
457
+ MIT License - voir le fichier LICENSE pour les détails.
@@ -0,0 +1,54 @@
1
+ /**
2
+ * InputDev SDK - TypeScript Definitions
3
+ * Backend de formulaires sans code
4
+ */
5
+
6
+ export interface InputDevConfig {
7
+ apiEndpoint?: string;
8
+ timeout?: number;
9
+ retries?: number;
10
+ }
11
+
12
+ export interface SubmissionResponse {
13
+ success: boolean;
14
+ message: string;
15
+ submissionId: string;
16
+ }
17
+
18
+ export interface SubmissionError {
19
+ code: string;
20
+ message: string;
21
+ }
22
+
23
+ export interface InputDevSDK {
24
+ /**
25
+ * Envoie les données du formulaire vers l'API InputDev
26
+ * @param apiKey - Clé API InputDev
27
+ * @param data - Données du formulaire
28
+ * @returns Promise avec la réponse
29
+ */
30
+ submit(apiKey: string, data: Record<string, any>): Promise<SubmissionResponse>;
31
+
32
+ /**
33
+ * Met à jour la configuration du SDK
34
+ * @param newConfig - Nouvelle configuration
35
+ */
36
+ updateConfig(newConfig: InputDevConfig): void;
37
+
38
+ /**
39
+ * Récupère la configuration actuelle
40
+ * @returns Configuration actuelle
41
+ */
42
+ getConfig(): InputDevConfig;
43
+ }
44
+
45
+ export declare class InputDevSDKClass implements InputDevSDK {
46
+ constructor(config?: InputDevConfig);
47
+ submit(apiKey: string, data: Record<string, any>): Promise<SubmissionResponse>;
48
+ updateConfig(newConfig: InputDevConfig): void;
49
+ getConfig(): InputDevConfig;
50
+ }
51
+
52
+ export declare const dev: InputDevSDK;
53
+
54
+ export default InputDevSDKClass;
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@inputdev/sdk",
3
+ "version": "1.0.0",
4
+ "description": "Backend de formulaires sans code - SDK JavaScript",
5
+ "main": "inputdev-sdk.js",
6
+ "types": "inputdev-sdk.d.ts",
7
+ "scripts": {
8
+ "build": "webpack --mode=production",
9
+ "dev": "webpack --mode=development --watch",
10
+ "test": "jest",
11
+ "lint": "eslint *.js",
12
+ "minify": "terser inputdev-sdk.js -o inputdev-sdk.min.js --compress --mangle"
13
+ },
14
+ "keywords": [
15
+ "form",
16
+ "backend",
17
+ "api",
18
+ "sdk",
19
+ "javascript",
20
+ "frontend",
21
+ "backend-as-a-service",
22
+ "form-handler",
23
+ "inputdev"
24
+ ],
25
+ "author": "InputDev",
26
+ "license": "MIT",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "https://github.com/inputdev/sdk.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/inputdev/sdk/issues"
33
+ },
34
+ "homepage": "https://inputdev.dev",
35
+ "files": [
36
+ "inputdev-sdk.js",
37
+ "inputdev-sdk.min.js",
38
+ "inputdev-sdk.d.ts",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "browser": "inputdev-sdk.js",
43
+ "module": "inputdev-sdk.js",
44
+ "unpkg": "inputdev-sdk.min.js",
45
+ "jsdelivr": "inputdev-sdk.min.js"
46
+ }