@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.
- package/README.md +109 -29
- 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
|