Add pixelmatch-based screenshot comparison script that captures Angular
(:4200) and React (:8080) at every route and generates pixel diff images.
Dev server: add mock /api/appSettings endpoint so Angular can bootstrap
when WAF blocks the real API.
Modern.js SSR intercepts all routes before any Express middleware,
so the API proxy runs as a separate Express server on port 8080.
Modern.js runs on 8081. The proxy uses curl subprocesses which go
through the system HTTPS proxy (GOST) with a proper TLS fingerprint
that the Aeroflot WAF accepts.
Usage: node scripts/dev-server.mjs (replaces pnpm dev for full-stack)
Also: remove stray e2e-angular test directory, fix env default to
same-origin /api.
- Point API_BASE_URL to localhost:4200 (Angular's dev proxy) which
correctly forwards to flights.test.aeroflot.ru with proper headers
- Convert URL date format (yyyyMMdd) to API format (yyyy-MM-ddT00:00:00)
matching Angular's ApiFormatterService behavior
- Add standalone api-proxy.mjs script for running without Angular
- Root page redirect uses both loader and client-side navigate
- SignalR hub URL points to platform.yc.webzavod.ru/tracker/hub
- Remove broken server/modern-js.server.ts (proxy handled externally)
The server build was failing with "window is not defined" during SSR because
@modern-js/runtime@3.1.3 had an SSR-unsafe window reference in its router
plugin. Pinning runtime to 2.70.8 (matching app-tools) resolves the version
mismatch and eliminates the server-side window access.
Root layout wraps children with LoggerProvider, ApiClientProvider, and
ErrorBoundary. Locale layout validates lang param against 9 supported
languages and provides a request-scoped I18nProvider.
Replaces the FlatCompat shim (which loaded .eslintrc.cjs via @eslint/eslintrc
and emitted deprecation warnings) with a native ESLint 9 flat config. Adds
typescript-eslint meta-package as the flat-config entrypoint and pins
@eslint/js to v9 to satisfy the eslint@9 peer range. Rule set is preserved
verbatim from the Phase 1A-1 plan (Task 4).
Align engines.node with the .nvmrc 24.2.0 pin so npm/pnpm warn on
mismatched local toolchains, move packageManager to the current
pnpm 9.15.3 patch, and ignore pnpm's local store and debug log so
stray artefacts never get committed.
Vitest 2 pulled Vite 5 + esbuild 0.21 (GHSA-67mh-4wv8-2f99). Bumping
vitest/@vitest/ui to v3 and adding vite ^6 as a direct dev dep forces
peer resolution onto Vite 6 + esbuild 0.25, which also clears the Vite
path-traversal advisory (GHSA-4w7w-66w2-5vf9). pnpm audit is now clean.