@inputdev/sdk 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,450 +1,462 @@
1
- # InputDev SDK
1
+ # InputDev SDK Documentation �
2
2
 
3
- 🚀 **SDK JavaScript ultra-simple pour la soumission de formulaires**
3
+ > **Le backend de formulaires le plus simple et professionnel pour les développeurs modernes.**
4
4
 
5
- Un SDK moderne et intelligent qui facilite l'intégration de formulaires avec votre backend InputDev.
5
+ [![Version](https://img.shields.io/badge/version-1.0.0-059669.svg?style=flat-square)](https://inputdev.dev)
6
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)
7
+ [![Documentation](https://img.shields.io/badge/docs-latest-059669.svg?style=flat-square)](https://inputdev.pages.dev/documentation)
6
8
 
7
- ## ✨ **Caractéristiques principales**
9
+ ---
10
+
11
+ ## 📖 Table des matières
12
+
13
+ - [Introduction](#-introduction)
14
+ - [Quick Start](#-quick-start-démarrage-rapide)
15
+ - [Comment ça fonctionne](#-comment-ça-fonctionne)
16
+ - [Installation](#-installation)
17
+ - [Utilisation JavaScript](#-utilisation-javascript-pour-frameworks)
18
+ - [SDK JavaScript Avancé](#-sdk-javascript-avancé)
19
+ - [Validation Email](#-validation-email)
20
+ - [Événements](#-événements)
21
+ - [Codes d'erreur](#-codes-derreur)
22
+ - [Sécurité](#-sécurité)
23
+ - [Mode Silence](#-mode-silence)
24
+ - [Limites](#-limites)
25
+ - [Bonnes pratiques](#-bonnes-pratiques)
26
+ - [Exemple complet](#-exemple-complet-réel)
27
+
28
+ ---
29
+
30
+ ## 🚀 Introduction
31
+
32
+ InputDev permet de transformer un simple formulaire en système de collecte de données sécurisé et professionnel.
33
+
34
+ ### ✨ Avantages principaux
35
+
36
+ - **Aucune configuration serveur nécessaire** - Déployez en minutes
37
+ - **Aucune dépendance externe** - SDK ultra-léger et autonome
38
+ - **Installation en moins de 1 minute** - Intégration instantanée
39
+ - **Validation automatique** - Emails et champs intégrés
40
+ - **Sécurité de niveau entreprise** - HTTPS, CORS, anti-spam
41
+ - **Filtrage intelligent des champs** - Ignore automatiquement les éléments non-pertinents
42
+ - **Retour visuel immédiat** - Boutons verts/rouges selon succès/erreur
43
+ - **Deux versions disponibles** - Minifiée (8.3KB) et complète (10.3KB)
8
44
 
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**
45
+ ---
46
+
47
+ ## Quick Start (Démarrage rapide)
15
48
 
16
- ## 🚀 **Installation**
49
+ ### Étape 1 — Ajouter le script
50
+
51
+ #### Via CDN (recommandé)
17
52
 
18
- ### **CDN (recommandé)**
19
53
  ```html
20
- <!-- UNPKG -->
21
54
  <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
22
-
23
- <!-- JSDelivr -->
24
- <script src="https://cdn.jsdelivr.net/npm/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
25
55
  ```
26
56
 
27
- ### **NPM**
57
+ > **Note importante** : Utilisez la version `.prod.js` qui est la seule version fonctionnelle actuellement
58
+
59
+ #### Via NPM
60
+
28
61
  ```bash
29
62
  npm install @inputdev/sdk
63
+ import InputDev from "@inputdev/sdk";
30
64
  ```
31
65
 
32
- ## 📖 **Utilisation rapide**
66
+ ### Étape 2 — Ajouter votre clé API
33
67
 
34
- ### **1. Formulaire automatique**
35
68
  ```html
36
- <form data-inputdev="votre-clé-api">
37
- <input type="text" name="name" required>
38
- <input type="email" name="email" required>
39
- <textarea name="message" required></textarea>
40
- <button type="submit">Envoyer</button>
69
+ <form data-inputdev="grts_VotreCleApiDeCeSite">
70
+ <input type="text" name="name" required />
71
+ <input type="email" name="email" required />
72
+ <button type="submit">Envoyer</button>
41
73
  </form>
42
74
  ```
43
75
 
44
- ### **2. Mode silencieux** (pas de logs)
76
+ > 🎉 **C'est terminé !** Le formulaire est maintenant connecté à InputDev.
77
+
78
+ ---
79
+
80
+ ## 🔧 Comment ça fonctionne
81
+
82
+ 1. **Navigateur** - L'utilisateur soumet le formulaire
83
+ 2. **InputDev API** - Les données sont validées et envoyées en HTTPS
84
+ 3. **Stockage sécurisé** - Elles sont enregistrées dans votre tableau de bord
85
+
86
+ ---
87
+
88
+ ## 📦 Installation
89
+
90
+ ### Via CDN (recommandé pour production)
91
+
92
+ > **Deux versions disponibles :**
93
+ > - **Version minifiée (8.3KB)** : Pour production - chargement ultra-rapide
94
+ > - **Version complète (10.3KB)** : Pour développement - avec commentaires
95
+
96
+ #### Version Minifiée (Production)
45
97
  ```html
46
- <form data-inputdev-silence="votre-clé-api">
47
- <input type="text" name="name" required>
48
- <input type="email" name="email" required>
49
- <textarea name="message" required></textarea>
50
- <button type="submit">Envoyer</button>
51
- </form>
98
+ <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.min.js"></script>
52
99
  ```
53
100
 
54
- **🔇 Mode silencieux =**
55
- - ❌ **Aucun log dans la console**
56
- - ❌ **Pas de messages d'erreur visibles**
57
- - ✅ **Uniquement les événements personnalisés**
58
- - ✅ **Idéal pour la production**
101
+ #### Version Complète (Développement)
102
+ ```html
103
+ <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
104
+ ```
59
105
 
60
- ### **3. Appel manuel (avec logs)**
61
- ```javascript
62
- const dev = new InputDevSDK();
106
+ #### CDN Alternative (JSDelivr)
107
+ ```html
108
+ <script src="https://cdn.jsdelivr.net/npm/@inputdev/sdk@latest/inputdev-sdk.min.js"></script>
109
+ ```
63
110
 
64
- await dev.submit("votre-clé-api", {
65
- name: "John Doe",
66
- email: "john@example.com",
67
- message: "Hello!"
68
- });
111
+ ### Via NPM
112
+
113
+ ```bash
114
+ npm install @inputdev/sdk
115
+ import InputDev from "@inputdev/sdk";
69
116
  ```
70
117
 
71
- **📊 Mode normal =**
72
- - ✅ **Logs détaillés dans la console**
73
- - **Messages d'erreur intelligents**
74
- - ✅ **Instructions pour les erreurs courantes**
75
- - ✅ **Idéal pour le développement**
118
+ ---
119
+
120
+ ## 💻 Utilisation JavaScript (Pour Frameworks)
121
+
122
+ Idéal pour les frameworks JavaScript (React, Vue, Angular, etc.) où vous contrôlez déjà les données du formulaire :
76
123
 
77
- ### **4. Appel manuel silencieux**
78
124
  ```javascript
79
- await dev.submit("votre-clé-api", "silence", {
80
- name: "John Doe",
81
- email: "john@example.com",
82
- message: "Hello!"
125
+ const sdk = new InputDev();
126
+
127
+ await sdk.submit("grts_VotreCleApiDeCeSite", {
128
+ name: "John",
129
+ email: "john@email.com",
130
+ plan: "premium"
83
131
  });
84
132
  ```
85
133
 
86
- **🔇 Mode silencieux manuel =**
87
- - ❌ **Aucun log dans la console**
88
- - ❌ **Pas de messages d'erreur**
89
- - ✅ **Uniquement les événements personnalisés**
90
- - ✅ **Parfait pour la production**
134
+ ### Paramètres
91
135
 
92
- ## 🎨 **Fonctionnalités avancées**
136
+ | Paramètre | Type | Obligatoire | Description |
137
+ |-----------|------|-------------|-------------|
138
+ | `apiKey` | string | Oui | Clé publique fournie par InputDev |
139
+ | `data` | object | Oui | Données à envoyer |
93
140
 
94
- ### **Validation emails automatique**
95
- Le SDK valide automatiquement les champs `<input type="email">` et les données contenant "email" :
96
-
97
- - ✅ **Validation en temps réel** sur les champs HTML
98
- - ✅ **Validation des données JSON** dans `submit()`
99
- - ✅ **Feedback visuel** avec messages d'erreur
100
- - ✅ **Messages console** détaillés
141
+ ---
101
142
 
102
- ### **Gestion des erreurs intelligente**
103
- Messages d'aide contextuels pour les erreurs courantes :
143
+ ## 🚀 SDK JavaScript Avancé
104
144
 
105
- - **DOM_001** : Erreur de domaine non autorisé
106
- - **API_003** : Clé API désactivée
107
- - **EMAIL_INVALID** : Email invalide
145
+ Pour le HTML classique avec un contrôle total des champs et une gestion personnalisée :
108
146
 
109
- ### **Logs configurables**
110
- ```javascript
111
- const dev = new InputDevSDK();
147
+ ```html
148
+ <form id="contact-form">
149
+ <!-- ... vos champs ici ... -->
150
+ <button type="button" onclick="submitFormulaire()">Envoyer</button>
151
+ </form>
112
152
 
113
- // Contrôler les logs
114
- dev.disableLogs(); // Désactiver tous les logs
115
- dev.enableLogs(); // Réactiver les logs
153
+ <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
154
+ <script>
155
+ // Fonction réutilisable, contrôle total des champs
156
+ function submitFormulaire() {
157
+ const dev = new InputDevSDK();
158
+ const data = {
159
+ email: "exemple@test.com",
160
+ message: "Message par défaut",
161
+ telephone: "+22990000000",
162
+ plan: "free"
163
+ };
164
+ dev.submit("grts_VotreCleApiDeCeSite", data); // SDK gère erreurs et succès automatiquement
165
+ }
166
+ </script>
116
167
  ```
117
168
 
118
- ## 🔧 **Configuration**
169
+ ### Avantages du SDK avancé
119
170
 
120
- ### **Modes de fonctionnement**
171
+ - **Contrôle total des données** - Gérez chaque champ manuellement
172
+ - **Validation personnalisée** - Appliquez vos règles métier
173
+ - **Gestion d'erreurs avancée** - Messages d'erreur sur mesure
174
+ - **Performance optimisée** - Envoi asynchrone et optimisé
121
175
 
122
- #### **📊 Mode normal (développement)**
123
- ```javascript
124
- const dev = new InputDevSDK();
125
- // Par défaut : logs activés, messages activés
126
- ```
176
+ ---
127
177
 
128
- **Avantages :**
129
- - ✅ **Logs complets** pour le débogage
130
- - ✅ **Messages d'erreur détaillés**
131
- - ✅ **Instructions contextuelles** (DOM_001, API_003)
132
- - ✅ **Validation emails** avec feedback visuel
178
+ ## 📧 Validation Email
133
179
 
134
- #### **🔇 Mode silencieux (production)**
135
- ```javascript
136
- // Attribut HTML
137
- <form data-inputdev-silence="votre-clé-api">
180
+ InputDev valide automatiquement les adresses email pour garantir la qualité des données collectées. La validation fonctionne en deux temps : affichage des messages et blocage de la soumission si nécessaire.
138
181
 
139
- // Ou appel manuel
140
- await dev.submit("votre-clé-api", "silence", data);
141
- ```
182
+ ### Comment ça fonctionne ?
142
183
 
143
- **Avantages :**
144
- - **Aucun log** dans la console
145
- - **Pas de messages d'erreur** visibles
146
- - ✅ **Console propre** pour les utilisateurs
147
- - ✅ **Uniquement les événements** personnalisés
184
+ Le SDK détecte automatiquement les champs email de deux manières :
185
+ 1. **Type d'input** : Tous les `<input type="email">` sont validés
186
+ 2. **Nom du champ** : Tous les champs dont le nom contient "email" (insensible à la casse)
148
187
 
149
- ### **Contrôle manuel des logs**
150
- ```javascript
151
- const dev = new InputDevSDK();
188
+ > ⚠️ **Important** : Les **names** sont très importants ! Ils déterminent quels champs seront validés et comment les données seront stockées.
152
189
 
153
- // Désactiver tous les logs
154
- dev.disableLogs();
190
+ #### Messages dans la console (pour le débogage)
155
191
 
156
- // Réactiver les logs
157
- dev.enableLogs();
192
+ ```
193
+ 📧 VALIDATION EMAIL
194
+ ⚠️ Erreurs trouvées:
195
+ • L'email "email" est invalide: test@invalid
196
+ 💡 Corrigez les emails avant de soumettre à nouveau
158
197
  ```
159
198
 
160
- ### **Contrôle manuel des messages**
161
- ```javascript
162
- // Désactiver les notifications visuelles
163
- dev.disableMessages();
199
+ #### Messages sous le formulaire (pour l'expérience utilisateur)
164
200
 
165
- // Réactiver les notifications
166
- dev.enableMessages();
201
+ ```html
202
+ <div class="inputdev-email-error-message" data-inputdev-error-for="email">
203
+ <span style="text-decoration: underline; font-weight: bold;">InputDev SDK</span> :
204
+ <span style="font-weight: bold;">Veuillez entrer une adresse email valide</span>
205
+ </div>
167
206
  ```
168
207
 
169
- ### **Quand utiliser quel mode ?**
208
+ ### Processus de validation
170
209
 
171
- | Situation | Mode recommandé | Pourquoi ? |
172
- |-----------|-----------------|-----------|
173
- | **Développement** | 📊 **Normal** | Débogage facile avec logs complets |
174
- | **Production** | 🔇 **Silencieux** | Console propre pour les utilisateurs |
175
- | **Tests** | 🔇 **Silencieux** | Pas de pollution des logs de test |
176
- | **Débogage client** | 📊 **Normal** | Instructions d'erreur détaillées |
210
+ 1. **Détection** : Le SDK identifie les champs avec "email" dans le nom (insensible à la casse)
211
+ 2. **Validation en temps réel** : Vérification lors de la perte de focus (blur event)
212
+ 3. **Feedback visuel** : Bordure rouge et message d'erreur sous le champ
213
+ 4. **Blocage de soumission** : Empêche l'envoi si un email est invalide
214
+ 5. **Nettoyage automatique** : Supprime l'erreur quand l'utilisateur corrige
177
215
 
178
- ## 📋 **Événements personnalisés**
179
-
180
- ```javascript
181
- // Écouter les succès
182
- document.addEventListener('inputdev:success', (event) => {
183
- console.log('Formulaire envoyé!', event.detail);
184
- });
216
+ ### Exemple de validation
185
217
 
186
- // Écouter les erreurs
187
- document.addEventListener('inputdev:error', (event) => {
188
- console.log('Erreur:', event.detail);
189
- });
218
+ ```html
219
+ <form data-inputdev="grts_VotreCleApiDeCeSite">
220
+ <input type="text" name="name" placeholder="Nom" required>
221
+
222
+ <!-- ✅ Sera validé (type="email") -->
223
+ <input type="email" name="contact" placeholder="Contact" required>
224
+
225
+ <!-- ✅ Aussi validé (type="email" + name contient "email") -->
226
+ <input type="email" name="email" placeholder="Email" required>
227
+
228
+ <!-- ✅ Validé (name contient "email") -->
229
+ <input type="text" name="user_email" placeholder="Email utilisateur">
230
+
231
+ <!-- ❌ Non validé (ni type="email", ni name avec "email") -->
232
+ <input type="text" name="phone" placeholder="Téléphone">
233
+
234
+ <button type="submit">Envoyer</button>
235
+ </form>
190
236
  ```
191
237
 
192
- ## 🌍 **Compatibilité**
238
+ ### Types de validation
193
239
 
194
- -**Vanilla JavaScript**
195
- - **React**
196
- - **Vue.js**
197
- - **Angular**
198
- - **Svelte**
199
- - ✅ **Tous les navigateurs modernes**
240
+ ####Champs qui seront validés
241
+ - `<input type="email" name="quelconque">` (peu importe le name)
242
+ - `<input type="text" name="email">` (name contient "email")
243
+ - `<input type="text" name="user_email">` (name contient "email")
244
+ - `<input type="email" name="EMAIL_ADDRESS">` (les deux conditions)
200
245
 
201
- ## 📦 **Taille et performance**
246
+ #### Champs qui ne seront PAS validés
247
+ - `<input type="text" name="contact">` (ni type email, ni name avec "email")
248
+ - `<input type="tel" name="phone">` (ni type email, ni name avec "email")
249
+ - `<input type="text" name="message">` (ni type email, ni name avec "email")
202
250
 
203
- - 📊 **~5KB** minifié et gzippé
204
- - ⚡ **Chargement instantané**
205
- - 🔄 **Aucune dépendance**
206
- - 📱 **Mobile-friendly**
251
+ ### Types de validation
207
252
 
208
- ## 🔐 **Sécurité**
253
+ #### Emails valides
254
+ - user@domain.com
255
+ - test.email+tag@example.co.uk
256
+ - user123@sub.domain.org
209
257
 
210
- - 🔒 **Clés API masquées** dans les logs
211
- - 🛡️ **Validation côté client**
212
- - 🚫 **Pas de données sensibles** exposées
258
+ #### Emails invalides
259
+ - email@
260
+ - user.domain.com
261
+ - user@domain
213
262
 
214
- ## 📚 **Exemples complets**
263
+ ### Importance des names (noms de champs)
215
264
 
216
- ### **React**
217
- ```jsx
218
- import { InputDevSDK } from '@inputdev/sdk';
265
+ Les **names** sont cruciaux pour le fonctionnement d'InputDev :
219
266
 
220
- const dev = new InputDevSDK();
267
+ 1. **Validation** : Les names déterminent quels champs sont validés automatiquement
268
+ 2. **Stockage** : Les names deviennent les clés dans votre base de données
269
+ 3. **Identification** : Les names permettent d'identifier chaque champ de manière unique
221
270
 
222
- const handleSubmit = async (data) => {
223
- try {
224
- await dev.submit("votre-clé-api", data);
225
- alert("Message envoyé !");
226
- } catch (error) {
227
- console.error("Erreur:", error);
228
- }
229
- };
230
- ```
271
+ #### Bonnes pratiques pour les names
272
+ - ✅ Utilisez des names descriptifs : `name="email_utilisateur"`
273
+ - ✅ Utilisez des names simples : `name="telephone"`
274
+ - ✅ Soyez cohérent : `name="email"` et `name="confirmation_email"`
275
+ - Évitez les names vides ou manquants
276
+ - ❌ Évitez les caractères spéciaux : `name="email-utilisateur"` (préférer `_`)
231
277
 
232
- ### **Vanilla JS**
233
- ```html
234
- <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
235
- <script>
236
- const dev = new InputDevSDK();
237
-
238
- document.getElementById('myForm').addEventListener('submit', async (e) => {
239
- e.preventDefault();
240
-
241
- const data = {
242
- name: document.getElementById('name').value,
243
- email: document.getElementById('email').value
244
- };
245
-
246
- await dev.submit("votre-clé-api", "silence", data);
247
- });
248
- </script>
278
+ ### Styles appliqués automatiquement
279
+
280
+ ```css
281
+ .inputdev-email-error {
282
+ border: 2px solid #ef4444 !important;
283
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1) !important;
284
+ outline: none !important;
285
+ }
286
+
287
+ .inputdev-email-error-message {
288
+ color: #ef4444;
289
+ font-size: 12px;
290
+ margin-top: 4px;
291
+ display: block;
292
+ }
249
293
  ```
250
294
 
251
- ## 🤝 **Contribution**
295
+ > ⚠️ **Important** : Si un email est invalide, la soumission du formulaire est complètement bloquée. L'utilisateur doit corriger l'email avant de pouvoir envoyer le formulaire.
252
296
 
253
- Contributions bienvenues !
254
- - Fork le projet
255
- - Créez une branche (`git checkout -b feature/amazing-feature`)
256
- - Committez (`git commit -m 'Add amazing feature'`)
257
- - Push (`git push origin feature/amazing-feature`)
258
- - Ouvrez une Pull Request
297
+ > 💡 **Astuce** : La validation fonctionne en mode normal et en mode silence. En mode silence, seul le message sous le formulaire s'affiche (pas de logs console).
259
298
 
260
- ## 📄 **Licence**
299
+ ---
261
300
 
262
- MIT License - libre pour usage commercial et personnel
301
+ ## 📡 Événements
263
302
 
264
- ## 🔗 **Liens utiles**
303
+ Vous pouvez écouter les événements globaux pour personnaliser l'expérience utilisateur :
265
304
 
266
- - 📖 **Documentation complète** : [docs.inputdev.com](https://inputdev.pages.dev/documentation)
305
+ ```javascript
306
+ document.addEventListener("inputdev:success", (event) => {
307
+ console.log("Succès :", event.detail);
308
+ // Rediriger, afficher un message, etc.
309
+ });
267
310
 
311
+ document.addEventListener("inputdev:error", (event) => {
312
+ console.error("Erreur :", event.detail);
313
+ // Afficher une notification, logger l'erreur, etc.
314
+ });
315
+ ```
268
316
 
269
317
  ---
270
318
 
271
- **Made with ❤️ by InputDev Team**
319
+ ## 🔄 Comportement de Soumission (Important)
272
320
 
273
- ## API Reference
321
+ ### ⚠️ **Le SDK bloque temporairement le rechargement de la page**
274
322
 
275
- ### `dev.submit(apiKey, data)`
323
+ Le SDK InputDev utilise un comportement moderne de type SPA (Single Page Application) pour garantir une meilleure expérience utilisateur :
276
324
 
277
- Envoie les données du formulaire vers l'API InputDev.
325
+ #### 📋 **Ce qui se passe lors de la soumission**
278
326
 
279
- **Paramètres :**
280
- - `apiKey` (string): Votre clé API InputDev
281
- - `data` (object): Données du formulaire
327
+ 1. **`e.preventDefault()`** : Le rechargement automatique de la page est bloqué
328
+ 2. **Bouton désactivé** : Le bouton submit est désactivé pendant 3 secondes pour éviter les double-soumissions
329
+ 3. **Texte changé** : Le bouton affiche "Envoi en cours..." pendant le traitement
330
+ 4. **Requête asynchrone** : L'envoi se fait en AJAX sans rechargement
331
+ 5. **Gestion des résultats** : Succès ou erreur sont gérés via les événements
282
332
 
283
- **Retour :**
284
- - `Promise`: Résolution avec la réponse de l'API
333
+ #### ✅ **Avantages de ce comportement**
285
334
 
286
- **Exemple :**
287
- ```javascript
288
- const data = {
289
- email: "contact@example.com",
290
- message: "Bonjour, j'aimerais en savoir plus...",
291
- telephone: "+33612345678",
292
- plan: "free"
293
- };
294
-
295
- dev.submit("grts_VotreCleApiDeCeSite", data)
296
- .then(response => {
297
- console.log('Formulaire soumis:', response);
298
- })
299
- .catch(error => {
300
- console.error('Erreur:', error.message);
301
- });
302
- ```
335
+ - 🔄 **Évite les soumissions multiples** - Protection contre les doubles clics
336
+ - 📱 **Meilleure UX** - Pas de rechargement brutal de la page
337
+ - 🔧 **Gestion d'erreur améliorée** - Messages d'erreur sans perdre le formulaire
338
+ - 📊 **Feedback visuel** - Indicateur de chargement clair
339
+ - 🎯 **Compatible SPA** - Fonctionne parfaitement avec React, Vue, Angular
303
340
 
304
- ## Événements personnalisés
341
+ > 💡 **Note** : Ce comportement est **intentionnel** et **professionnel**. Il garantit que vos utilisateurs ne perdent jamais leurs données et offre une expérience moderne et fluide.
305
342
 
306
- Le SDK émet des événements que vous pouvez écouter :
343
+ ---
307
344
 
308
- ```javascript
309
- // Succès de la soumission
310
- document.addEventListener('inputdev:success', (event) => {
311
- const { form, response } = event.detail;
312
- console.log('Formulaire envoyé avec succès:', response);
313
- });
345
+ ## � Codes d'erreur
314
346
 
315
- // Erreur de soumission
316
- document.addEventListener('inputdev:error', (event) => {
317
- const { form, error } = event.detail;
318
- console.error('Erreur lors de l\'envoi:', error);
319
- });
320
- ```
347
+ | Code | Signification | Solution |
348
+ |------|---------------|----------|
349
+ | `API_001` | Clé API invalide | Vérifiez votre clé |
350
+ | `DOM_001` | Domaine non autorisé | Ajoutez le domaine autorisé |
351
+ | `QUO_001` | Quota dépassé | Passez à un plan supérieur |
352
+ | `NET_001` | Erreur réseau | Vérifiez la connexion |
353
+ | `VAL_001` | Validation échouée | Vérifiez les champs |
321
354
 
322
- ## Codes d'erreur
355
+ ---
323
356
 
324
- | Code | Message | Description |
325
- |------|---------|-------------|
326
- | API_001 | Clé API invalide | La clé API n'existe pas ou est mal formatée |
327
- | API_003 | Clé API désactivée | La clé API a été désactivée |
328
- | DOM_001 | Domaine non autorisé | Le domaine n'est pas autorisé pour cette clé |
329
- | QUO_001 | Quota de soumissions épuisé | Vous avez atteint votre limite de soumissions |
330
- | STO_001 | Quota de stockage épuisé | Vous avez atteint votre limite de stockage |
331
- | SRV_001 | Erreur serveur | Erreur interne du serveur |
332
- | SRV_004 | Trop de requêtes | Rate limit dépassé (10 req/min par clé) |
357
+ ## 🔐 Sécurité
333
358
 
334
- ## Configuration
359
+ - **Requêtes envoyées en HTTPS** - Chiffrement de bout en bout
360
+ - **Validation côté client et serveur** - Double couche de sécurité
361
+ - **Domaine autorisé configurable** - Protection contre l'usage non autorisé
362
+ - **Anti-spam intégré** - Protection automatique
335
363
 
336
- ### Configuration actuelle
364
+ > ℹ️ **Sécurité** : La clé API est publique et conçue pour rester dans le frontend. Elle est sécurisée par validation de domaine et quotas automatiques.
337
365
 
338
- Le SDK utilise une configuration de production optimisée :
366
+ ---
339
367
 
340
- ```javascript
341
- // Voir la configuration actuelle (lecture seule)
342
- console.log(dev.getConfig());
368
+ ## � Mode Silence
369
+
370
+ Pour désactiver les logs en production :
371
+
372
+ ```html
373
+ <form data-inputdev-silence="grts_VotreCleApiDeCeSite">
343
374
  ```
344
375
 
376
+ ---
377
+
378
+ ## 📊 Limites
379
+
380
+ - **Nombre de soumissions par mois** - Dépend du plan choisi
381
+ - **Nombre maximum de formulaires** - Variable selon le plan
382
+ - **Nombre de sites/clés actives** - Une clé, un site
383
+ - **SSL obligatoire** - HTTPS requis pour la sécurité
384
+ - **Domaines autorisés** - Configurable par clé
385
+
386
+ ---
387
+
388
+ ## ⭐ Bonnes pratiques
389
+
390
+ - ✅ Toujours utiliser HTTPS
391
+ - ✅ Toujours définir des champs name
392
+ - ✅ Toujours gérer les événements erreur
393
+ - ✅ Surveiller votre quota
394
+ - ✅ Tester en environnement de développement
345
395
 
346
- **Note :** La configuration est optimisée pour la production et n'est pas modifiable pour garantir la sécurité et la stabilité.
396
+ ---
347
397
 
348
- ## Exemples pratiques
398
+ ## 📋 Exemple complet réel
349
399
 
350
- ### Formulaire de contact
351
400
  ```html
352
- <form data-inputdev="grts_VotreCleApi">
353
- <div>
354
- <label for="name">Nom:</label>
401
+ <!DOCTYPE html>
402
+ <html>
403
+ <head>
404
+ <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
405
+ </head>
406
+ <body>
407
+
408
+ <form data-inputdev="grts_VotreCleApiDeCeSite">
409
+ <div class="form-group">
410
+ <label for="name">Nom complet</label>
355
411
  <input type="text" id="name" name="name" required>
356
412
  </div>
357
413
 
358
- <div>
359
- <label for="email">Email:</label>
414
+ <div class="form-group">
415
+ <label for="email">Email</label>
360
416
  <input type="email" id="email" name="email" required>
361
417
  </div>
362
418
 
363
- <div>
364
- <label for="subject">Sujet:</label>
365
- <input type="text" id="subject" name="subject">
366
- </div>
367
-
368
- <div>
369
- <label for="message">Message:</label>
419
+ <div class="form-group">
420
+ <label for="message">Message</label>
370
421
  <textarea id="message" name="message" required></textarea>
371
422
  </div>
372
423
 
373
424
  <button type="submit">Envoyer</button>
374
425
  </form>
375
426
 
376
- <script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
427
+ <script>
428
+ // Écouter les événements pour une meilleure UX
429
+ document.addEventListener('inputdev:success', (event) => {
430
+ alert('Message envoyé avec succès !');
431
+ // Réinitialiser le formulaire
432
+ document.querySelector('form').reset();
433
+ });
434
+
435
+ document.addEventListener('inputdev:error', (event) => {
436
+ console.error('Erreur lors de l\'envoi :', event.detail);
437
+ alert('Une erreur est survenue. Veuillez réessayer.');
438
+ });
439
+ </script>
440
+
441
+ </body>
442
+ </html>
377
443
  ```
378
444
 
379
- ### Formulaire avec validation personnalisée
380
- ```javascript
381
- document.addEventListener('inputdev:success', (event) => {
382
- // Rediriger après succès
383
- window.location.href = '/merci.html';
384
- });
445
+ ---
385
446
 
386
- document.addEventListener('inputdev:error', (event) => {
387
- // Afficher une notification personnalisée
388
- showNotification('Erreur: ' + event.detail.error.message, 'error');
389
- });
390
- ```
447
+ ## Support & Liens
391
448
 
392
- ### Intégration React
393
- ```jsx
394
- import { InputDevSDK } from "@inputdev/sdk";
449
+ - 📖 **Documentation Complète** : [docs.inputdev.dev](https://inputdev.pages.dev/documentation)
450
+ - 💬 **Discord** : [Rejoindre la communauté]
451
+ - 🐛 **Issues** : [Signaler un bug]
395
452
 
396
- function ContactForm() {
397
- const [formData, setFormData] = useState({
398
- email: '',
399
- message: ''
400
- });
401
- const [loading, setLoading] = useState(false);
402
- const dev = new InputDevSDK();
403
-
404
- const handleSubmit = async (e) => {
405
- e.preventDefault();
406
- setLoading(true);
407
-
408
- try {
409
- await dev.submit("grts_VotreCleApi", formData);
410
- alert('Message envoyé avec succès!');
411
- setFormData({ email: '', message: '' });
412
- } catch (error) {
413
- alert('Erreur: ' + error.message);
414
- } finally {
415
- setLoading(false);
416
- }
417
- };
418
-
419
- return (
420
- <form onSubmit={handleSubmit}>
421
- <input
422
- type="email"
423
- value={formData.email}
424
- onChange={(e) => setFormData({...formData, email: e.target.value})}
425
- placeholder="Votre email"
426
- required
427
- />
428
- <textarea
429
- value={formData.message}
430
- onChange={(e) => setFormData({...formData, message: e.target.value})}
431
- placeholder="Votre message"
432
- required
433
- />
434
- <button type="submit" disabled={loading}>
435
- {loading ? 'Envoi...' : 'Envoyer'}
436
- </button>
437
- </form>
438
- );
439
- }
440
- ```
441
453
 
442
- ## Support
454
+ ---
455
+
456
+ ## 📄 Licence
443
457
 
444
- - 📖 Documentation complète : [docs.inputdev.dev](https://docs.inputdev.dev)
445
- - 🐛 Rapports de bugs : [GitHub Issues](https://github.com/inputdev/sdk/issues)
446
- - 💬 Communauté : [Discord](https://discord.gg/inputdev)
458
+ MIT License - voir le fichier [LICENSE](LICENSE) pour plus de détails.
447
459
 
448
- ## Licence
460
+ ---
449
461
 
450
- MIT License - voir le fichier LICENSE pour les détails.
462
+ <p align="center">Made with ❤️ by <b>InputDev Team</b></p>