@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 +340 -328
- package/inputdev-sdk.min.js +1 -0
- package/inputdev-sdk.prod.js +1 -495
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -1,450 +1,462 @@
|
|
|
1
|
-
# InputDev SDK
|
|
1
|
+
# InputDev SDK Documentation �
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Le backend de formulaires le plus simple et professionnel pour les développeurs modernes.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://inputdev.dev)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://inputdev.pages.dev/documentation)
|
|
6
8
|
|
|
7
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
66
|
+
### Étape 2 — Ajouter votre clé API
|
|
33
67
|
|
|
34
|
-
### **1. Formulaire automatique**
|
|
35
68
|
```html
|
|
36
|
-
<form data-inputdev="
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
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
|
-
|
|
61
|
-
```
|
|
62
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
111
|
+
### Via NPM
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm install @inputdev/sdk
|
|
115
|
+
import InputDev from "@inputdev/sdk";
|
|
69
116
|
```
|
|
70
117
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
103
|
-
Messages d'aide contextuels pour les erreurs courantes :
|
|
143
|
+
## 🚀 SDK JavaScript Avancé
|
|
104
144
|
|
|
105
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
147
|
+
```html
|
|
148
|
+
<form id="contact-form">
|
|
149
|
+
<!-- ... vos champs ici ... -->
|
|
150
|
+
<button type="button" onclick="submitFormulaire()">Envoyer</button>
|
|
151
|
+
</form>
|
|
112
152
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
169
|
+
### Avantages du SDK avancé
|
|
119
170
|
|
|
120
|
-
|
|
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
|
-
|
|
123
|
-
```javascript
|
|
124
|
-
const dev = new InputDevSDK();
|
|
125
|
-
// Par défaut : logs activés, messages activés
|
|
126
|
-
```
|
|
176
|
+
---
|
|
127
177
|
|
|
128
|
-
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
await dev.submit("votre-clé-api", "silence", data);
|
|
141
|
-
```
|
|
182
|
+
### Comment ça fonctionne ?
|
|
142
183
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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
|
-
|
|
154
|
-
dev.disableLogs();
|
|
190
|
+
#### Messages dans la console (pour le débogage)
|
|
155
191
|
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
161
|
-
```javascript
|
|
162
|
-
// Désactiver les notifications visuelles
|
|
163
|
-
dev.disableMessages();
|
|
199
|
+
#### Messages sous le formulaire (pour l'expérience utilisateur)
|
|
164
200
|
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
###
|
|
208
|
+
### Processus de validation
|
|
170
209
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
238
|
+
### Types de validation
|
|
193
239
|
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
204
|
-
- ⚡ **Chargement instantané**
|
|
205
|
-
- 🔄 **Aucune dépendance**
|
|
206
|
-
- 📱 **Mobile-friendly**
|
|
251
|
+
### Types de validation
|
|
207
252
|
|
|
208
|
-
|
|
253
|
+
#### ✅ Emails valides
|
|
254
|
+
- user@domain.com
|
|
255
|
+
- test.email+tag@example.co.uk
|
|
256
|
+
- user123@sub.domain.org
|
|
209
257
|
|
|
210
|
-
|
|
211
|
-
-
|
|
212
|
-
-
|
|
258
|
+
#### ❌ Emails invalides
|
|
259
|
+
- email@
|
|
260
|
+
- user.domain.com
|
|
261
|
+
- user@domain
|
|
213
262
|
|
|
214
|
-
|
|
263
|
+
### Importance des names (noms de champs)
|
|
215
264
|
|
|
216
|
-
|
|
217
|
-
```jsx
|
|
218
|
-
import { InputDevSDK } from '@inputdev/sdk';
|
|
265
|
+
Les **names** sont cruciaux pour le fonctionnement d'InputDev :
|
|
219
266
|
|
|
220
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
-
###
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
299
|
+
---
|
|
261
300
|
|
|
262
|
-
|
|
301
|
+
## 📡 Événements
|
|
263
302
|
|
|
264
|
-
|
|
303
|
+
Vous pouvez écouter les événements globaux pour personnaliser l'expérience utilisateur :
|
|
265
304
|
|
|
266
|
-
|
|
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
|
-
|
|
319
|
+
## 🔄 Comportement de Soumission (Important)
|
|
272
320
|
|
|
273
|
-
|
|
321
|
+
### ⚠️ **Le SDK bloque temporairement le rechargement de la page**
|
|
274
322
|
|
|
275
|
-
|
|
323
|
+
Le SDK InputDev utilise un comportement moderne de type SPA (Single Page Application) pour garantir une meilleure expérience utilisateur :
|
|
276
324
|
|
|
277
|
-
|
|
325
|
+
#### 📋 **Ce qui se passe lors de la soumission**
|
|
278
326
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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
|
-
**
|
|
284
|
-
- `Promise`: Résolution avec la réponse de l'API
|
|
333
|
+
#### ✅ **Avantages de ce comportement**
|
|
285
334
|
|
|
286
|
-
**
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
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
|
-
|
|
343
|
+
---
|
|
307
344
|
|
|
308
|
-
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
355
|
+
---
|
|
323
356
|
|
|
324
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
366
|
+
---
|
|
339
367
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
396
|
+
---
|
|
347
397
|
|
|
348
|
-
##
|
|
398
|
+
## 📋 Exemple complet réel
|
|
349
399
|
|
|
350
|
-
### Formulaire de contact
|
|
351
400
|
```html
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
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
|
|
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="
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
387
|
-
// Afficher une notification personnalisée
|
|
388
|
-
showNotification('Erreur: ' + event.detail.error.message, 'error');
|
|
389
|
-
});
|
|
390
|
-
```
|
|
447
|
+
## � Support & Liens
|
|
391
448
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|
-
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## 📄 Licence
|
|
443
457
|
|
|
444
|
-
-
|
|
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
|
-
|
|
460
|
+
---
|
|
449
461
|
|
|
450
|
-
|
|
462
|
+
<p align="center">Made with ❤️ by <b>InputDev Team</b></p>
|