@mostajs/appconfig
v0.1.0
Published
Interface d'administration de la configuration .env des modules @mostajs/* : spec déclarative contribuée par module (chatbot, sourcing, chat, db…), résolution des valeurs courantes (secrets = présent/absent), édition validée et réécriture .env (I/O inject
Maintainers
Readme
@mostajs/appconfig
Auteur : Dr Hamid MADANI [email protected] Licence : AGPL-3.0-or-later
Interface d'administration de la configuration .env des modules @mostajs/* (chatbot, sourcing, chat, base de données…). Autosuffisant (sans @mostajs/socle), compose @mostajs/config.
Principe
- Chaque module contribue une spec déclarative de ses réglages (clé env, libellé, type, défaut, choix, aide,
secret). resolveSettings()lit les valeurs courantes viagetEnv(cascadeMOSTA_ENV). Les secrets ne renvoient que présent/absent — jamais la valeur.- L'UI (
./client, socle-free) édite les réglages non sensibles ; une server action applique. applyChanges(io, changes, {restart})valide puis réécrit le.env(préserve commentaires/ordre) et redémarre — l'I/O (readEnv/writeEnv/restart) est injectée par l'app (DI : le chemin et pm2 restent hors module).
Usage (app)
import { registerBuiltinSettings, resolveSettings, applyChanges } from "@mostajs/appconfig";
import { AppConfigForm } from "@mostajs/appconfig/client";
registerBuiltinSettings(); // ou registerSettings([...vos specs])
const groups = resolveSettings(); // pour l'UI
// server action
async function saveConfigAction(fd: FormData) {
"use server";
const changes = [...]; // extraits du FormData pour les clés non-secrètes
await applyChanges(io, changes, { restart: fd.get("__restart") === "1" });
}
// <AppConfigForm groups={groups} action={saveConfigAction} note="L'enregistrement peut redémarrer l'app." />io (DI) :
const io = {
readEnv: () => fs.promises.readFile(ENV_PATH, "utf8"),
writeEnv: (t) => writeAtomic(ENV_PATH, t), // tmp + rename
restart: () => exec("pm2 restart crm"),
};Sécurité
- Permission
app.config(côté app) sur la page et l'action. - Secrets (
secret:true) : jamais lus/écrits/renvoyés au client. Édition via le.envserveur (SSH). - Validation avant écriture ; valeurs échappées ; seules les clés des specs enregistrées sont éditables.
Voir docs/ (livrables #1-#3) et CHANGELOG.md.
