Luca
d543949188
feat(crm): backend code — services + routes + utilities + tests
...
Brings in the full backend CRM stack on top of the consolidated
migration (60abe8c ).
Services (CRM)
- quoteService — full lifecycle (draft → sent → accepted → converted
to event/invoice), Skonto + Storno + reissue paths
- invoiceService — spawnInstallmentInvoices, updateInstallmentPlan,
monthly-billing accumulator, payment-check tokens, dunning ladder
- contractService — block-composable contract editor, in-browser
signature flow, wet-PDF upload path, integrity check, audit trail
- customerHoursService — per-entry locking, billing integration
- dealsService — cross-document lineage (deal_uuid)
- taxReportService — quarterly aggregates + CSV/PDF export
- eventReminderService — pre-event customer reminder cron pass
- _renderContext — shared issuer/recipient blocks across PDF types
- pdfService extensions — custom-font registration, font picker
Routes (admin + public)
- adminQuotes, adminInvoices, adminContracts, adminCalendar,
adminDeals, adminTaxReport, adminDev, adminBusinessProfile
- publicQuotes (accept/decline), publicContracts (sign),
publicPaymentCheck
- Extensions on adminEvents, adminCustomers, adminSettings,
adminEmail, adminFeatureFlags, adminThumbnails, adminPhotos,
adminCategories, adminUsers, adminArchives, adminDashboard
- server.js wires the new mounts (kept upstream's noStoreCache on
customer routes per 3-way merge)
Utilities
- schemaCache (cached hasColumn lookups across services)
- documentSequences (atomic gap-free numbering — §14 UStG)
- safePath (path-containment guards at fs stream boundaries)
- clientIp (sanctioned XFF reader for audit logs)
- publicTokenGuards (pre-multer token validation + attempt counters)
- numericHelpers (ensureInt / ensureNumber consolidation)
- dateFormatter (formatShortDate + dateInputLang)
- dbCompat extensions, iban + pdfFilename helpers, resolveLogoFile
Infrastructure
- Bundled PDF fonts (Comic-Neue / IBM-Plex-Sans / Inter / Jost /
Montserrat / Noto-Sans / Playfair-Display / Poppins)
- Backend package.json + lock updates (pdfkit, signature_pad,
qrcode, et al.)
- Sample storage layout under storage/business-docs/quote/
Tests
- 14 new test files covering quote/invoice/contract lifecycle,
installment plan reshape, line-item hierarchy, customer hours,
payment check, tax report PDF, IBAN parsing, filename sanitiser
2026-05-26 18:18:51 +02:00
github-actions[bot]
08fa2e9b63
chore(beta): release 3.54.6-beta.0
2026-05-25 20:19:09 +00:00
github-actions[bot]
793aa1247e
chore(beta): release 3.54.5-beta.0
2026-05-22 12:41:21 +00:00
github-actions[bot]
955ada4945
chore(beta): release 3.54.4-beta.0
2026-05-21 08:24:22 +00:00
github-actions[bot]
c1e8e0d73a
chore(beta): release 3.54.3-beta.0
2026-05-21 08:22:26 +00:00
github-actions[bot]
03cf09a7bf
chore(beta): release 3.54.2-beta.0
2026-05-20 14:49:19 +00:00
github-actions[bot]
baf5f27fb4
chore(beta): release 3.54.1-beta.0
2026-05-20 06:53:31 +00:00
github-actions[bot]
085a2e5fed
chore(beta): release 3.54.0-beta.0
2026-05-20 06:24:22 +00:00
github-actions[bot]
c042a33431
chore(beta): release 3.53.0-beta.0
2026-05-19 05:27:14 +00:00
github-actions[bot]
b2b46d311d
chore(beta): release 3.52.1-beta.0
2026-05-18 18:59:57 +00:00
github-actions[bot]
db3f1b83ce
chore(beta): release 3.52.0-beta.0
2026-05-18 18:56:50 +00:00
github-actions[bot]
acb387f69c
chore(beta): release 3.51.5-beta.0
2026-05-17 07:28:47 +00:00
github-actions[bot]
4da6726e57
chore(beta): release 3.51.4-beta.0
2026-05-17 07:26:57 +00:00
github-actions[bot]
941453fd7f
chore(beta): release 3.51.3-beta.0
2026-05-16 23:19:50 +00:00
github-actions[bot]
5a9ca4ad57
chore(beta): release 3.51.2-beta.0
2026-05-16 23:02:10 +00:00
github-actions[bot]
2e828fcf9f
chore(beta): release 3.51.1-beta.0
2026-05-16 22:53:14 +00:00
github-actions[bot]
72c2b5c796
chore(beta): release 3.51.0-beta.0
2026-05-14 21:25:07 +00:00
github-actions[bot]
365582e678
chore(beta): release 3.50.0-beta.0
2026-05-14 20:44:57 +00:00
github-actions[bot]
d4198e1bbc
chore(beta): release 3.49.6-beta.0
2026-05-14 19:37:31 +00:00
github-actions[bot]
1e4f762871
chore(beta): release 3.49.5-beta.0
2026-05-14 19:02:43 +00:00
github-actions[bot]
57ea08e1ed
chore(beta): release 3.49.4-beta.0
2026-05-14 18:49:31 +00:00
github-actions[bot]
bc58520cd2
chore(beta): release 3.49.3-beta.0
2026-05-14 18:18:43 +00:00
github-actions[bot]
1cbb0c4cff
chore(beta): release 3.49.2-beta.0
2026-05-13 16:46:19 +00:00
github-actions[bot]
e5ef893395
chore(beta): release 3.49.1-beta.0
2026-05-13 16:31:12 +00:00
github-actions[bot]
b3c6508712
chore(beta): release 3.49.0-beta.0
2026-05-13 16:18:38 +00:00
github-actions[bot]
fa71e7ea1e
chore(beta): release 3.48.1-beta.0
2026-05-12 20:57:36 +00:00
github-actions[bot]
dafc8d041a
chore(beta): release 3.48.0-beta.0
2026-05-12 20:48:26 +00:00
github-actions[bot]
a5e58d085e
chore(beta): release 3.47.2-beta.0
2026-05-11 20:15:57 +00:00
github-actions[bot]
d9d52ec8ab
chore(beta): release 3.47.1-beta.0
2026-05-11 19:57:31 +00:00
github-actions[bot]
1c23ec51ec
chore(beta): release 3.47.0-beta.0
2026-05-11 19:44:45 +00:00
github-actions[bot]
b31fc2140b
chore(beta): release 3.46.3-beta.0
2026-05-11 18:18:34 +00:00
github-actions[bot]
eddcdbf4d8
chore(beta): release 3.46.2-beta.0
2026-05-11 18:07:41 +00:00
github-actions[bot]
3ea7eea4b7
chore(beta): release 3.46.1-beta.0
2026-05-11 08:07:45 +00:00
github-actions[bot]
87dfae0074
chore(beta): release 3.46.0-beta.0
2026-05-11 07:57:50 +00:00
github-actions[bot]
55e6395e9e
chore(beta): release 3.45.1-beta.0
2026-05-10 20:09:09 +00:00
github-actions[bot]
421354bc5a
chore(beta): release 3.45.0-beta.0
2026-05-10 19:57:54 +00:00
github-actions[bot]
d2864854e7
chore(beta): release 3.44.2-beta.0
2026-05-10 19:51:03 +00:00
github-actions[bot]
481f8c2f9f
chore(beta): release 3.44.1-beta.0
2026-05-10 19:01:51 +00:00
github-actions[bot]
f6be07ed4b
chore(beta): release 3.44.0-beta.0
2026-05-10 18:47:55 +00:00
github-actions[bot]
fab0fcdde3
chore(beta): release 3.43.3-beta.0
2026-05-09 19:00:52 +00:00
github-actions[bot]
197524a918
chore(beta): release 3.43.2-beta.0
2026-05-09 18:36:38 +00:00
github-actions[bot]
9ca9563dbe
chore(beta): release 3.43.1-beta.0
2026-05-09 18:34:26 +00:00
github-actions[bot]
967ade7a9a
chore(beta): release 3.43.0-beta.0
2026-05-09 18:22:30 +00:00
github-actions[bot]
72a7a43a4a
chore(beta): release 3.42.7-beta.0
2026-05-09 14:00:44 +00:00
github-actions[bot]
715a806991
chore(beta): release 3.42.6-beta.0
2026-05-09 13:59:36 +00:00
github-actions[bot]
08707eee9e
chore(beta): release 3.42.5-beta.0
2026-05-08 08:15:24 +00:00
github-actions[bot]
9ade631e13
chore(beta): release 3.42.4-beta.0
2026-05-08 08:14:16 +00:00
github-actions[bot]
e8df3de3fb
chore(beta): release 3.42.3-beta.0
2026-05-07 21:04:20 +00:00
Paul Nothaft
6b6191a426
fix(security): scan triage cleanup — drop dead deps, harden Docker/nginx/postMessage
...
Triage of an external SAST/SCA scan run on 2026-05-06. Most loud findings
were already resolved by PR #412 (the 18-CVE backport); this PR addresses
the residual real items:
* Drop unused `handlebars` from backend deps. The runtime require was
removed in PR #367 (#367 ) but the package.json line stayed. handlebars
was the source of two flagged criticals (CVE-2026-33937 RCE,
GHSA-2w6w-674q-4c4q AST injection) plus 8 highs — all now gone.
* `npm audit fix` on backend + frontend. Bumps transitive picomatch,
flatted, postcss, brace-expansion via lockfile, and direct dompurify,
lodash, vite, i18next-http-backend within their existing semver ranges.
Both audits now report 0 vulnerabilities.
* Add `event.origin === window.location.origin` check to the THEME_PREVIEW
message listener in PreviewPage. The branding page posts from the same
origin, so nothing legitimate is rejected; without the check, any third
party that window.open()'d the preview could push arbitrary
branding/theme payloads (semgrep
insufficient-postmessage-origin-validation).
* nginx: `proxy_hide_header` for X-Frame-Options, X-Content-Type-Options,
Referrer-Policy, Content-Security-Policy, Permissions-Policy,
Strict-Transport-Security at server level. nginx adds these itself, but
helmet on the backend was also emitting them — clients were seeing
duplicates (testssl flagged "Multiple X-Frame-Options / CSP /
Permissions-Policy / Referrer-Policy headers" on the live origin).
Single source of truth now.
* Dockerfile hardening (checkov):
- HEALTHCHECK on backend/Dockerfile, backend/Dockerfile.dev,
frontend/Dockerfile.dev. Frontend production Dockerfile already had
one.
- USER node in frontend/Dockerfile.dev (was running as root).
* GitHub Actions docker-build.yml: explicit top-level
`permissions: contents: read`. Per-job blocks already declare
`packages: write` where needed; this stops future steps from
inheriting unintended privileges (CKV2_GHA_1).
Backend npm audit: 4 vulns -> 0.
Frontend npm audit: 6 vulns -> 0.
Backend unit tests: 13 suites, 131/132 passing (1 pre-existing skip).
Frontend type-check + lint: clean.
The pre-existing integration-test failures (live DB / S3 required) and
the ThemeCustomizerEnhanced QueryClientProvider failures are unrelated
and reproduce on origin/beta without these changes.
2026-05-07 22:31:51 +02:00
github-actions[bot]
8ab6fc6bbd
chore(beta): release 3.42.2-beta.0
2026-05-07 12:14:07 +00:00