Files
SRCmail/scripts/build-electron.mjs
T
Bernd Rodler cfdd091d22 feat: Phase 3+4 — security hardening + polish + offline + Electron push
Phase 3 (security):
- P3.1: Feature gate server-side enforcement (403 on disabled features)
- P3.2: Unified auth error interceptor (401→logout)
- P3.3: Store-level state isolation via StoreSnapshot contract
  (added message-list-tabs + task stores to snapshot/restore cycle)
- P3.4: Push event bus extraction — email-store no longer imports
  calendar/contact/filter/file stores directly
- P1.3: Auth localStorage AES-GCM encryption via custom Zustand adapter

Phase 4 (polish):
- P4.1: Offline write queue — pending operations in localStorage,
  auto-retry on reconnect, offline-queue-indicator banner
- P4.2: Identity spoofing — fromOverrideEmail domain validation
- P4.3: WebSocket push for Electron via main-process IPC bridge
  (ws package with Authorization headers)
2026-08-07 22:10:26 +02:00

37 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
// Bundles electron/main.ts and electron/preload.ts into dist-electron/*.js.
// Uses esbuild (already a devDependency for the admin plugin dev-bundler,
// lib/admin/plugin-dev.ts) rather than pulling in ts-node/tsx - the output
// is plain CommonJS, so the packaged app needs no separate TS runtime.
import { build } from "esbuild";
import { fileURLToPath } from "node:url";
import path from "node:path";
const rootDir = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
const shared = {
bundle: true,
platform: "node",
target: "node22",
format: "cjs",
sourcemap: true,
// `electron` is provided by the Electron runtime itself; `electron-updater`
// stays external so electron-builder ships it from node_modules as a
// normal production dependency instead of us re-bundling its native-ish
// internals (see electron-builder.config.js's file collection).
external: ["electron", "electron-updater", "ws"],
logLevel: "info",
};
await build({
...shared,
entryPoints: [path.join(rootDir, "electron/main.ts")],
outfile: path.join(rootDir, "dist-electron/main.js"),
});
await build({
...shared,
entryPoints: [path.join(rootDir, "electron/preload.ts")],
outfile: path.join(rootDir, "dist-electron/preload.js"),
});