{ "name": "backend", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "nodemon --exec ts-node src/index.ts", "build": "tsc", "start": "node dist/index.js", "prisma:generate": "prisma generate", "prisma:migrate": "prisma migrate dev", "prisma:migrate:deploy": "prisma migrate deploy", "prisma:studio": "prisma studio", "prisma:seed": "ts-node prisma/seed.ts", "generate-covers": "ts-node scripts/generate-missing-covers.ts", "backfill-banner-watermark": "ts-node scripts/backfill-banner-watermark.ts", "backfill-theme-colors": "ts-node scripts/backfill-theme-colors.ts", "test:chat-vs-completions": "ts-node scripts/test-chat-vs-completions.ts", "build:prod": "npm run prisma:generate && npm run build", "deploy:prod": "npm run build:prod && npm run prisma:migrate:deploy", "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", "test:unit": "jest --testPathPatterns=__tests__/services", "test:integration": "jest --testPathPatterns=__tests__/integration", "test:call-records": "node scripts/verify-call-records-api.js", "playground:xhs-cover": "ts-node scripts/xhs-cover-playground.ts", "playground:xhs-generate": "ts-node scripts/generate-xhs-cover-assets.ts", "playground": "npm run playground:xhs-generate && npm run dev" }, "prisma": { "seed": "ts-node prisma/seed.ts" }, "keywords": [], "author": "", "license": "ISC", "type": "commonjs", "dependencies": { "@alicloud/pop-core": "^1.8.0", "@prisma/client": "^6.19.0", "@types/multer": "^2.0.0", "@types/uuid": "^10.0.0", "@xenova/transformers": "^2.17.2", "ali-oss": "^6.23.0", "axios": "^1.13.2", "bcryptjs": "^3.0.3", "canvas": "^3.2.1", "cors": "^2.8.5", "dotenv": "^17.2.3", "epub": "^1.3.0", "express": "^5.2.1", "express-rate-limit": "^7.5.1", "joi": "^18.0.2", "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.0", "mammoth": "^1.11.0", "multer": "^2.0.2", "openai": "^6.16.0", "pdf-parse": "^1.1.1", "prisma": "^6.19.0", "uuid": "^13.0.0", "winston": "^3.18.3" }, "devDependencies": { "@types/ali-oss": "^6.23.2", "@types/axios": "^0.9.36", "@types/bcryptjs": "^2.4.6", "@types/cors": "^2.8.19", "@types/express": "^5.0.6", "@types/jest": "^30.0.0", "@types/jsonwebtoken": "^9.0.10", "@types/node": "^24.10.1", "@types/pdf-parse": "^1.1.5", "@types/supertest": "^6.0.3", "@typescript-eslint/eslint-plugin": "^8.48.1", "@typescript-eslint/parser": "^8.48.1", "eslint": "^9.39.1", "jest": "^30.2.0", "nodemon": "^3.1.11", "prettier": "^3.7.4", "supertest": "^7.2.2", "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3" } }