{ "name": "campus-wall", "version": "1.0.0", "description": "校园墙网站 + 广播站点歌系统", "main": "server.js", "engines": { "node": ">=20.0.0" }, "overrides": { "axios": "1.20.0", "lodash.set": "file:vendor/lodash-set-safe", "lodash.unset": "file:vendor/lodash-unset-safe" }, "scripts": { "start": "node server.js", "dev": "node --watch server.js", "test": "npm run test:song-approval && npm run test:ip-lookup && npm run test:admin-request-cache && npm run test:dependency-safety && npm run test:pagination && npm run test:reservation && npm run test:avatar && npm run test:upload-middleware && npm run test:auth-upload && npm run test:ai && npm run test:cleanup && npm run test:wechat-output && npm run test:wechat-song-flow && npm run test:daily-song-state && npm run check:routes && npm run test:email-service && npm run test:anonymous-policy && npm run test:feedback-notices && npm run test:interaction-consistency && npm run test:backend-architecture && npm run test:gamification-service && npm run test:home-first-paint && npm run test:home-request-race && npm run test:site-info-sharing && npm run test:responsive-boundary && npm run test:radio-layout && npm run test:mp-weekly-song-schedule && npm run test:radio-submit-flow && npm run test:detail-interactions && npm run test:post-media-editor && npm run test:mp-draft-modules && npm run test:mp-draft-flow && npm run test:admin-style-architecture && npm run test:release-notes && npm run test:runtime && npm run test:http && npm run test:song-maintenance && npm run test:radio-slot-schedule && npm run test:frontend-assets && npm run test:feedback-clarity && npm run test:schema-migrations && npm run test:write-transaction && npm run test:notification-outbox && npm run test:content-transactions && npm run test:mp-sync-jobs && npm run test:architecture-reliability && npm run test:reschedule-idempotency && npm run test:database-startup-check && npm run test:song-submit-http && npm run test:wechat-author-repair && npm run test:public-privacy", "test:admin-request-cache": "node scripts/test-admin-request-cache.js", "test:song-approval": "node scripts/test-song-approval.js", "test:ai": "node scripts/test-ai-provider.js", "test:avatar": "node scripts/test-avatar-storage.js", "test:upload-middleware": "node scripts/test-upload-middleware.js", "test:auth-upload": "node scripts/test-auth-upload.js", "test:dependency-safety": "node scripts/test-dependency-safety.js", "test:cleanup": "node scripts/test-cleanup.js", "test:wechat-output": "node scripts/test-wechat-output.js", "test:wechat-song-flow": "node scripts/test-wechat-song-flow.js", "test:wechat-author-repair": "node scripts/test-wechat-author-repair.js", "test:email-service": "node scripts/test-email-service.js", "test:anonymous-policy": "node scripts/test-anonymous-policy.js", "test:feedback-notices": "node scripts/test-feedback-notices.js", "test:interaction-consistency": "node scripts/test-interaction-consistency.js", "test:backend-architecture": "node scripts/test-backend-architecture.js", "test:gamification-service": "node scripts/test-gamification-service.js", "test:pagination": "node scripts/test-pagination.js", "test:reservation": "node scripts/test-reservation-availability.js", "test:home-first-paint": "node scripts/test-home-first-paint.js", "test:home-request-race": "node scripts/test-home-request-race.js", "test:site-info-sharing": "node scripts/test-site-info-sharing.js", "test:responsive-boundary": "node scripts/test-responsive-boundary.js", "test:radio-layout": "node scripts/test-radio-layout.js", "test:radio-submit-flow": "node scripts/test-radio-submit-flow.js", "test:detail-interactions": "node scripts/test-detail-interactions.js", "test:post-media-editor": "node scripts/test-post-media-editor.js", "test:mp-draft-modules": "node scripts/test-mp-draft-modules.js", "test:mp-draft-flow": "node scripts/test-mp-draft-flow.js", "test:admin-style-architecture": "node scripts/test-admin-style-architecture.js", "test:release-notes": "node scripts/test-release-notes.js", "test:daily-song-state": "node scripts/test-daily-song-state.js", "check:mirrors": "node scripts/check-frontend-mirror.js", "check:privacy": "node scripts/check-sensitive-files.js", "check:deployment": "node scripts/test-deployment-static.js", "check:routes": "node scripts/test-route-stability.js", "cleanup:avatars": "node scripts/cleanup-orphan-avatars.js", "build": "npm run sync:frontend && npm run check:mirrors && node scripts/build-static-site.js", "preview": "vite preview", "test:mp-weekly-song-schedule": "node scripts/test-mp-draft-layout-static.js", "test:runtime": "node scripts/test-runtime-lifecycle.js", "test:http": "node scripts/test-http-application.js", "test:song-maintenance": "node scripts/test-song-maintenance.js", "sync:frontend": "node scripts/sync-frontend.js", "test:frontend-assets": "node scripts/test-frontend-assets.js", "test:radio-slot-schedule": "node scripts/test-radio-slot-schedule.js", "test:feedback-clarity": "node scripts/test-feedback-clarity.js", "test:schema-migrations": "node scripts/test-schema-migrations.js", "test:write-transaction": "node scripts/test-write-transaction.js", "test:notification-outbox": "node scripts/test-notification-outbox.js", "test:content-transactions": "node scripts/test-content-transactions.js", "test:mp-sync-jobs": "node scripts/test-mp-sync-jobs.js", "test:architecture-reliability": "node scripts/test-architecture-reliability.js", "test:reschedule-idempotency": "node scripts/test-reschedule-idempotency.js", "test:database-startup-check": "node scripts/test-database-startup-check.js", "test:song-submit-http": "node scripts/test-song-submit-http.js", "test:ip-lookup": "node scripts/test-ip-lookup.js", "build:demo": "node scripts/build-pages-demo.js", "admin:create": "node scripts/create-initial-admin.js", "test:public-privacy": "node scripts/test-public-privacy.js" }, "dependencies": { "@cloudbase/node-sdk": "^3.18.3", "bcryptjs": "^2.4.3", "compression": "^1.8.1", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^16.3.1", "express": "^4.18.2", "express-rate-limit": "^8.5.2", "express-session": "^1.17.3", "helmet": "^8.2.0", "ip2region": "^2.3.0", "jsonwebtoken": "^9.0.2", "lodash": "^4.18.1", "lodash.set": "file:vendor/lodash-set-safe", "lodash.unset": "file:vendor/lodash-unset-safe", "morgan": "^1.10.0", "multer": "^2.4.0", "mysql2": "^3.6.0", "naive-ui": "^2.38.0", "nodemailer": "^10.1.1", "pinia": "^2.1.0", "qrcode": "^1.5.4", "ssh2": "^1.17.0", "vue": "^3.4.0", "vue-router": "^4.2.0", "ipaddr.js": "^1.9.1" }, "devDependencies": { "vite": "^6.4.3" } }