@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 +109 -29
- package/dist/index.cjs +8 -0
- package/dist/index.d.mts +13 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +8 -0
- 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://
|
|
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
|
-
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Collections & documents
|
|
40
44
|
|
|
41
45
|
```js
|
|
42
|
-
const col = client.collection('collection
|
|
46
|
+
const col = client.collection('uuid-de-la-collection')
|
|
43
47
|
|
|
44
|
-
//
|
|
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
|
|
48
|
-
const doc = await col.getById('doc-
|
|
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-
|
|
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-
|
|
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
|
-
//
|
|
60
|
-
|
|
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-
|
|
131
|
+
await client.collection('col-uuid').create({ title: 'Test' })
|
|
78
132
|
} catch (e) {
|
|
79
|
-
if (e instanceof
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (e instanceof
|
|
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://
|
|
162
|
+
url: 'https://api.frenchbaas.fr',
|
|
95
163
|
apiKey: 'votre-clé-api',
|
|
96
|
-
storage: 'localStorage', // défaut
|
|
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),
|
|
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),
|
|
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
|
*
|