{ "name": "recipe-app-backend", "version": "1.0.0", "description": "Backend Freedge (TypeScript)", "main": "dist/server.js", "scripts": { "start": "node dist/server.js", "dev": "tsx watch src/server.ts", "build": "tsc", "typecheck": "tsc --noEmit", "migrate": "prisma migrate dev", "studio": "prisma studio", "stripe:setup": "tsx scripts/setup-stripe.ts", "stripe:setup:write": "tsx scripts/setup-stripe.ts --write-env", "stripe:listen": "stripe listen --forward-to localhost:3000/stripe/webhook", "stripe:sync": "tsx scripts/sync-subscription.ts", "lint": "eslint src", "format": "prettier --write \"src/**/*.{ts,json}\"" }, "dependencies": { "@fastify/cors": "^8.5.0", "@fastify/helmet": "^11.1.1", "@fastify/jwt": "^7.0.0", "@fastify/multipart": "^8.0.0", "@fastify/rate-limit": "^9.1.0", "@fastify/static": "^7.0.4", "@prisma/client": "^5.0.0", "bcrypt": "^5.1.1", "dotenv": "^16.3.1", "fastify": "^4.19.0", "fastify-plugin": "^4.5.0", "google-auth-library": "^9.15.1", "minio": "^8.0.5", "nodemailer": "^6.10.0", "openai": "^4.0.0", "resend": "^4.1.2", "stripe": "^12.12.0" }, "devDependencies": { "@eslint/js": "^9.21.0", "@types/bcrypt": "^5.0.2", "@types/node": "^22.13.9", "@types/nodemailer": "^6.4.17", "eslint": "^9.21.0", "globals": "^15.15.0", "prettier": "^3.3.0", "prisma": "^5.0.0", "tsx": "^4.19.0", "typescript": "^5.7.2", "typescript-eslint": "^8.24.1" } }