@frenchbaas/js 0.2.2 → 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.
Files changed (2) hide show
  1. package/README.md +109 -29
  2. package/package.json +1 -1
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frenchbaas/js",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "SDK JavaScript officiel pour FrenchBaas",
5
5
  "author": "FrenchBaas",
6
6
  "license": "MIT",