Stable release promoting the entire `beta` channel to `main`. Brings ~300 commits of features, fixes, and infrastructure improvements that have been baked on the beta channel since v2.6.5. ## Major themes since v2.6.5 * Multi-administrator support with RBAC (super admin / admin / editor) * Async upload pipeline (background worker pool for sharp/ffmpeg/EXIF/ watermark/webhooks; bytes-on-wire returns 202) * Self-hosted webfonts (filesystem-driven scanner; replaces Google Fonts CDN; GDPR-compliant) * 8-token CI palette + force color mode (full theming across admin and public site, with WCAG-safe contrast helpers) * Native multi-arch Docker images (Apple Silicon + ARM64 Linux native) * Native S3 storage backend (S3 + S3-compatible providers) * Comprehensive video support (MP4/WebM/MOV upload, stream, play) * Outbound webhooks for event/photo lifecycle (HMAC-signed) * Gallery layout overhaul (decoupled header style, banner option, theme-aware skeletons, lazy-loaded folder tree picker) * Multilingual email templates (EN/DE/NL/PT/RU translations table) * Bulk operations (delete with password gate, archive) * Photo dimensions backfill (true masonry layout) * Customer client access (review area before guest share) * Image security (devtools detection, watermarking, right-click, secure thumbnails) ## Notable bug fixes from beta * `/auth/session` symmetry — three rounds of fixes (#350, #355, #363, #398) for the admin-login redirect-loop family * Email template renderer: handle {{#if}} conditionals, fix CSS leak in plain-text fallback, gate publish-from-draft password placeholder, gate external_url in public response * Caller/template variable drift across gallery_created, expiration_warning, archive_complete, gallery_expired * Full-URL gallery_link in all email types (was path-only in 3 sites) * ffmpeg/ffprobe via apk for Alpine compatibility (was glibc-bundled) * Admin events search and counters not bounded to first 100 (#346) ## Conflict resolution notes * `README.md` — kept main's leaner v2.6.5 rewrite (#281); added a Contributors section adapted from PR #393. * `DEPLOYMENT_GUIDE.md` — beta version (more recent, includes External Media docs already backported to main). * `CHANGELOG.md` — new 3.42.1 entry leads, beta's 3.x history follows, main's 2.x entries appended below a divider so the historical chain is preserved. * `package.json` (backend + frontend) — beta's structure with version bumped from `3.42.1-beta.0` → `3.42.1`. * `package-lock.json` (backend + frontend) — regenerated via `npm install --package-lock-only`. * `.release-please-manifest.json` — bumped from `2.6.5` → `3.42.1` so the next release-please run on main starts from the correct base. ## Pre-flight checks * Frontend `tsc --noEmit` — clean * Frontend `vite build` — clean (~3.5s, 2.6 MB main chunk; existing warning about chunking, not new) * Backend `npm test` — pre-existing failures in 6 integration suites (DB-fixture-dependent, not regressions) * Frontend `vitest` — pre-existing failures in ThemeCustomizerEnhanced.test.tsx (missing QueryClientProvider after PR #390 added useQuery; not a regression of this merge) The pre-existing test failures are tracked as separate follow-ups and do not block this release promotion.
81 lines
2.2 KiB
JSON
81 lines
2.2 KiB
JSON
{
|
|
"name": "picpeak-backend",
|
|
"version": "3.42.1",
|
|
"description": "Backend for PicPeak event photo sharing platform",
|
|
"main": "server.js",
|
|
"scripts": {
|
|
"start": "node server.js",
|
|
"dev": "nodemon server.js",
|
|
"migrate": "node migrations/run-migrations.js",
|
|
"migrate:safe": "node migrations/run-migrations-safe.js",
|
|
"generate:watermarks": "node scripts/generate-watermarks.js",
|
|
"test": "jest",
|
|
"test:s3": "SKIP_S3_TESTS=false jest __tests__/integration/backup-s3",
|
|
"lint": "eslint src/"
|
|
},
|
|
"dependencies": {
|
|
"@aws-sdk/client-s3": "^3.850.0",
|
|
"@aws-sdk/lib-storage": "^3.850.0",
|
|
"@aws-sdk/s3-request-presigner": "^3.850.0",
|
|
"adm-zip": "^0.5.16",
|
|
"archiver": "^5.3.1",
|
|
"axios": "1.14.0",
|
|
"bcrypt": "6.0.0",
|
|
"chokidar": "4.0.3",
|
|
"cookie-parser": "^1.4.7",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.0.3",
|
|
"exifr": "^7.1.3",
|
|
"express": "^4.18.2",
|
|
"express-rate-limit": "^6.7.0",
|
|
"express-validator": "^7.0.1",
|
|
"fluent-ffmpeg": "^2.1.3",
|
|
"form-data": "^4.0.4",
|
|
"handlebars": "^4.7.9",
|
|
"helmet": "^7.0.0",
|
|
"i18next": "25.3.2",
|
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
"i18next-http-backend": "^3.0.2",
|
|
"ipaddr.js": "^2.3.0",
|
|
"joi": "^17.9.1",
|
|
"js-yaml": "^4.1.1",
|
|
"jsonwebtoken": "^9.0.0",
|
|
"knex": "^2.4.2",
|
|
"mime-types": "^3.0.1",
|
|
"multer": "^2.0.2",
|
|
"node-cron": "^3.0.2",
|
|
"nodemailer": "^7.0.13",
|
|
"pg": "^8.16.3",
|
|
"react-i18next": "^15.6.0",
|
|
"sanitize-html": "^2.17.0",
|
|
"sharp": "0.34.3",
|
|
"sqlite3": "^5.1.6",
|
|
"swagger-jsdoc": "^6.2.8",
|
|
"swagger-ui-express": "^5.0.1",
|
|
"uuid": "^11.1.0",
|
|
"winston": "^3.8.2",
|
|
"zxcvbn": "^4.4.2"
|
|
},
|
|
"devDependencies": {
|
|
"eslint": "^8.40.0",
|
|
"jest": "^29.5.0",
|
|
"mock-fs": "^5.5.0",
|
|
"nodemon": "^3.1.10",
|
|
"supertest": "^6.3.3"
|
|
},
|
|
"overrides": {
|
|
"prebuild-install": {
|
|
"tar-fs": "2.1.4"
|
|
},
|
|
"glob": "^11.1.0",
|
|
"js-yaml": "^4.1.1",
|
|
"fast-xml-parser": ">=5.5.10",
|
|
"qs": ">=6.14.2",
|
|
"tar": ">=7.5.13",
|
|
"brace-expansion": ">=5.0.5",
|
|
"minimatch": ">=9.0.7",
|
|
"path-to-regexp": "0.1.13",
|
|
"lodash": ">=4.18.1"
|
|
}
|
|
}
|