@iddp/create-vefk-app 0.7.0 → 0.8.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/README.md CHANGED
@@ -57,7 +57,8 @@ create-vefk-app [<ordner>] [Optionen]
57
57
  --two-factor / --no-two-factor E-Mail-2FA nach dem Passwort für Mandanten-Logins (tenant/both)
58
58
  bzw. den Passwort-Login (--login password); gilt nicht für Magic-Code
59
59
  und Mandanten-Zugang; pro Mandant später in /admin umschaltbar
60
- --mail / --no-mail SMTP-Block in .env.example einkommentieren
60
+ --mail / --no-mail Mail-Versand vorgesehen (2FA/Magic-Code). SMTP-Zugang kommt suite-weit
61
+ aus /etc/vefk-suite/env, das Tool setzt nur SMTP_FROM
61
62
  --tenant <slug> erster Mandant (tenant/both)
62
63
  --anmeldung <art> erster Mandant: konto (E-Mail + Passwort / E-Mail-Code, Standard) |
63
64
  zugang (nur gemeinsames Mandanten-Passwort ohne E-Mail; Passwort danach per
@@ -103,7 +104,7 @@ npx @iddp/create-vefk-app . --name "VEFK e.V. Mitglieder" --auth tenant --port 3
103
104
  | `app.config.js` | Name, `authMode` (`tenant`/`generic`/`both`), `zweiFaktorDefault`, generic-Slug/`login`/`zweiFaktor`/Owner, Markenfarben |
104
105
  | `package.json` × 3 **+ beide `package-lock.json`** | Paketnamen **aus dem Slug** (`npm ci` prüft die Lock-Namen mit) |
105
106
  | `frontend/index.html`, `frontend/src/index.css` | `<title>`, `--iddp` / `--iddp-light` |
106
- | `.env.example` | `APP_NAME`, `SMTP_FROM` (+ SMTP-Block einkommentieren bei `--mail`), `PORT` = lokaler Dev-Port |
107
+ | `.env.example` | `APP_NAME`, `SMTP_FROM` (Display-Name bereinigt nach `docs/07`, Absender `info@dr-dirk-peters.de`), `PORT` = lokaler Dev-Port |
107
108
  | `frontend/vite.config.js`, `docs/08`, `CLAUDE-DEPLOYMENT.md` (Dev-Block) | lokale Dev-Ports (nur mit `--port`/`--dev-port`; sonst bleibt 3001/5173) |
108
109
  | `backend/.env` (neu, gitignored) | Kopie von `.env.example` mit Dev-Flags + zufälligem `SESSION_SECRET` — nie ausgegeben |
109
110
  | `deploy.sh`, `ecosystem.config.cjs`, `CLAUDE-DEPLOYMENT.md`, `docs/01`, `docs/07` | `@@APP@@` (Server-Slug), `@@APPNAME@@`, `@@PORT_PROD@@`/`@@PORT_TEST@@`, `@@DATUM@@`; Rest-Scan meldet vergessene Token in Wurzel + `docs/` |
@@ -48,7 +48,8 @@ Ordner). Optionen (für Skripte/CI):
48
48
  --two-factor E-Mail-2FA nach dem Passwort (Mandanten-Logins bzw. --login password);
49
49
  nicht für Magic-Code und Mandanten-Zugang; pro Mandant in /admin änderbar
50
50
  --no-two-factor … explizit aus
51
- --mail | --no-mail SMTP-Block in .env.example einkommentieren
51
+ --mail | --no-mail Mail-Versand vorgesehen (2FA/Magic-Code). SMTP-Zugang kommt
52
+ suite-weit aus /etc/vefk-suite/env, das Tool setzt nur SMTP_FROM
52
53
  --tenant <slug> erster Mandant (tenant/both)
53
54
  --anmeldung <art> erster Mandant: konto (E-Mail + Passwort / E-Mail-Code, Standard)
54
55
  | zugang (nur gemeinsames Mandanten-Passwort, ohne E-Mail)
package/lib/ersetzen.js CHANGED
@@ -13,6 +13,25 @@
13
13
  import { readFile, writeFile, cp, access, readdir, rm } from "node:fs/promises";
14
14
  import { join } from "node:path";
15
15
 
16
+ /** Absenderadresse der Suite (der SMTP-Zugang dazu liegt in /etc/vefk-suite/env). */
17
+ export const SMTP_ABSENDER = "info@dr-dirk-peters.de";
18
+
19
+ /**
20
+ * Display-Name für SMTP_FROM nach docs/07 Schicht 4: nur Buchstaben, Ziffern,
21
+ * Leerzeichen, Umlaute — sonst quotet nodemailer den Header und Microsoft 365
22
+ * verwirft die Mail still. Bindestriche/Schrägstriche werden zu Leerzeichen,
23
+ * alles andere (Punkte, Apostrophe, Klammern) fällt weg. deploy.sh macht auf
24
+ * dem Server dasselbe aus APP_NAME.
25
+ */
26
+ export function smtpAnzeigename(name) {
27
+ const bereinigt = String(name ?? "")
28
+ .replace(/[-–—/]/g, " ")
29
+ .replace(/[^\p{L}\p{N} ]/gu, "")
30
+ .replace(/ +/g, " ")
31
+ .trim();
32
+ return bereinigt || "VEFK Tool";
33
+ }
34
+
16
35
  /** Ein Muster genau einmal ersetzen; Fehltreffer → Warnung. */
17
36
  function ersetzeGenau(inhalt, muster, ersatz, beschreibung, warnungen) {
18
37
  if (!muster.test(inhalt)) {
@@ -199,10 +218,10 @@ export async function wendeAntwortenAn(dir, antworten) {
199
218
  await bearbeiteDatei(dir, ".env.example", warnungen, (inhalt) => {
200
219
  if (!inhalt.includes("VEFK Tool")) warnungen.push(".env.example: „VEFK Tool“ nicht gefunden");
201
220
  inhalt = inhalt.replaceAll("VEFK Tool", name);
202
- if (mail) {
203
- // SMTP-Block einkommentieren, damit die Werte direkt ausgefüllt werden.
204
- inhalt = inhalt.replace(/^# (SMTP_[A-Z_]+=)/gm, "$1");
205
- }
221
+ // Absender: der SMTP-Zugang kommt suite-weit aus /etc/vefk-suite/env, das Tool setzt
222
+ // nur SMTP_FROM. Display-Name nach docs/07 Schicht 4 (keine Punkte/Bindestriche).
223
+ inhalt = ersetzeGenau(inhalt, /^SMTP_FROM=.*$/m, `SMTP_FROM=${smtpAnzeigename(name)} <${SMTP_ABSENDER}>`,
224
+ ".env.example: SMTP_FROM", warnungen);
206
225
  if (devPort !== undefined) {
207
226
  inhalt = ersetzeGenau(inhalt, /^PORT=\d+$/m, `PORT=${devPort}`, ".env.example: PORT", warnungen);
208
227
  }
@@ -337,8 +356,8 @@ function erzeugeReadme({ name, authMode, genericLogin, zweiFaktor, mail, tenantS
337
356
  ? "npm run zugang # optional: Mandanten-Zugang (nur Passwort, kein Konto)\n"
338
357
  : "";
339
358
  const mailHinweis = mail
340
- ? "SMTP-Zugangsdaten in `backend/.env` eintragen (Regeln: `docs/07`)."
341
- : "SMTP ist noch nicht konfiguriert — für 2FA/Magic-Code später `docs/07` folgen.";
359
+ ? "Mail-Versand: der SMTP-Zugang kommt suite-weit aus `/etc/vefk-suite/env` (Server) bzw. `~/.config/vefk-suite/env` (Rechner); das Tool setzt nur `SMTP_FROM` (steht schon in `.env.example`, Regeln: `docs/07`)."
360
+ : "Mail-Versand ist noch nicht vorgesehen — für 2FA/Magic-Code später `docs/07` folgen (SMTP-Zugang suite-weit, Tool setzt nur `SMTP_FROM`).";
342
361
  const datenZeile = daten === "json"
343
362
  ? "Datenspeicher: JSON-Dateien je Mandant (`daten.adapter: \"json\"`); Wechsel auf SQLite später per `npm run migrate:sqlite`."
344
363
  : "Datenspeicher: SQLite (`backend/data/app.sqlite`, nie im Git); vorhandene JSON-Mandanten werden beim ersten Start übernommen.";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iddp/create-vefk-app",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Scaffolder der VEFK-Tools-Suite — erzeugt ein neues Tool aus vefk-app-template und ersetzt die Platzhalter (Toolname, Marke, Auth-Profil, 2FA/Mail).",
5
5
  "type": "module",
6
6
  "bin": {