@mostajs/wagon-engine 0.2.0 → 0.3.0

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 CHANGED
@@ -3,6 +3,20 @@
3
3
  **Auteur** : Dr Hamid MADANI <drmdh@msn.com>
4
4
  Format : Keep a Changelog ; versions : SemVer.
5
5
 
6
+ ## [0.3.0] — 2026-10-27
7
+
8
+ ### Ajouté
9
+ - Les **dispositions** de `@mostajs/wagon-ui` 0.10 : une page de la charge choisit son cadre par
10
+ `ctx.page({ disposition: 'application' | 'console' | 'nu' | <fournie>, application, console })` ; les pages du wagon
11
+ (tarifs, connexion, compte…) restent en `vitrine`. Le moteur transmet `config.jetons` (rayon, police, ombre, fond),
12
+ le logo de `config.marque` (`logo`, `logoClair`) et `charge.dispositions` (dispositions fournies). Essai T-ENG-8.
13
+ - `charge.accueil` peut être une **fonction** `async (ctx) => ({ titre, contenu, disposition, … })` : l'application
14
+ rend son propre accueil (la maquette de Speaking ouvre sur « Rejoindre mon groupe »). La fiche de données
15
+ `{ fr: { titre, lede, actions, preuves } }` marche toujours. Essai T-ENG-9.
16
+
17
+ ### Modifié
18
+ - Dépend de `@mostajs/wagon-ui` `^0.10.0`.
19
+
6
20
  ## [0.2.0] — 2026-10-26
7
21
 
8
22
  ### Ajouté
package/llms.txt CHANGED
@@ -22,12 +22,13 @@ PAYPAL_WEBHOOK_ID · PAIEMENT_<STRIPE|CHARGILY|SATIM|PAYPAL>=off (coupe le moyen
22
22
  Moyen ACTIF = clés présentes ET commutateur ≠ off (ET, pour une banque prépayée, proposée par config.paiement.prepaye).
23
23
 
24
24
  ## CONTRAT DE LA CHARGE (charge/index.mjs)
25
- liens · ressources (quota { cle, limite, periode } | plafond { cle, limite, plafond: true }) · accueil · textes ·
25
+ liens · ressources (quota { cle, limite, periode } | plafond { cle, limite, plafond: true }) · accueil (fiche { fr: { titre, lede, actions, preuves } }, ou 0.3 : async (ctx) => ({ titre, contenu, disposition, application, console })) · dispositions (0.3 : { nom: (p) => corps }) · textes ·
26
26
  routes(req, res, ctx) (passent en premier ; true si servie) · conformite (essai de quota T-WAG-3) · amorcer() (base au
27
27
  démarrage) · exporterCompte(id), effacerCompte(id) (RGPD) · sitemap() · sauvegarde() · permissions (0.11 :
28
28
  { '/page': { microphone: 'self' }, '/dossier/*': … }, garde-http ≥ 0.2).
29
29
  ctx : chemin, methode, lang, t, ui, page({ titre, contenu }), envoyer, json, rediriger, formulaire, corpsJson({ strict }),
30
30
  compte, consommer(cle), refuser(v), palier({ compte? }), plafond(cle, n, { compte? }), courriel({ to, subject, text, html? }) → bool, admin.
31
+ 0.3 : ctx.page({ disposition: 'vitrine'|'application'|'console'|'nu'|<fournie>, application: { retour, titre, avatar, onglets, langues }, console: { menu, contexte, utilisateur } }) (wagon-ui 0.10) ; config.jetons { rayon, police, policeTitres, ombre, fond } ; config.marque.logo / logoClair (SVG en ligne ou chemin /…).
31
32
  0.2 : { compte } = identifiant d'un compte DÉSIGNÉ (requête sans session bornée par le palier d'un compte rattaché par la charge).
32
33
 
33
34
  ## PIÈGES
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/wagon-engine",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Le wagon d'un SaaS, une fois pour toutes : comptes, connexion, paliers, quotas, paiement (Stripe, Chargily, SATIM), espace client, administration, pages légales, fr/en/ar. Une greffe n'apporte que wagon.config.mjs, charge/, legal/ et son .env ; la suite de conformité publiée juge la greffe.",
5
5
  "keywords": [
6
6
  "mostajs",
@@ -52,7 +52,7 @@
52
52
  "@mostajs/orm": "^2.12.1",
53
53
  "@mostajs/payment": "^2.6.0",
54
54
  "@mostajs/subscriptions-plan": "^0.9.0",
55
- "@mostajs/wagon-ui": "^0.9.1",
55
+ "@mostajs/wagon-ui": "^0.10.0",
56
56
  "better-sqlite3": "^12.11.1",
57
57
  "stripe": "^17.7.0"
58
58
  },
package/src/wagon.mjs CHANGED
@@ -187,7 +187,10 @@ export async function creerWagon({ config, charge, sgbd, baseUrl, stripe = null,
187
187
  // 0.9 (wagon-ui 0.6) — la feuille de style de l'application, de confiance, posée sur toutes les pages.
188
188
  css: typeof config.css === 'string' ? config.css : '',
189
189
  // 0.5 (wagon-ui 0.5) — en-tête collant, bouton d'appel, langue en menu déroulant : déclarés par wagon.config.mjs.
190
- collant: config.collant === true, appel: config.appel ?? null, selecteurLangue: config.selecteurLangue ?? 'liens' });
190
+ collant: config.collant === true, appel: config.appel ?? null, selecteurLangue: config.selecteurLangue ?? 'liens',
191
+ // 0.3 (wagon-ui 0.10) — les jetons de forme, et les dispositions que la charge fournit (une page choisit son cadre
192
+ // par ctx.page({ disposition }) ; le logo vient de config.marque).
193
+ jetons: config.jetons ?? {}, dispositions: charge.dispositions ?? {} });
191
194
  const sessions = magasinSessions({ dialect: d, schema: S.Session, nom: 'wagon_session', jours: 30 });
192
195
  // 0.5 — les sessions expirées se purgent au démarrage puis toutes les six heures (auth-plug 0.3) ; les inscriptions
193
196
  // sont freinées par adresse (config.freinInscription, défaut : 10 puis 1 par minute).
@@ -555,6 +558,11 @@ export async function creerWagon({ config, charge, sgbd, baseUrl, stripe = null,
555
558
 
556
559
  // ── Les pages du wagon ──
557
560
  if (chemin === '/' && methode === 'GET') {
561
+ // 0.3 — l'accueil peut être une FONCTION de la charge : elle rend la page entière (titre, contenu, disposition).
562
+ if (typeof charge.accueil === 'function') {
563
+ const p = (await charge.accueil(ctx)) ?? {};
564
+ return envoyer(200, page({ actif: '/', ...p, titre: p.titre ?? config.marque.nom }));
565
+ }
558
566
  const a = charge.accueil?.[lang] ?? charge.accueil?.fr ?? { titre: config.marque.nom };
559
567
  return envoyer(200, page({ actif: '/', titre: config.marque.nom, contenu: ui.accueil({ lang, ...a }) }));
560
568
  }