@frenchbaas/js 0.2.1 → 0.2.3

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
@@ -14,56 +14,110 @@ npm install @frenchbaas/js
14
14
  import { FrenchBaas } from '@frenchbaas/js'
15
15
 
16
16
  const client = new FrenchBaas({
17
- url: 'https://app.frenchbaas.com',
18
- apiKey: 'votre-clé-api',
17
+ url: 'https://api.frenchbaas.fr',
18
+ apiKey: 'votre-clé-api', // trouvée dans Dashboard → Projet
19
19
  })
20
20
  ```
21
21
 
22
+ ---
23
+
22
24
  ## Auth
23
25
 
24
26
  ```js
25
27
  // Inscription
26
- const { user } = await client.auth.signUp({ email: 'a@b.com', password: 'secret' })
28
+ const { user, access_token } = await client.auth.signUp({ email: 'a@b.com', password: 'secret' })
27
29
 
28
30
  // Connexion
29
- const { user } = await client.auth.login({ email: 'a@b.com', password: 'secret' })
31
+ const { user, access_token } = await client.auth.login({ email: 'a@b.com', password: 'secret' })
30
32
 
31
33
  // Déconnexion
32
34
  await client.auth.logout()
33
35
 
34
- // État
36
+ // État de la session
35
37
  client.auth.getUser() // { id, email } | null
36
38
  client.auth.isLoggedIn() // boolean
37
39
  ```
38
40
 
39
- ## Collections (documents)
41
+ ---
42
+
43
+ ## Collections & documents
40
44
 
41
45
  ```js
42
- const col = client.collection('collection-uuid')
46
+ const col = client.collection('uuid-de-la-collection')
43
47
 
44
- // Lire (paginé)
48
+ // Lister (paginé, max 100 par page)
45
49
  const { data, meta } = await col.get({ page: 1, perPage: 20 })
50
+ // meta → { total, page, per_page, total_pages }
46
51
 
47
- // Récupérer un document par son ID
48
- const doc = await col.getById('doc-id')
52
+ // Récupérer un document par ID
53
+ const doc = await col.getById('doc-uuid')
54
+ // doc → { id, data, created_at, updated_at }
49
55
 
50
- // Créer
56
+ // Créer un document
51
57
  const doc = await col.create({ title: 'Hello', published: true })
52
58
 
53
- // Mettre à jour
54
- const doc = await col.update('doc-id', { title: 'Modifié' })
59
+ // Mettre à jour (merge partiel — seuls les champs fournis changent)
60
+ const doc = await col.update('doc-uuid', { title: 'Modifié' })
55
61
 
56
62
  // Supprimer
57
- await col.delete('doc-id')
63
+ await col.delete('doc-uuid')
64
+
65
+ // Schéma de la collection (noms de champs, types, visibilité)
66
+ const { schema } = await col.schema()
67
+ ```
68
+
69
+ ### Visibilité des collections
70
+
71
+ | Visibilité | Lecture | Écriture |
72
+ |------------|---------|---------|
73
+ | `public` | Sans token | Token requis |
74
+ | `authenticated` | Token requis | Token requis |
75
+ | `private` | Créateur uniquement | Créateur uniquement |
76
+
77
+ ---
78
+
79
+ ## Webhooks
80
+
81
+ Si une collection a un `before_create_url` ou `before_update_url` configuré,
82
+ FrenchBaas appelle votre endpoint **avant chaque écriture en base**.
83
+ Votre serveur peut valider, enrichir ou rejeter les données.
84
+
85
+ Un rejet lève automatiquement une `ValidationError` côté SDK avec le message
86
+ renvoyé par votre webhook.
87
+
88
+ ```js
89
+ import { ValidationError } from '@frenchbaas/js'
90
+
91
+ try {
92
+ await client.collection('col-uuid').create({ montant: 150 })
93
+ } catch (e) {
94
+ if (e instanceof ValidationError) {
95
+ // e.message contient le message renvoyé par votre webhook
96
+ // ex : "Stock insuffisant", "Utilisateur banni", etc.
97
+ console.error('Rejeté par le webhook :', e.message)
98
+ }
99
+ }
58
100
 
59
- // Schéma de la collection
60
- const schema = await col.schema()
101
+ // Même comportement pour update()
102
+ try {
103
+ await client.collection('col-uuid').update('doc-uuid', { montant: 200 })
104
+ } catch (e) {
105
+ if (e instanceof ValidationError) {
106
+ console.error('Mise à jour refusée :', e.message)
107
+ }
108
+ }
61
109
  ```
62
110
 
111
+ > La configuration des webhooks (URL, secret HMAC) se fait dans le Dashboard
112
+ > ou via l'API REST. Voir la [documentation webhooks](https://frenchbaas.fr/documentation.html#webhooks).
113
+
114
+ ---
115
+
63
116
  ## Gestion des erreurs
64
117
 
65
118
  ```ts
66
119
  import {
120
+ FrenchBaasError,
67
121
  AuthError,
68
122
  ValidationError,
69
123
  NotFoundError,
@@ -74,29 +128,54 @@ import {
74
128
  } from '@frenchbaas/js'
75
129
 
76
130
  try {
77
- await client.collection('col-id').create({ title: 'Test' })
131
+ await client.collection('col-uuid').create({ title: 'Test' })
78
132
  } catch (e) {
79
- if (e instanceof AuthError) console.error('Non connecté ou session expirée')
80
- if (e instanceof ValidationError) console.error('Données invalides', e.errors)
81
- if (e instanceof NotFoundError) console.error('Introuvable')
82
- if (e instanceof QuotaError) console.error('Quota dépassé')
83
- if (e instanceof RateLimitError) console.error('Trop de requêtes, réessayez dans quelques instants')
84
- if (e instanceof NetworkError) console.error('Hors ligne')
85
- if (e instanceof ServerError) console.error('Erreur interne du serveur')
133
+ if (e instanceof ValidationError) {
134
+ // Données invalides (schéma) OU rejet par webhook
135
+ // e.errors string[] (erreurs de schéma)
136
+ // e.message message du webhook si rejet webhook (e.errors sera vide)
137
+ console.error(e.message, e.errors)
138
+ }
139
+ else if (e instanceof AuthError) console.error('Non connecté ou session expirée')
140
+ else if (e instanceof NotFoundError) console.error('Document ou collection introuvable')
141
+ else if (e instanceof QuotaError) console.error('Quota dépassé :', e.message)
142
+ else if (e instanceof RateLimitError) console.error('Trop de requêtes, réessayez dans quelques instants')
143
+ else if (e instanceof NetworkError) console.error('Impossible de joindre le serveur')
144
+ else if (e instanceof ServerError) console.error('Erreur interne du serveur')
145
+ else if (e instanceof FrenchBaasError) console.error('Erreur FrenchBaas :', e.message)
86
146
  }
87
147
  ```
88
148
 
149
+ Toutes les erreurs héritent de `FrenchBaasError` et exposent :
150
+ - `e.message` — description lisible
151
+ - `e.status` — code HTTP (401, 404, 422, 429, 5xx…)
152
+
153
+ `ValidationError` expose en plus :
154
+ - `e.errors` — tableau de messages de validation (vide si rejet webhook)
155
+
156
+ ---
157
+
89
158
  ## Options
90
159
 
91
160
  ```js
92
- // Persister la session dans localStorage (rechargement de page)
93
161
  const client = new FrenchBaas({
94
- url: 'https://app.frenchbaas.com',
162
+ url: 'https://api.frenchbaas.fr',
95
163
  apiKey: 'votre-clé-api',
96
- storage: 'localStorage', // défaut : 'memory'
164
+ storage: 'localStorage', // 'memory' (défaut) | 'localStorage'
97
165
  })
98
166
  ```
99
167
 
168
+ | Option | Type | Défaut | Description |
169
+ |--------|------|--------|-------------|
170
+ | `url` | `string` | — | URL de votre instance FrenchBaas |
171
+ | `apiKey` | `string` | — | Clé API du projet (Dashboard → Projet) |
172
+ | `storage` | `'memory'` \| `'localStorage'` | `'memory'` | Persistance de la session |
173
+
174
+ Utilisez `localStorage` pour que la session survive au rechargement de page
175
+ (applications web). Utilisez `memory` pour les environnements serveur (Node.js).
176
+
177
+ ---
178
+
100
179
  ## Fonctionnalités automatiques
101
180
 
102
181
  - **Refresh token transparent** — access token rafraîchi automatiquement avant expiration
@@ -104,9 +183,10 @@ const client = new FrenchBaas({
104
183
  - **Déduplication** — plusieurs requêtes simultanées ne déclenchent qu'un seul refresh
105
184
  - **Erreurs typées** — chaque erreur HTTP a sa classe TypeScript dédiée
106
185
  - **Zero dépendance** — aucune dépendance runtime
107
- - **TypeScript** — types inclus
186
+ - **TypeScript natif** — types `.d.ts` inclus, autocomplétion complète
187
+
188
+ ---
108
189
 
109
190
  ## License
110
191
 
111
192
  MIT
112
- # frenchbaas-js
package/dist/index.cjs CHANGED
@@ -235,6 +235,10 @@ var CollectionClient = class {
235
235
  * Crée un nouveau document dans la collection.
236
236
  * Les champs sont validés contre le schéma côté serveur.
237
237
  *
238
+ * Si un `before_create_url` est configuré sur la collection, FrenchBaas appelle
239
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
240
+ * avec le message retourné par votre webhook (ex : "Stock insuffisant").
241
+ *
238
242
  * @param data Données du document (doit respecter le schéma de la collection)
239
243
  */
240
244
  async create(data) {
@@ -248,6 +252,10 @@ var CollectionClient = class {
248
252
  * Met à jour partiellement un document (merge).
249
253
  * Seuls les champs fournis sont mis à jour, les autres restent inchangés.
250
254
  *
255
+ * Si un `before_update_url` est configuré sur la collection, FrenchBaas appelle
256
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
257
+ * avec le message retourné par votre webhook (ex : "Modification refusée").
258
+ *
251
259
  * - Collection private : seul le créateur peut modifier.
252
260
  * - Collection authenticated/public : tout utilisateur authentifié peut modifier.
253
261
  *
package/dist/index.d.mts CHANGED
@@ -229,6 +229,10 @@ declare class CollectionClient<T = Record<string, unknown>> {
229
229
  * Crée un nouveau document dans la collection.
230
230
  * Les champs sont validés contre le schéma côté serveur.
231
231
  *
232
+ * Si un `before_create_url` est configuré sur la collection, FrenchBaas appelle
233
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
234
+ * avec le message retourné par votre webhook (ex : "Stock insuffisant").
235
+ *
232
236
  * @param data Données du document (doit respecter le schéma de la collection)
233
237
  */
234
238
  create(data: Partial<T>): Promise<Document<T>>;
@@ -236,6 +240,10 @@ declare class CollectionClient<T = Record<string, unknown>> {
236
240
  * Met à jour partiellement un document (merge).
237
241
  * Seuls les champs fournis sont mis à jour, les autres restent inchangés.
238
242
  *
243
+ * Si un `before_update_url` est configuré sur la collection, FrenchBaas appelle
244
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
245
+ * avec le message retourné par votre webhook (ex : "Modification refusée").
246
+ *
239
247
  * - Collection private : seul le créateur peut modifier.
240
248
  * - Collection authenticated/public : tout utilisateur authentifié peut modifier.
241
249
  *
@@ -328,7 +336,11 @@ declare class NetworkError extends FrenchBaasError {
328
336
  }
329
337
  /**
330
338
  * Erreur de validation.
331
- * Levée sur : 400 (paramètres manquants), 413 (document trop grand), 422 (schéma invalide).
339
+ * Levée sur : 400 (paramètres manquants), 413 (document trop grand),
340
+ * 422 (schéma invalide, ou webhook before_create/before_update qui rejette la requête).
341
+ *
342
+ * Quand un webhook rejette, `message` contient le message renvoyé par votre endpoint
343
+ * (ex : "Stock insuffisant"). `errors` est vide dans ce cas.
332
344
  */
333
345
  declare class ValidationError extends FrenchBaasError {
334
346
  readonly errors: string[];
package/dist/index.d.ts CHANGED
@@ -229,6 +229,10 @@ declare class CollectionClient<T = Record<string, unknown>> {
229
229
  * Crée un nouveau document dans la collection.
230
230
  * Les champs sont validés contre le schéma côté serveur.
231
231
  *
232
+ * Si un `before_create_url` est configuré sur la collection, FrenchBaas appelle
233
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
234
+ * avec le message retourné par votre webhook (ex : "Stock insuffisant").
235
+ *
232
236
  * @param data Données du document (doit respecter le schéma de la collection)
233
237
  */
234
238
  create(data: Partial<T>): Promise<Document<T>>;
@@ -236,6 +240,10 @@ declare class CollectionClient<T = Record<string, unknown>> {
236
240
  * Met à jour partiellement un document (merge).
237
241
  * Seuls les champs fournis sont mis à jour, les autres restent inchangés.
238
242
  *
243
+ * Si un `before_update_url` est configuré sur la collection, FrenchBaas appelle
244
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
245
+ * avec le message retourné par votre webhook (ex : "Modification refusée").
246
+ *
239
247
  * - Collection private : seul le créateur peut modifier.
240
248
  * - Collection authenticated/public : tout utilisateur authentifié peut modifier.
241
249
  *
@@ -328,7 +336,11 @@ declare class NetworkError extends FrenchBaasError {
328
336
  }
329
337
  /**
330
338
  * Erreur de validation.
331
- * Levée sur : 400 (paramètres manquants), 413 (document trop grand), 422 (schéma invalide).
339
+ * Levée sur : 400 (paramètres manquants), 413 (document trop grand),
340
+ * 422 (schéma invalide, ou webhook before_create/before_update qui rejette la requête).
341
+ *
342
+ * Quand un webhook rejette, `message` contient le message renvoyé par votre endpoint
343
+ * (ex : "Stock insuffisant"). `errors` est vide dans ce cas.
332
344
  */
333
345
  declare class ValidationError extends FrenchBaasError {
334
346
  readonly errors: string[];
package/dist/index.js CHANGED
@@ -201,6 +201,10 @@ var CollectionClient = class {
201
201
  * Crée un nouveau document dans la collection.
202
202
  * Les champs sont validés contre le schéma côté serveur.
203
203
  *
204
+ * Si un `before_create_url` est configuré sur la collection, FrenchBaas appelle
205
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
206
+ * avec le message retourné par votre webhook (ex : "Stock insuffisant").
207
+ *
204
208
  * @param data Données du document (doit respecter le schéma de la collection)
205
209
  */
206
210
  async create(data) {
@@ -214,6 +218,10 @@ var CollectionClient = class {
214
218
  * Met à jour partiellement un document (merge).
215
219
  * Seuls les champs fournis sont mis à jour, les autres restent inchangés.
216
220
  *
221
+ * Si un `before_update_url` est configuré sur la collection, FrenchBaas appelle
222
+ * votre endpoint avant d'écrire en base. Un rejet lève une `ValidationError`
223
+ * avec le message retourné par votre webhook (ex : "Modification refusée").
224
+ *
217
225
  * - Collection private : seul le créateur peut modifier.
218
226
  * - Collection authenticated/public : tout utilisateur authentifié peut modifier.
219
227
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frenchbaas/js",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "SDK JavaScript officiel pour FrenchBaas",
5
5
  "author": "FrenchBaas",
6
6
  "license": "MIT",