{ "name": "api", "version": "0.0.0", "private": true, "scripts": { "dev": "tsx watch src/index.ts", "build": "tsc --build", "start": "pnpm exec tsx src/index.ts", "test": "vitest run", "test:ai": "vitest run test/regression/ai-pedagogy.test.ts", "test:watch": "vitest" }, "dependencies": { "@aws-sdk/client-s3": "^3.995.0", "@bull-board/api": "^7.0.0", "@bull-board/fastify": "^7.0.0", "@fastify/cors": "^8.3.0", "@fastify/jwt": "^8.0.1", "@fastify/multipart": "^8.3.0", "@fastify/rate-limit": "^9.1.0", "@fastify/static": "^7.0.4", "@fastify/view": "8", "@google/generative-ai": "^0.24.1", "@logtail/node": "^0.5.8", "@logtail/pino": "^0.5.8", "@prisma/client": "^5.0.0", "@repo/ai-sdk": "workspace:*", "@repo/database": "workspace:*", "@repo/prompts": "workspace:*", "@repo/shared-types": "workspace:*", "@types/bcrypt": "^6.0.0", "axios": "^1.13.5", "bcrypt": "^6.0.0", "bullmq": "^5.1.0", "diff": "^8.0.3", "dotenv": "^16.6.1", "fast-levenshtein": "^3.0.0", "fastify": "^4.29.1", "fastify-plugin": "^4.5.1", "ioredis": "^5.9.3", "node-cron": "^4.2.1", "openai": "^4.0.0", "pino-pretty": "^13.1.3", "pptxgenjs": "^3.12.0", "puppeteer": "^22.0.0", "web-push": "^3.6.7", "xlsx": "^0.18.5", "zod": "^3.25.76" }, "devDependencies": { "@repo/tsconfig": "workspace:*", "@types/diff": "^8.0.0", "@types/dotenv": "^8.2.3", "@types/fast-levenshtein": "^0.0.4", "@types/node": "^20.0.0", "@types/node-cron": "^3.0.11", "@types/web-push": "^3.6.4", "@vitest/ui": "^4.0.18", "tsx": "^3.0.0", "typescript": "^5.0.0", "vitest": "^4.0.18" } }