@fraza/core 0.3.7 → 0.3.10
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/CHANGELOG.md +22 -0
- package/README.md +4 -0
- package/THIRD-PARTY-NOTICES.md +2 -2
- package/changelog.json +61 -0
- package/dist/docs/00-decouverte/01-qu-est-ce-que-fraza.md +1 -1
- package/dist/docs/01-demarrage/01-installation.md +9 -15
- package/dist/docs/01-demarrage/02-tour-du-proprietaire.md +1 -1
- package/dist/docs/01-demarrage/03-configuration.md +1 -1
- package/dist/docs/02-guides/accepter-des-paiements.md +1 -1
- package/dist/docs/02-guides/basculer-sur-le-registre-de-secours.md +3 -3
- package/dist/docs/02-guides/blocs-personnalises.md +1 -1
- package/dist/docs/02-guides/gerer-les-medias.md +1 -1
- package/dist/docs/02-guides/index.md +1 -1
- package/dist/docs/02-guides/seo-et-metadonnees.md +1 -1
- package/dist/docs/03-reference/01-cores/templates.md +3 -3
- package/dist/docs/03-reference/03-registres/media-registry.md +4 -4
- package/dist/docs/03-reference/05-cli/fraza-key.md +1 -1
- package/dist/docs/03-reference/06-configuration/paquets-supportes.md +1 -1
- package/dist/docs/03-reference/06-configuration/variables-d-environnement.md +2 -2
- package/dist/docs/04-architecture/02-frontieres-serveur-client.md +1 -1
- package/dist/docs/04-architecture/05-securite.md +1 -1
- package/dist/docs/04-architecture/07-licence-et-propriete.md +1 -1
- package/dist/docs/05-contribution/03-redaction.md +10 -0
- package/dist/docs/05-contribution/05-publication.md +0 -1
- package/dist/docs/06-modules/booking/{installation.md → 01-installation.md} +35 -20
- package/dist/docs/06-modules/booking/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/booking/{admin.md → 03-admin.md} +3 -3
- package/dist/docs/06-modules/booking/{reservation-en-ligne.md → 04-reservation-en-ligne.md} +2 -2
- package/dist/docs/06-modules/booking/{courriels.md → 05-courriels.md} +2 -2
- package/dist/docs/06-modules/booking/{modele-de-donnees.md → 06-modele-de-donnees.md} +1 -1
- package/dist/docs/06-modules/booking/{api.md → 07-api.md} +2 -2
- package/dist/docs/06-modules/booking/index.md +22 -12
- package/dist/docs/06-modules/drive/01-installation.md +92 -0
- package/dist/docs/06-modules/drive/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/drive/{admin.md → 03-admin.md} +8 -8
- package/dist/docs/06-modules/drive/{partages.md → 04-partages.md} +5 -5
- package/dist/docs/06-modules/drive/{fichiers.md → 05-fichiers.md} +4 -4
- package/dist/docs/06-modules/drive/{modele-de-donnees.md → 06-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/drive/{api.md → 07-api.md} +5 -5
- package/dist/docs/06-modules/drive/index.md +22 -12
- package/dist/docs/06-modules/facturation/{installation.md → 01-installation.md} +61 -39
- package/dist/docs/06-modules/facturation/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/facturation/{facturation.md → 03-facturation.md} +4 -4
- package/dist/docs/06-modules/facturation/{taxes.md → 04-taxes.md} +2 -2
- package/dist/docs/06-modules/facturation/{paiements.md → 05-paiements.md} +3 -3
- package/dist/docs/06-modules/facturation/{recurrences-et-rappels.md → 06-recurrences-et-rappels.md} +4 -4
- package/dist/docs/06-modules/facturation/{courriels.md → 07-courriels.md} +5 -5
- package/dist/docs/06-modules/facturation/{modele-de-donnees.md → 08-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/facturation/{api.md → 09-api.md} +3 -3
- package/dist/docs/06-modules/facturation/index.md +26 -16
- package/dist/docs/06-modules/forms/{installation.md → 01-installation.md} +25 -30
- package/dist/docs/06-modules/forms/{configuration.md → 02-configuration.md} +4 -4
- package/dist/docs/06-modules/forms/{champs.md → 03-champs.md} +4 -4
- package/dist/docs/06-modules/forms/{admin.md → 04-admin.md} +9 -9
- package/dist/docs/06-modules/forms/{soumissions.md → 05-soumissions.md} +7 -7
- package/dist/docs/06-modules/forms/{affichage.md → 06-affichage.md} +3 -3
- package/dist/docs/06-modules/forms/{modele-de-donnees.md → 07-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/forms/{api.md → 08-api.md} +4 -4
- package/dist/docs/06-modules/forms/index.md +26 -14
- package/dist/docs/06-modules/index.md +2 -2
- package/dist/docs/06-modules/medias/{installation.md → 01-installation.md} +33 -36
- package/dist/docs/06-modules/medias/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/medias/{televersement.md → 03-televersement.md} +4 -4
- package/dist/docs/06-modules/medias/{admin.md → 04-admin.md} +7 -7
- package/dist/docs/06-modules/medias/{modele-de-donnees.md → 06-modele-de-donnees.md} +4 -4
- package/dist/docs/06-modules/medias/{api.md → 07-api.md} +6 -6
- package/dist/docs/06-modules/medias/index.md +25 -13
- package/dist/docs/06-modules/pages/{installation.md → 01-installation.md} +15 -17
- package/dist/docs/06-modules/pages/{configuration.md → 02-configuration.md} +1 -1
- package/dist/docs/06-modules/pages/{admin.md → 03-admin.md} +6 -6
- package/dist/docs/06-modules/pages/{modele-de-donnees.md → 04-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/pages/{templates.md → 05-templates.md} +1 -1
- package/dist/docs/06-modules/pages/{api.md → 06-api.md} +2 -2
- package/dist/docs/06-modules/pages/index.md +21 -9
- package/dist/docs/06-modules/posts/{installation.md → 01-installation.md} +28 -34
- package/dist/docs/06-modules/posts/{configuration.md → 02-configuration.md} +6 -6
- package/dist/docs/06-modules/posts/{types-et-champs.md → 03-types-et-champs.md} +11 -11
- package/dist/docs/06-modules/posts/{taxonomies-et-relations.md → 04-taxonomies-et-relations.md} +5 -5
- package/dist/docs/06-modules/posts/{admin.md → 05-admin.md} +13 -13
- package/dist/docs/06-modules/posts/{modele-de-donnees.md → 06-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/posts/{templates.md → 07-templates.md} +2 -2
- package/dist/docs/06-modules/posts/{api.md → 08-api.md} +3 -3
- package/dist/docs/06-modules/posts/index.md +25 -13
- package/dist/shared/lib/version.js +1 -1
- package/package.json +1 -1
- package/supported.json +1 -1
- package/dist/docs/06-modules/drive/installation.md +0 -69
- /package/dist/docs/06-modules/medias/{integration.md → 05-integration.md} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,28 @@ Historique des versions publiées de `@fraza/core`.
|
|
|
4
4
|
|
|
5
5
|
Ce fichier est généré par `fraza-module changelog` à partir des messages de commit. Ne pas le modifier à la main.
|
|
6
6
|
|
|
7
|
+
## 0.3.10 (2026-10-25)
|
|
8
|
+
|
|
9
|
+
### Autres
|
|
10
|
+
|
|
11
|
+
- Update dependencies, fix vulnerabilities (23dbec5)
|
|
12
|
+
|
|
13
|
+
## 0.3.9 (2026-10-25)
|
|
14
|
+
|
|
15
|
+
### Refontes
|
|
16
|
+
|
|
17
|
+
- **docs/06-modules** : reorganize module documentation into numbered files (9c93a28)
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
- reorder and update installation instructions (254c39d)
|
|
22
|
+
|
|
23
|
+
## 0.3.8 (2026-10-25)
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
- add start command in README (e5c953d)
|
|
28
|
+
|
|
7
29
|
## 0.3.7 (2026-10-25)
|
|
8
30
|
|
|
9
31
|
### Refontes
|
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Fraza branche dans un projet Next.js ordinaire les comptes, les rôles, une administration extensible, les courriels, les fichiers et les paiements. Conçu au Québec.
|
|
4
4
|
|
|
5
|
+
```sh
|
|
6
|
+
npx @fraza/start
|
|
7
|
+
```
|
|
8
|
+
|
|
5
9
|
[Documentation](https://docs.fraza.ca/docs) · [Installation](https://docs.fraza.ca/docs/demarrage/installation) · [Modules](https://docs.fraza.ca/docs/modules)
|
|
6
10
|
|
|
7
11
|
> [!WARNING]
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -19,7 +19,7 @@ Il est généré par `fraza-module notices` à partir de l'arbre réellement ins
|
|
|
19
19
|
|
|
20
20
|
| Paquet | Version | Licence |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| `@fraza/icons` | 0.3.
|
|
22
|
+
| `@fraza/icons` | 0.3.16 | MIT |
|
|
23
23
|
| `node-cron` | 4.2.1 | ISC |
|
|
24
24
|
| `pg` | 8.20.0 | MIT |
|
|
25
25
|
| `pg-cloudflare` | 1.3.0 | MIT |
|
|
@@ -146,7 +146,7 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
|
146
146
|
|
|
147
147
|
## Textes de licence
|
|
148
148
|
|
|
149
|
-
### @fraza/icons@0.3.
|
|
149
|
+
### @fraza/icons@0.3.16
|
|
150
150
|
|
|
151
151
|
Licence : MIT
|
|
152
152
|
|
package/changelog.json
CHANGED
|
@@ -1,6 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fraza/core",
|
|
3
3
|
"versions": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.3.10",
|
|
6
|
+
"date": "2026-10-25",
|
|
7
|
+
"breaking": [],
|
|
8
|
+
"envAdded": [],
|
|
9
|
+
"envRemoved": [],
|
|
10
|
+
"templateChanged": [],
|
|
11
|
+
"action": [],
|
|
12
|
+
"entries": [
|
|
13
|
+
{
|
|
14
|
+
"type": "Chore",
|
|
15
|
+
"scope": null,
|
|
16
|
+
"subject": "Update dependencies, fix vulnerabilities",
|
|
17
|
+
"hash": "23dbec5",
|
|
18
|
+
"breaking": false
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"version": "0.3.9",
|
|
24
|
+
"date": "2026-10-25",
|
|
25
|
+
"breaking": [],
|
|
26
|
+
"envAdded": [],
|
|
27
|
+
"envRemoved": [],
|
|
28
|
+
"templateChanged": [],
|
|
29
|
+
"action": [],
|
|
30
|
+
"entries": [
|
|
31
|
+
{
|
|
32
|
+
"type": "docs",
|
|
33
|
+
"scope": null,
|
|
34
|
+
"subject": "reorder and update installation instructions",
|
|
35
|
+
"hash": "254c39d",
|
|
36
|
+
"breaking": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "refactor",
|
|
40
|
+
"scope": "docs/06-modules",
|
|
41
|
+
"subject": "reorganize module documentation into numbered files",
|
|
42
|
+
"hash": "9c93a28",
|
|
43
|
+
"breaking": false
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"version": "0.3.8",
|
|
49
|
+
"date": "2026-10-25",
|
|
50
|
+
"breaking": [],
|
|
51
|
+
"envAdded": [],
|
|
52
|
+
"envRemoved": [],
|
|
53
|
+
"templateChanged": [],
|
|
54
|
+
"action": [],
|
|
55
|
+
"entries": [
|
|
56
|
+
{
|
|
57
|
+
"type": "docs",
|
|
58
|
+
"scope": null,
|
|
59
|
+
"subject": "add start command in README",
|
|
60
|
+
"hash": "e5c953d",
|
|
61
|
+
"breaking": false
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
4
65
|
{
|
|
5
66
|
"version": "0.3.7",
|
|
6
67
|
"date": "2026-10-25",
|
|
@@ -69,7 +69,7 @@ Le core et les modules gratuits, publiés sous `@fraza/`, relèvent de la licenc
|
|
|
69
69
|
|
|
70
70
|
## L'accès
|
|
71
71
|
|
|
72
|
-
Le core, `@fraza/start` et les modules gratuits, sous le scope `@fraza`, sont publiés sur npmjs et s'installent sans compte ni configuration.
|
|
72
|
+
Le core, `@fraza/start` et les modules gratuits, sous le scope `@fraza`, sont publiés sur npmjs et s'installent sans compte ni configuration. Les modules Pro vivent sous le scope `@fraza-pro`, sur le registre `https://registry.fraza.ca/`, qui ne les sert qu'avec les identifiants délivrés avec la licence. L'accès est décrit dans [Installation](../01-demarrage/01-installation.md).
|
|
73
73
|
|
|
74
74
|
## Étape suivante
|
|
75
75
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Installation
|
|
3
|
-
description:
|
|
3
|
+
description: Générer un projet avec npx @fraza/start, configurer l'environnement et initialiser la base.
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
@@ -8,7 +8,7 @@ related:
|
|
|
8
8
|
- 01-demarrage/03-configuration
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Un projet Fraza se génère par une seule commande.
|
|
11
|
+
Un projet Fraza se génère par une seule commande. Le core, `@fraza/start` et les modules gratuits viennent de npmjs, le registre par défaut de npm : il n'y a rien à configurer ni de compte à créer. Cette page couvre la génération et le premier démarrage.
|
|
12
12
|
|
|
13
13
|
## Prérequis
|
|
14
14
|
|
|
@@ -17,13 +17,7 @@ Un projet Fraza se génère par une seule commande. Cette page couvre l'accès a
|
|
|
17
17
|
- Un compte sur le registre `https://registry.fraza.ca/`, seulement pour les modules Pro.
|
|
18
18
|
- Un terminal bash, zsh ou PowerShell. Sous Windows, les commandes de cette documentation sont écrites pour PowerShell, pas pour l'invite `cmd.exe`.
|
|
19
19
|
|
|
20
|
-
## 1.
|
|
21
|
-
|
|
22
|
-
Rien à configurer. Le core, `@fraza/start` et les modules gratuits sont publiés sur npmjs, le registre par défaut de npm : aucune ligne de configuration ni connexion n'est demandée. Seuls les modules Pro passent par le registre Fraza, avec un compte : voir [Modules Pro](#modules-pro).
|
|
23
|
-
|
|
24
|
-
Chaque version gratuite est aussi publiée sur `https://registry.fraza.ca/`, en copie de secours. Si npmjs devient indisponible, voir [Basculer sur le registre de secours](../02-guides/basculer-sur-le-registre-de-secours.md).
|
|
25
|
-
|
|
26
|
-
## 2. Générer le projet
|
|
20
|
+
## 1. Générer le projet
|
|
27
21
|
|
|
28
22
|
```bash
|
|
29
23
|
npx @fraza/start
|
|
@@ -37,11 +31,11 @@ La commande enchaîne :
|
|
|
37
31
|
2. L'écriture d'un `README.md` au nom du projet et l'ajout des scripts `dev`, `build`, `postinstall` et `audit`. Les trois premiers sont préfixés par `fraza-modules sync`.
|
|
38
32
|
3. La copie des fichiers de gabarit : `app/`, `components/`, `styles/`, `instrumentation.js`, `theme.js`, `jsconfig.json`. Le `next.config.mjs` de `create-next-app` est conservé, car c'est lui qui branche Tailwind : seul `devIndicators: false` y est ajouté.
|
|
39
33
|
4. Le `.gitignore` : les règles `.env*` de `create-next-app` restent actives, `!.env.example` rend le modèle à git, et `app/.fraza/` s'ajoute. Le `.npmrc` n'est pas ignoré.
|
|
40
|
-
5. L'écriture du `.npmrc` du projet :
|
|
34
|
+
5. L'écriture du `.npmrc` du projet : la ligne de scope `@fraza-pro`, sans token. Elle ne sert qu'aux modules Pro, et `npx fraza-key` y ajoute le token le jour où le projet en installe un.
|
|
41
35
|
6. L'installation de `@fraza/core`.
|
|
42
36
|
7. La création de `.env.example`, copie du modèle du package sans aucune valeur secrète, et de `.env.local`, la même copie avec `FRAZA_ENCRYPTION_KEY` générée et `NEXT_PUBLIC_URL` locale. Un fichier qui existe déjà n'est pas remplacé.
|
|
43
37
|
|
|
44
|
-
##
|
|
38
|
+
## 2. Configurer l'environnement
|
|
45
39
|
|
|
46
40
|
Les valeurs de la machine vont dans `.env.local`, que git ignore. Le CLI l'a créé à partir de `node_modules/@fraza/core/.env.example`, avec la clé de chiffrement déjà générée. Il reste à le remplir avant de démarrer.
|
|
47
41
|
|
|
@@ -55,7 +49,7 @@ FRAZA_DATABASE_URL=postgres://user:password@localhost:5432/mon_projet
|
|
|
55
49
|
|
|
56
50
|
`.env.example`, lui, est suivi par git et ne porte que des noms de variables et des valeurs sans secret. Il ne se charge pas : il sert de modèle à une nouvelle machine, qui le copie en `.env.local`. Le détail de chaque variable est dans [Configuration](./03-configuration.md), et la règle complète dans [Secrets et git](#secrets-et-git).
|
|
57
51
|
|
|
58
|
-
##
|
|
52
|
+
## 3. Initialiser la base
|
|
59
53
|
|
|
60
54
|
```bash
|
|
61
55
|
npx fraza-db test # vérifier la connexion
|
|
@@ -69,7 +63,7 @@ npx fraza-db init # créer les tables
|
|
|
69
63
|
|
|
70
64
|
La commande est idempotente : la relancer après chaque ajout de module ne casse rien.
|
|
71
65
|
|
|
72
|
-
##
|
|
66
|
+
## 4. Démarrer
|
|
73
67
|
|
|
74
68
|
```bash
|
|
75
69
|
npm run dev
|
|
@@ -92,7 +86,7 @@ npm config set "@fraza-pro:registry" https://registry.fraza.ca/
|
|
|
92
86
|
npm login --registry=https://registry.fraza.ca/
|
|
93
87
|
```
|
|
94
88
|
|
|
95
|
-
Le token est déposé dans `~/.npmrc`, le `.npmrc` du dossier personnel : `%USERPROFILE%\.npmrc` sous Windows. Il
|
|
89
|
+
Le token est déposé dans `~/.npmrc`, le `.npmrc` du dossier personnel : `%USERPROFILE%\.npmrc` sous Windows. Il n'expire pas dans le temps : il cesse de fonctionner seulement si le secret du serveur change, si le mot de passe est modifié, ou si le compte est révoqué.
|
|
96
90
|
|
|
97
91
|
Écrire ensuite le token dans le `.npmrc` du projet. La commande se relance après chaque nouveau `npm login` :
|
|
98
92
|
|
|
@@ -126,7 +120,7 @@ Le `.npmrc`, lui, reste suivi par git. Il pointe le scope `@fraza-pro` vers `htt
|
|
|
126
120
|
|
|
127
121
|
| Symptôme | Cause probable |
|
|
128
122
|
|---|---|
|
|
129
|
-
| `404 Not Found - @fraza/core` à l'installation | Une ligne `@fraza:registry` du `.npmrc` du projet ou de `~/.npmrc` pointe vers un registre qui n'a pas le paquet. La retirer pour revenir à npmjs
|
|
123
|
+
| `404 Not Found - @fraza/core` à l'installation | Une ligne `@fraza:registry` du `.npmrc` du projet ou de `~/.npmrc` pointe vers un registre qui n'a pas le paquet. La retirer pour revenir à npmjs. |
|
|
130
124
|
| npmjs injoignable, ou `@fraza/core` retiré de npmjs | Voir [Basculer sur le registre de secours](../02-guides/basculer-sur-le-registre-de-secours.md). |
|
|
131
125
|
| `401` ou `404` sur un `@fraza-pro/module-*` | Ligne `@fraza-pro:registry` ou token absent du `.npmrc`. Voir [Modules Pro](#modules-pro) : `npm login` puis `npx fraza-key`. |
|
|
132
126
|
| `FRAZA_DATABASE_URL is not defined` | `.env.local` non rempli, ou variable absente de la plateforme en production. |
|
|
@@ -78,7 +78,7 @@ npm run dev
|
|
|
78
78
|
|
|
79
79
|
Une section **Pages** apparaît dans la barre latérale. Ouvrir `/admin/pages`, créer une page, lui donner un titre et un slug, ajouter quelques blocs, la passer en visible, enregistrer. L'URL publique complète est affichée sous le champ slug, et le bouton de lien de la liste l'ouvre dans un nouvel onglet.
|
|
80
80
|
|
|
81
|
-
La page est en ligne. Le détail de l'écran est dans [Administration du module Pages](../06-modules/pages/admin.md), et les variantes d'installation dans [Installation](../06-modules/pages/installation.md).
|
|
81
|
+
La page est en ligne. Le détail de l'écran est dans [Administration du module Pages](../06-modules/pages/03-admin.md), et les variantes d'installation dans [Installation](../06-modules/pages/01-installation.md).
|
|
82
82
|
|
|
83
83
|
## Ce qui vient de se passer
|
|
84
84
|
|
|
@@ -168,7 +168,7 @@ node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
|
168
168
|
STRIPE_WEBHOOK_SECRET=whsec_…
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
-
Le core sert l'endpoint de webhook Stripe et vérifie la signature de chaque événement, sans le SDK Stripe. `STRIPE_WEBHOOK_SECRET` suffit à l'activer : sans lui, la route répond 404. Les appels sortants vers Stripe (sessions de paiement, remboursements) appartiennent au module qui encaisse, avec son propre SDK. Le module de [facturation](../06-modules/facturation/configuration.md) demande aussi `STRIPE_SECRET_KEY`.
|
|
171
|
+
Le core sert l'endpoint de webhook Stripe et vérifie la signature de chaque événement, sans le SDK Stripe. `STRIPE_WEBHOOK_SECRET` suffit à l'activer : sans lui, la route répond 404. Les appels sortants vers Stripe (sessions de paiement, remboursements) appartiennent au module qui encaisse, avec son propre SDK. Le module de [facturation](../06-modules/facturation/02-configuration.md) demande aussi `STRIPE_SECRET_KEY`.
|
|
172
172
|
|
|
173
173
|
### Récupérer la clé secrète
|
|
174
174
|
|
|
@@ -8,7 +8,7 @@ related:
|
|
|
8
8
|
- 03-reference/01-cores/api
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Le core sert l'endpoint de webhook Stripe et vérifie la signature de chaque événement. Les appels vers Stripe, eux, passent par le SDK officiel, que le projet installe. Ce guide couvre le parcours complet d'un paiement unique par Checkout, le plus court chemin vers un encaissement fiable. Le module de [facturation](../06-modules/facturation/paiements.md) fait déjà tout cela pour les factures.
|
|
11
|
+
Le core sert l'endpoint de webhook Stripe et vérifie la signature de chaque événement. Les appels vers Stripe, eux, passent par le SDK officiel, que le projet installe. Ce guide couvre le parcours complet d'un paiement unique par Checkout, le plus court chemin vers un encaissement fiable. Le module de [facturation](../06-modules/facturation/05-paiements.md) fait déjà tout cela pour les factures.
|
|
12
12
|
|
|
13
13
|
## Configuration
|
|
14
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Basculer sur le registre de secours
|
|
3
|
-
description: Installer @fraza/* depuis registry.fraza.ca quand npmjs est indisponible, puis revenir à npmjs.
|
|
3
|
+
description: Installer @fraza/* depuis registry.fraza.ca quand npmjs est indisponible ou par choix, puis revenir à npmjs.
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
@@ -8,11 +8,11 @@ related:
|
|
|
8
8
|
- 02-guides/mettre-a-jour-un-projet
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Ce guide s'adresse à qui
|
|
11
|
+
Un projet installe `@fraza/*` depuis npmjs par défaut. Ce guide s'adresse à qui veut l'installer depuis le registre Fraza à la place : en urgence, pendant que npmjs ne sert plus les paquets (panne de npmjs, paquet retiré de npmjs), ou par choix.
|
|
12
12
|
|
|
13
13
|
## Pourquoi c'est possible
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Chaque version de `@fraza/*` publiée sur npmjs l'est aussi sur `https://registry.fraza.ca/`, en copie de secours, en lecture libre. Ce registre porte en plus des versions intermédiaires, publiées pour tester un changement, qui ne vont pas sur npmjs.
|
|
16
16
|
|
|
17
17
|
Les deux registres reçoivent le même fichier, octet pour octet : la commande de publication construit un seul tarball et l'envoie aux deux. Le `package-lock.json` vérifie l'empreinte (`integrity`) de chaque paquet installé. Comme l'empreinte est la même sur les deux registres, le lockfile reste valable après la bascule.
|
|
18
18
|
|
|
@@ -73,7 +73,7 @@ Champs disponibles : `TextField`, `TextareaField`, `NumberField`, `SelectField`,
|
|
|
73
73
|
|
|
74
74
|
`IconField` propose tout le jeu `@fraza/icons` et stocke le nom choisi. Le rendu du bloc l'affiche avec `<Icon name={item.icon} />` de `@fraza/core/shared/components/Icon`, qui ne charge que cette icône. Aucune liste à tenir dans le projet. Voir [Sélecteur d'icône d'un bloc](../03-reference/04-partage/icones.md#sélecteur-dicône-dun-bloc).
|
|
75
75
|
|
|
76
|
-
`ImageField` passe par le sélecteur de [`@fraza/module-medias`](../06-modules/medias/index.md) et se masque quand le module est absent. Voir [Intégrer les médias](../06-modules/medias/integration.md).
|
|
76
|
+
`ImageField` passe par le sélecteur de [`@fraza/module-medias`](../06-modules/medias/index.md) et se masque quand le module est absent. Voir [Intégrer les médias](../06-modules/medias/05-integration.md).
|
|
77
77
|
|
|
78
78
|
### `render.js`
|
|
79
79
|
|
|
@@ -24,7 +24,7 @@ npm install @fraza/module-medias
|
|
|
24
24
|
FRAZA_MODULE_MEDIAS=true
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Le détail de l'installation, dont la route de fichier à monter dans le projet, est dans [Installer le module Médias](../06-modules/medias/installation.md).
|
|
27
|
+
Le détail de l'installation, dont la route de fichier à monter dans le projet, est dans [Installer le module Médias](../06-modules/medias/01-installation.md).
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
npx fraza-db init
|
|
@@ -56,6 +56,6 @@ Pour savoir lesquels vont ensemble, et dans quel ordre, [Que peut-on construire]
|
|
|
56
56
|
|
|
57
57
|
| Guide | Besoin |
|
|
58
58
|
|---|---|
|
|
59
|
-
| [Basculer sur le registre de secours](./basculer-sur-le-registre-de-secours.md) | Installer `@fraza/*` depuis le registre Fraza quand npmjs est indisponible. |
|
|
59
|
+
| [Basculer sur le registre de secours](./basculer-sur-le-registre-de-secours.md) | Installer `@fraza/*` depuis le registre Fraza quand npmjs est indisponible, ou par choix. |
|
|
60
60
|
|
|
61
61
|
Pour le détail d'une signature ou d'une option, voir la [Référence](../03-reference/index.md).
|
|
@@ -129,7 +129,7 @@ Un contenu dont la zone SEO est vide n'a pas de raison de sortir sans descriptio
|
|
|
129
129
|
|
|
130
130
|
Passez ces deux valeurs aux quatre endroits de ce guide, pas seulement au rendu : `SeoFields` les affiche en filigrane, `SeoScoreBadge` et `computeSeoScore` les comptent dans le score. Sans cela l'éditeur signale une description manquante alors que la page publique en émet une.
|
|
131
131
|
|
|
132
|
-
`@fraza/module-posts` en donne un exemple complet : il dérive la description d'un champ `text` ou `editor` et l'image d'un champ `thumbnail` ou `image`, avec un drapeau de configuration pour désigner explicitement la source. Voir [Repli SEO automatique](../06-modules/posts/types-et-champs.md#repli-seo-automatique).
|
|
132
|
+
`@fraza/module-posts` en donne un exemple complet : il dérive la description d'un champ `text` ou `editor` et l'image d'un champ `thumbnail` ou `image`, avec un drapeau de configuration pour désigner explicitement la source. Voir [Repli SEO automatique](../06-modules/posts/03-types-et-champs.md#repli-seo-automatique).
|
|
133
133
|
|
|
134
134
|
## Tokens
|
|
135
135
|
|
|
@@ -22,7 +22,7 @@ Registre **purement serveur**. Voir les notes pour la raison : ce n'est pas un o
|
|
|
22
22
|
|
|
23
23
|
## Qui alimente le registre
|
|
24
24
|
|
|
25
|
-
1. Le projet hôte dépose un fichier dans `components/fraza/templates/<id>.js` exportant `meta` et un composant par défaut. Le CLI `fraza-modules sync` génère le manifeste `app/.fraza/templates.server.js` qui appelle `registerTemplate` au boot. C'est de là que vient le template `default` de [`@fraza/module-pages`](../../06-modules/pages/templates.md), qui n'en enregistre aucun lui-même. [`@fraza/module-posts`](../../06-modules/posts/templates.md) en enregistre un par type déclaré, que le projet remplace en reprenant le même identifiant : le manifeste enregistre les templates du projet avec `override: true`.
|
|
25
|
+
1. Le projet hôte dépose un fichier dans `components/fraza/templates/<id>.js` exportant `meta` et un composant par défaut. Le CLI `fraza-modules sync` génère le manifeste `app/.fraza/templates.server.js` qui appelle `registerTemplate` au boot. C'est de là que vient le template `default` de [`@fraza/module-pages`](../../06-modules/pages/05-templates.md), qui n'en enregistre aucun lui-même. [`@fraza/module-posts`](../../06-modules/posts/07-templates.md) en enregistre un par type déclaré, que le projet remplace en reprenant le même identifiant : le manifeste enregistre les templates du projet avec `override: true`.
|
|
26
26
|
2. Un module peut enregistrer un template à l'exécution via l'API impérative, quand l'identifiant dépend d'une condition inconnue au build.
|
|
27
27
|
|
|
28
28
|
## API
|
|
@@ -63,8 +63,8 @@ Le registre est agnostique : ce sont les modules qui décident des props passée
|
|
|
63
63
|
|
|
64
64
|
| `kind` | Props |
|
|
65
65
|
|---|---|
|
|
66
|
-
| `'page'` | `{ page, blocks, url, breadcrumb }`. Voir [Templates de page](../../06-modules/pages/templates.md). |
|
|
67
|
-
| `'post'` | `{ post, blocks, url, breadcrumb }`. Voir [Templates de post](../../06-modules/posts/templates.md). |
|
|
66
|
+
| `'page'` | `{ page, blocks, url, breadcrumb }`. Voir [Templates de page](../../06-modules/pages/05-templates.md). |
|
|
67
|
+
| `'post'` | `{ post, blocks, url, breadcrumb }`. Voir [Templates de post](../../06-modules/posts/07-templates.md). |
|
|
68
68
|
|
|
69
69
|
Le template est **responsable du rendu des blocs**. Il importe son propre `<Content>` depuis `components/fraza/templates/content.js` et l'utilise avec `<Content blocks={blocks} />`. Aucun `children` n'est injecté implicitement : le template a la main complète sur sa JSX.
|
|
70
70
|
|
|
@@ -10,7 +10,7 @@ related:
|
|
|
10
10
|
|
|
11
11
|
Le gestionnaire de médias est distribué comme un module externe, [`@fraza/module-medias`](../../06-modules/medias/index.md). Le core ne dépend pas de ce package : il fournit un **registre** que le module remplit au runtime.
|
|
12
12
|
|
|
13
|
-
Un module tiers peut donc téléverser un fichier et attacher des médias à son contenu sans déclarer `@fraza/module-medias` en dépendance, et sans conditionner ses appels. Le mode d'emploi côté consommateur est dans [Intégrer les médias](../../06-modules/medias/integration.md).
|
|
13
|
+
Un module tiers peut donc téléverser un fichier et attacher des médias à son contenu sans déclarer `@fraza/module-medias` en dépendance, et sans conditionner ses appels. Le mode d'emploi côté consommateur est dans [Intégrer les médias](../../06-modules/medias/05-integration.md).
|
|
14
14
|
|
|
15
15
|
Quand le module est absent ou désactivé (`FRAZA_MODULE_MEDIAS` différent de `true`), les façades restent appelables et se comportent de façon **neutre** : les lectures retournent vide, les écritures retournent un échec explicite, `getMediaPicker()` retourne `null`. Le code consommateur reste naïf.
|
|
16
16
|
|
|
@@ -72,7 +72,7 @@ Chaque façade transmet ses arguments au module tels quels. `client` y désigne
|
|
|
72
72
|
|
|
73
73
|
La taille enregistrée d'un fichier est celle des octets stockés, après optimisation : un ancien paramètre `size` d'`uploadMedia` ou de `replaceMedia` est ignoré.
|
|
74
74
|
|
|
75
|
-
Le détail du comportement de chaque écriture, avec le module actif, est dans [Téléversement](../../06-modules/medias/televersement.md) et [API](../../06-modules/medias/api.md).
|
|
75
|
+
Le détail du comportement de chaque écriture, avec le module actif, est dans [Téléversement](../../06-modules/medias/03-televersement.md) et [API](../../06-modules/medias/07-api.md).
|
|
76
76
|
|
|
77
77
|
```js
|
|
78
78
|
import { attachMedia, detachAllForSource } from '@fraza/core/media-registry';
|
|
@@ -119,7 +119,7 @@ const url = buildMediaUrl(result.media);
|
|
|
119
119
|
|
|
120
120
|
`uploadedBy` est optionnel. Omis, la colonne `uploaded_by` reste nulle et la médiathèque n'affiche aucun auteur, ce qui est exact pour un dépôt machine. La colonne porte une clé étrangère vers la table des utilisateurs : seul un identifiant réel, ou rien, est accepté. Un identifiant inventé fait échouer l'enregistrement.
|
|
121
121
|
|
|
122
|
-
Les formats, les tailles et les validations sont les mêmes que pour un téléversement depuis l'interface : la règle vit dans la fonction, pas dans la route. Voir [Téléversement](../../06-modules/medias/televersement.md).
|
|
122
|
+
Les formats, les tailles et les validations sont les mêmes que pour un téléversement depuis l'interface : la règle vit dans la fonction, pas dans la route. Voir [Téléversement](../../06-modules/medias/03-televersement.md).
|
|
123
123
|
|
|
124
124
|
`deleteMedia` refuse un média encore référencé. Interroger `countReferences` avant, ou lire le champ `referenceCount` de l'échec.
|
|
125
125
|
|
|
@@ -167,7 +167,7 @@ Vérifier `isMediaPickerAvailable()` **avant** de rendre : `getMediaPicker()` re
|
|
|
167
167
|
| `initialSelected` | Tableau de médias déjà retenus, affichés cochés à l'ouverture. Mode multiple. |
|
|
168
168
|
| `title` | Titre de la fenêtre. |
|
|
169
169
|
|
|
170
|
-
En mode multiple, la sélection retient les objets média et survit donc à la pagination et aux filtres, `onSelect` rend le tableau dans l'ordre où la sélection a été constituée, et le téléversement accepte plusieurs fichiers. Voir [Intégrer les médias](../../06-modules/medias/integration.md).
|
|
170
|
+
En mode multiple, la sélection retient les objets média et survit donc à la pagination et aux filtres, `onSelect` rend le tableau dans l'ordre où la sélection a été constituée, et le téléversement accepte plusieurs fichiers. Voir [Intégrer les médias](../../06-modules/medias/05-integration.md).
|
|
171
171
|
|
|
172
172
|
## Route fichier
|
|
173
173
|
|
|
@@ -74,7 +74,7 @@ Le registre Fraza tourne sous Verdaccio, qui ne sert pas la route de `npm access
|
|
|
74
74
|
|
|
75
75
|
## Basculer sur le registre de secours
|
|
76
76
|
|
|
77
|
-
`secours` et `npmjs` changent le registre d'où le projet installe `@fraza/*`, pour une panne de npmjs
|
|
77
|
+
`secours` et `npmjs` changent le registre d'où le projet installe `@fraza/*`, pour une panne de npmjs, un paquet retiré de npmjs, ou par choix. Ils écrivent le `.npmrc` et réécrivent l'hôte des adresses `@fraza/*` du `package-lock.json` : sans cette réécriture, `npm ci` retournerait chercher les paquets sur l'hôte d'origine. Lancer ensuite `npm install`, puis committer les deux fichiers. Voir [Basculer sur le registre de secours](../../02-guides/basculer-sur-le-registre-de-secours.md).
|
|
78
78
|
|
|
79
79
|
## Quand la lancer
|
|
80
80
|
|
|
@@ -32,7 +32,7 @@ Trois informations distinctes qu'un simple champ `peerDependencies` ne porte pas
|
|
|
32
32
|
"node": { "floor": "20.12.0", "range": ">=20.12.0", "tested": "22.0.0" }
|
|
33
33
|
},
|
|
34
34
|
"packages": {
|
|
35
|
-
"next": { "floor": "16.0.0", "range": ">=16.0.0 <17.0.0", "tested": "16.3
|
|
35
|
+
"next": { "floor": "16.0.0", "range": ">=16.0.0 <17.0.0", "tested": "16.4.3" },
|
|
36
36
|
"sharp": { "floor": "0.35.0", "range": ">=0.35.0 <1.0.0", "tested": "0.35.5",
|
|
37
37
|
"requiredBy": ["@fraza/module-medias"] }
|
|
38
38
|
}
|
|
@@ -142,7 +142,7 @@ Les variables `FRAZA_EMAIL_FROM_*` et `FRAZA_EMAIL_LOGO*` servent les deux fourn
|
|
|
142
142
|
|---|---|---|---|
|
|
143
143
|
| `STRIPE_WEBHOOK_SECRET` | — | `core/payments` | Secret de signature de l'endpoint de webhook (`whsec_…`). Sans lui, la route répond 404. |
|
|
144
144
|
|
|
145
|
-
Le core ne garde de Stripe que l'endpoint de webhook, et il vérifie la signature sans le SDK. `STRIPE_SECRET_KEY` appartient au module qui appelle Stripe, la [facturation](../../06-modules/facturation/configuration.md) par exemple, et se déclare dans son manifeste.
|
|
145
|
+
Le core ne garde de Stripe que l'endpoint de webhook, et il vérifie la signature sans le SDK. `STRIPE_SECRET_KEY` appartient au module qui appelle Stripe, la [facturation](../../06-modules/facturation/02-configuration.md) par exemple, et se déclare dans son manifeste.
|
|
146
146
|
|
|
147
147
|
## Authentification
|
|
148
148
|
|
|
@@ -208,7 +208,7 @@ La tuile `update` du tableau de bord lit la même variable, mais elle n'a aucune
|
|
|
208
208
|
|
|
209
209
|
## Variables d'un module
|
|
210
210
|
|
|
211
|
-
Chaque module, `@fraza/module-*` ou `@fraza-pro/module-*`, déclare ses propres variables dans `manifest.envVars`. Leur effet est documenté module par module : [Pages](../../06-modules/pages/configuration.md), [Posts](../../06-modules/posts/configuration.md), [Médias](../../06-modules/medias/configuration.md), [Formulaires](../../06-modules/forms/configuration.md), [Facturation](../../06-modules/facturation/configuration.md), [Fichiers](../../06-modules/drive/configuration.md), [Rendez-vous](../../06-modules/booking/configuration.md). Une variable `required: true` absente produit un avertissement au boot, sans faire tomber le serveur : le module gère son propre repli. `fraza-doctor`, lui, la signale comme bloquante ; il reste muet sur les optionnelles absentes, dont la valeur par défaut suffit.
|
|
211
|
+
Chaque module, `@fraza/module-*` ou `@fraza-pro/module-*`, déclare ses propres variables dans `manifest.envVars`. Leur effet est documenté module par module : [Pages](../../06-modules/pages/02-configuration.md), [Posts](../../06-modules/posts/02-configuration.md), [Médias](../../06-modules/medias/02-configuration.md), [Formulaires](../../06-modules/forms/02-configuration.md), [Facturation](../../06-modules/facturation/02-configuration.md), [Fichiers](../../06-modules/drive/02-configuration.md), [Rendez-vous](../../06-modules/booking/02-configuration.md). Une variable `required: true` absente produit un avertissement au boot, sans faire tomber le serveur : le module gère son propre repli. `fraza-doctor`, lui, la signale comme bloquante ; il reste muet sur les optionnelles absentes, dont la valeur par défaut suffit.
|
|
212
212
|
|
|
213
213
|
Un module porte en plus une variable d'activation de la forme `FRAZA_MODULE_<NOM>`, où `<NOM>` est le nom du paquet sans son préfixe : `@fraza-pro/module-billing` s'active par `FRAZA_MODULE_BILLING`. Installé mais non activé, il n'enregistre rien.
|
|
214
214
|
|
|
@@ -88,7 +88,7 @@ Deux raisons.
|
|
|
88
88
|
|
|
89
89
|
**Échec silencieux en production.** S'appeler via l'URL publique ressort sur le reverse proxy ou le WAF, qui bloque ou réécrit ces requêtes serveur à serveur. La réponse n'est pas le JSON attendu, le code fait `if (!res.ok) return []`, et la section disparaît sans erreur, alors qu'elle s'affichait en développement.
|
|
90
90
|
|
|
91
|
-
**À la place, lire la donnée directement côté serveur** via les helpers `./public` que chaque module de contenu expose : [`getPublicPosts`, `getPublicPostBySlug`, `getPublicTaxonomyTerms`](../06-modules/posts/api.md) pour `@fraza/module-posts`, [`listPublicChildPages`, `getPublishedPageBySegments`](../06-modules/pages/api.md) pour `@fraza/module-pages`.
|
|
91
|
+
**À la place, lire la donnée directement côté serveur** via les helpers `./public` que chaque module de contenu expose : [`getPublicPosts`, `getPublicPostBySlug`, `getPublicTaxonomyTerms`](../06-modules/posts/08-api.md) pour `@fraza/module-posts`, [`listPublicChildPages`, `getPublishedPageBySegments`](../06-modules/pages/06-api.md) pour `@fraza/module-pages`.
|
|
92
92
|
|
|
93
93
|
Les routes HTTP restent réservées aux clients navigateur et à l'admin.
|
|
94
94
|
|
|
@@ -156,7 +156,7 @@ Deux limites à connaître avant d'en ajouter une :
|
|
|
156
156
|
|
|
157
157
|
L'ordre compte : la deuxième ligne couvre la grande majorité des alertes d'un site Fraza. Next tire `postcss`, `nanoid`, `sharp` et tout le reste de leur arbre, si bien qu'un `npm update next` règle d'un coup la plupart des alertes remontées par `npm audit`. La cible de cette montée est le champ `tested` de [`supported.json`](../03-reference/06-configuration/paquets-supportes.md) : c'est lui que `fraza-doctor` affiche dans son remède.
|
|
158
158
|
|
|
159
|
-
**Un `package-lock.json` figé est le risque, pas l'exception.** Next lui-même est régulièrement l'objet d'avis de sécurité : la ligne `16.0.0` à `16.3.2` portait deux exécutions de code à distance non authentifiées, et le `sharp` embarqué traînait une faille `libheif` sous `0.35.4`, puis une faille `librsvg` sous `0.35.5`. Un site qui n'a pas rafraîchi son verrou depuis sa création reste exposé même si son `package.json` autorise déjà la version corrigée.
|
|
159
|
+
**Un `package-lock.json` figé est le risque, pas l'exception.** Next lui-même est régulièrement l'objet d'avis de sécurité : la ligne `16.0.0` à `16.3.2` portait deux exécutions de code à distance non authentifiées, la ligne `16.0.0` à `16.4.0` deux autres, corrigées en `16.4.1`, et le `sharp` embarqué traînait une faille `libheif` sous `0.35.4`, puis une faille `librsvg` sous `0.35.5`. Un site qui n'a pas rafraîchi son verrou depuis sa création reste exposé même si son `package.json` autorise déjà la version corrigée.
|
|
160
160
|
|
|
161
161
|
## Signaler une faille
|
|
162
162
|
|
|
@@ -77,7 +77,7 @@ L'inverse est permis : un module Pro dépend du core et peut s'appuyer sur les m
|
|
|
77
77
|
|
|
78
78
|
## Distribution par le registre
|
|
79
79
|
|
|
80
|
-
Les paquets sont distribués sous deux scopes. Les paquets Fraza Libre, sous `@fraza`, sont publiés sur npmjs, d'où ils s'installent sans connexion
|
|
80
|
+
Les paquets sont distribués sous deux scopes. Les paquets Fraza Libre, sous `@fraza`, sont publiés sur npmjs, d'où ils s'installent sans connexion. Les paquets Pro, sous `@fraza-pro`, ne sont publiés que sur `registry.fraza.ca`, et demandent des identifiants nominatifs délivrés par HYKO. Pour eux, le registre est la vraie barrière : sans ces identifiants, le paquet n'est pas installable. L'administration des comptes et des droits est décrite dans [Registre Verdaccio](../05-contribution/06-registre-verdaccio.md).
|
|
81
81
|
|
|
82
82
|
Un contrat n'empêche rien techniquement. Il ouvre un recours après la violation, à condition de pouvoir la prouver. Le contrat Pro donne ce recours, le registre empêche l'installation sans droit.
|
|
83
83
|
|
|
@@ -130,6 +130,16 @@ Uniforme sur toute la section `03-reference/` :
|
|
|
130
130
|
4. `## Variables d'environnement`, le cas échéant.
|
|
131
131
|
5. `## Notes` : pièges et frontières, à la fin.
|
|
132
132
|
|
|
133
|
+
### Structure d'une section de module
|
|
134
|
+
|
|
135
|
+
Uniforme sur toute la section `06-modules/`, pour que la commande d'installation se trouve au même endroit d'un module à l'autre :
|
|
136
|
+
|
|
137
|
+
1. `index.md` : une phrase de présentation, le bloc `npm i <paquet>`, puis le tableau Paquet, Licence, Registre et Activation, suivi d'un renvoi à Installation. Viennent ensuite la capture, `## Pages de cette section` et `## Ce que le module apporte`.
|
|
138
|
+
2. Les pages portent un préfixe numérique dans l'ordre du tableau « Pages de cette section », `01-installation.md` en tête. Le site de documentation retire le préfixe de l'URL et s'en sert pour ordonner la barre latérale.
|
|
139
|
+
3. `01-installation.md` : une phrase, `## Prérequis`, puis `## Installer`, qui enchaîne le paquet, la variable d'activation, `fraza-modules sync` et `fraza-db init`. Viennent ensuite les étapes propres au module, puis `## Vérifier`, `## Mettre à jour` et `## Notes`.
|
|
140
|
+
|
|
141
|
+
Une variable d'environnement montrée dans une page de module va dans un bloc `dotenv`, jamais dans un bloc `bash`.
|
|
142
|
+
|
|
133
143
|
### Blocs de commandes
|
|
134
144
|
|
|
135
145
|
Une commande documentée se copie et s'exécute telle quelle dans **bash, zsh et PowerShell**, y compris PowerShell 5.1, celui que Windows livre par défaut. L'invite `cmd.exe` n'est pas une cible : elle ne connaît pas les commentaires `#`, que les blocs utilisent.
|
|
@@ -165,7 +165,6 @@ Un `@fraza/module-*` suit la même procédure et les mêmes registres. Un module
|
|
|
165
165
|
- Le champ `files` ne publie que `dist`, `LICENSE`, `THIRD-PARTY-NOTICES.md`, `CHANGELOG.md` et `changelog.json`. `README.md` est ajouté par npm quel que soit le champ, et le core y ajoute `.env.example`. `fraza-module release-check` refuse un paquet dont les notes de version manquent ou ne sont pas déclarées dans `files` : sans elles, `fraza-update` ne peut rien annoncer. Chaque module porte son propre exemplaire des deux fichiers légaux : voir [Licence et propriété](../04-architecture/07-licence-et-propriete.md).
|
|
166
166
|
- Avant publication, vérifier que `dist/` ne contient aucune syntaxe JSX brute. Voir [Créer un module](../02-guides/creer-un-module.md#build-avant-publication).
|
|
167
167
|
- La documentation d'usage du module vit dans [`docs/06-modules/`](../06-modules/index.md) du core, pas dans le dépôt du module. La mettre à jour **et la publier avant** de publier le module : sinon un projet installe un module dont la documentation décrit la version précédente.
|
|
168
|
-
- Mettre à jour la version indiquée en tête de `docs/06-modules/<module>/index.md`.
|
|
169
168
|
|
|
170
169
|
## Administration du registre
|
|
171
170
|
|
|
@@ -4,20 +4,18 @@ description: Installer @fraza-pro/module-booking, créer les tables, poser l'hor
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/booking/configuration
|
|
8
|
-
- 06-modules/booking/reservation-en-ligne
|
|
7
|
+
- 06-modules/booking/02-configuration
|
|
8
|
+
- 06-modules/booking/04-reservation-en-ligne
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Cette page
|
|
12
|
-
|
|
13
|
-
Ce module est distribué sous la licence Fraza Pro : son utilisation en production demande une licence par projet, renouvelée chaque année, qui comprend les mises à jour, la conformité et le support. Voir [Licence et propriété](../../04-architecture/07-licence-et-propriete.md).
|
|
11
|
+
Cette page installe `@fraza-pro/module-booking` dans un projet créé par `npx @fraza/start`. Le module n'est jamais déclaré à la main : il est découvert au boot par scan des dépendances, comme décrit dans [Cycle de vie d'un module](../../02-guides/cycle-de-vie-d-un-module.md). Son utilisation en production demande une licence Fraza Pro : voir [Licence et propriété](../../04-architecture/07-licence-et-propriete.md).
|
|
14
12
|
|
|
15
13
|
## Prérequis
|
|
16
14
|
|
|
17
|
-
- Un projet
|
|
15
|
+
- Un projet créé par `npx @fraza/start`, avec `@fraza/core` à jour.
|
|
16
|
+
- Le token du registre Fraza dans le `.npmrc` du projet, sans lequel `npm i` échoue : `npm login --registry=https://registry.fraza.ca/`, puis `npx fraza-key`. Voir [Modules Pro](../../01-demarrage/01-installation.md#modules-pro).
|
|
18
17
|
- `NEXT_PUBLIC_URL` renseignée, sinon toute réservation en ligne est rejetée par la vérification d'origine du core.
|
|
19
18
|
- La configuration courriel du core, Resend ou SMTP, pour les confirmations et les rappels.
|
|
20
|
-
- La ligne `@fraza-pro:registry=https://registry.fraza.ca/` et le token du registre dans le `.npmrc` du projet, sans lesquels `npm i` échoue. `npx @fraza/start` écrit déjà la ligne de portée. Le token s'obtient avec `npm login --registry=https://registry.fraza.ca/`, puis `npx fraza-key` le reprend dans le projet. Voir [`fraza-key`](../../03-reference/05-cli/fraza-key.md).
|
|
21
19
|
|
|
22
20
|
## Installer
|
|
23
21
|
|
|
@@ -27,29 +25,25 @@ npm i @fraza-pro/module-booking
|
|
|
27
25
|
|
|
28
26
|
Ajouter la variable d'activation à `.env.local`, et aux variables de la plateforme en production :
|
|
29
27
|
|
|
30
|
-
```
|
|
28
|
+
```dotenv
|
|
31
29
|
#------ MODULE - BOOKING ------#
|
|
32
30
|
FRAZA_MODULE_BOOKING=true
|
|
33
31
|
```
|
|
34
32
|
|
|
35
33
|
Sans ce drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin.
|
|
36
34
|
|
|
37
|
-
Régénérer les manifestes puis créer les tables :
|
|
35
|
+
Régénérer les manifestes, puis créer les tables :
|
|
38
36
|
|
|
39
37
|
```bash
|
|
40
38
|
npx fraza-modules sync # déclenché automatiquement au postinstall
|
|
41
39
|
npx fraza-db init # crée les dix tables fraza_booking_*
|
|
42
40
|
```
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
`fraza-db init` est idempotent : sur une base qui a déjà les tables, il applique les migrations en attente sans toucher aux données. Il enregistre aussi les permissions du module, et les attribue au rôle `admin`. Voir [Modèle de données](./06-modele-de-donnees.md).
|
|
45
43
|
|
|
46
44
|
## Version du core
|
|
47
45
|
|
|
48
|
-
Le module
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
npx fraza-update
|
|
52
|
-
```
|
|
46
|
+
Le module suit la dernière version de `@fraza/core` : tous les paquets Fraza à leur dernière version fonctionnent ensemble, et `npx fraza-update` les met à jour ensemble.
|
|
53
47
|
|
|
54
48
|
Un core en retard échoue sans bruit. Il ne dériverait pas `FRAZA_MODULE_BOOKING` du nom du paquet, et le module resterait désactivé, sans erreur. Il lui manquerait aussi trois briques :
|
|
55
49
|
|
|
@@ -57,7 +51,7 @@ Un core en retard échoue sans bruit. Il ne dériverait pas `FRAZA_MODULE_BOOKIN
|
|
|
57
51
|
- [`registerAdminIcons`](../../03-reference/04-partage/icones.md#registeradminicons), qui enregistre les icônes de la section et de ses items, et sans lequel le point d'entrée client du module échoue au chargement ;
|
|
58
52
|
- les fonctions de fuseau horaire de [`shared/dates`](../../03-reference/04-partage/dates.md#fuseaux-horaires), sans lesquelles les créneaux glissent d'une heure deux fois par an.
|
|
59
53
|
|
|
60
|
-
Aucune de ces absences ne lève d'erreur claire à l'usage
|
|
54
|
+
Aucune de ces absences ne lève d'erreur claire à l'usage : garder le core à jour avec le module.
|
|
61
55
|
|
|
62
56
|
## Premier réglage, dans l'ordre
|
|
63
57
|
|
|
@@ -70,9 +64,9 @@ Les trois premières étapes se font dans la page Options, un onglet chacune. L'
|
|
|
70
64
|
|
|
71
65
|
## Ouvrir la prise de rendez-vous en ligne
|
|
72
66
|
|
|
73
|
-
Elle est fermée par défaut. Deux gestes :
|
|
67
|
+
Elle est fermée par défaut. Deux gestes : la variable, dans `.env.local` et dans les variables de la plateforme en production,
|
|
74
68
|
|
|
75
|
-
```
|
|
69
|
+
```dotenv
|
|
76
70
|
FRAZA_MODULE_BOOKING_ONLINE=true
|
|
77
71
|
```
|
|
78
72
|
|
|
@@ -82,8 +76,29 @@ Tant que la variable est à false, un lien parfaitement configuré répond 404,
|
|
|
82
76
|
|
|
83
77
|
## Vérifier
|
|
84
78
|
|
|
79
|
+
1. La connexion à la base répond :
|
|
80
|
+
```bash
|
|
81
|
+
npx fraza-db test
|
|
82
|
+
```
|
|
83
|
+
2. `Rendez-vous` apparaît dans la barre latérale de l'admin.
|
|
84
|
+
3. Le projet est cohérent :
|
|
85
|
+
```bash
|
|
86
|
+
npx fraza-doctor
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Le doctor connaît toutes les variables du module par son manifeste : une variable `FRAZA_MODULE_BOOKING_*` que le manifeste ne déclare pas est dénoncée.
|
|
90
|
+
|
|
91
|
+
## Mettre à jour
|
|
92
|
+
|
|
85
93
|
```bash
|
|
86
|
-
npx fraza-
|
|
94
|
+
npx fraza-update
|
|
87
95
|
```
|
|
88
96
|
|
|
89
|
-
|
|
97
|
+
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois, puis enchaîne `fraza-modules sync`, `fraza-db migrate` et `fraza-doctor`. Tous les paquets Fraza à leur dernière version fonctionnent ensemble : mettre à jour `@fraza-pro/module-booking` seul, par `npm i`, laisserait le core et les autres modules en arrière.
|
|
98
|
+
|
|
99
|
+
Les notes de version sont livrées avec le paquet, dans `node_modules/@fraza-pro/module-booking/CHANGELOG.md`.
|
|
100
|
+
|
|
101
|
+
## Notes
|
|
102
|
+
|
|
103
|
+
- Le module dépend de `@fraza/core` en `peerDependency`. Il n'embarque pas sa propre copie du core.
|
|
104
|
+
- Désinstaller le module ne supprime pas les tables. `dropTables` est exporté depuis `@fraza-pro/module-booking` pour le faire explicitement.
|