{
  "name": "backend",
  "version": "0.0.1",
  "description": "FF AI Workspace 后端服务 - 基于 NestJS + Prisma + Temporal",
  "author": "FF AI Workspace Team",
  "private": true,
  "license": "UNLICENSED",
  "engines": {
    "node": ">=22"
  },
  "scripts": {
    "//build": "=== 构建命令 ===",
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "//start": "=== 启动服务 ===",
    "start": "nest start",
    "start:dev": "nodemon --watch src --ext ts --delay 1500ms --signal SIGTERM --exec ts-node --transpile-only -r tsconfig-paths/register src/main.ts",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "//worker": "=== Temporal Worker ===",
    "worker": "ts-node --project tsconfig.json -r tsconfig-paths/register src/core/workflow/temporal/worker.ts",
    "worker:dev": "nodemon --watch src --exec ts-node --project tsconfig.json -r tsconfig-paths/register src/core/workflow/temporal/worker.ts",
    "start:temporal": "ts-node --project tsconfig.json -r tsconfig-paths/register src/core/workflow/temporal/worker.ts",
    "//prisma": "=== Prisma 命令 ===",
    "prisma:generate": "dotenv -e .env -- prisma generate",
    "prisma:migrate": "dotenv -e .env -- prisma migrate dev",
    "prisma:migrate:create": "dotenv -e .env -- prisma migrate dev --create-only",
    "prisma:migrate:deploy": "dotenv -e .env -- prisma migrate deploy",
    "prisma:migrate:status": "dotenv -e .env -- prisma migrate status",
    "prisma:migrate:resolve": "dotenv -e .env -- prisma migrate resolve",
    "prisma:migrate:diff": "dotenv -e .env -- prisma migrate diff --from-schema-datasource prisma/schema --to-schema-datamodel prisma/schema --script",
    "prisma:studio": "dotenv -e .env -- prisma studio",
    "//database": "=== 数据库操作 ===",
    "db:push": "dotenv -e .env -- prisma db push",
    "db:push:force": "dotenv -e .env -- prisma db push --accept-data-loss",
    "db:seed": "ts-node prisma/seed.ts",
    "db:seed:iam": "ts-node prisma/seeds/iam-seed.ts",
    "db:seed:positions": "ts-node prisma/seeds/positions.seed.ts",
    "db:seed:part-groups": "ts-node prisma/seeds/part-groups-seed.ts",
    "db:seed:dingtalk": "ts-node prisma/seeds/dingtalk-sync.seed.ts",
    "db:seed:sync-bot": "ts-node prisma/seeds/sync-bot.seed.ts",
    "db:seed:robot-fields": "ts-node prisma/seeds/robot-field-defs.seed.ts",
    "db:seed:robot-master": "dotenv -e .env -- ts-node prisma/seeds/robot-manager-master-seed.ts",
    "db:seed:audit-log": "ts-node prisma/seeds/audit-log.seed.ts",
    "db:reset": "dotenv -e .env -- prisma migrate reset",
    "db:clean": "echo '⚠️  警告：此操作会删除所有数据！请在项目根目录使用 npm run cleanup'",
    "//init": "=== 初始化脚本 ===",
    "init:all": "dotenv -e .env -- ts-node scripts/backend/init-all.ts",
    "init:permissions": "cd .. && dotenv -e backend/.env -- env NODE_PATH=$(pwd)/backend/node_modules ts-node --transpile-only --project scripts/backend/init/tsconfig.json scripts/backend/init/init-permissions.ts",
    "init:notification-templates": "dotenv -e .env -- ts-node ../scripts/backend/init/init-notification-templates.ts",
    "seed:eai-orgchart": "cd .. && dotenv -e backend/.env -- env NODE_PATH=$(pwd)/backend/node_modules ts-node --transpile-only --project scripts/backend/data-seed/tsconfig.json scripts/backend/data-seed/eai-orgchart-seed.ts",
    "init:itadmin": "cd .. && dotenv -e backend/.env -- env NODE_PATH=$(pwd)/backend/node_modules ts-node --transpile-only --project scripts/backend/init/tsconfig.json scripts/backend/init/init-itadmin.ts",
    "//fix": "=== 修复脚本 ===",
    "fix:itadmin-role": "cd .. && dotenv -e backend/.env -- env NODE_PATH=$(pwd)/backend/node_modules ts-node --transpile-only --project scripts/backend/init/tsconfig.json scripts/backend/fix/fix-itadmin-role.ts",
    "clear:departments": "dotenv -e .env -- ts-node ../scripts/backend/data/clear-departments.ts",
    "clean:org-members": "dotenv -e .env -- ts-node ../scripts/backend/data/clean-org-members.ts"
  },
  "dependencies": {
    "@aws-sdk/client-s3": "^3.762.0",
    "@aws-sdk/client-ses": "^3.692.0",
    "@aws-sdk/s3-request-presigner": "^3.762.0",
    "@azure/identity": "^4.13.0",
    "@langchain/core": "^1.1.4",
    "@langchain/openai": "^1.1.3",
    "@microsoft/microsoft-graph-client": "^3.0.7",
    "@modelcontextprotocol/sdk": "^1.29.0",
    "@nestjs/common": "^11.0.1",
    "@nestjs/config": "^4.0.2",
    "@nestjs/core": "^11.0.1",
    "@nestjs/jwt": "^11.0.1",
    "@nestjs/passport": "^11.0.5",
    "@nestjs/platform-express": "^11.0.1",
    "@nestjs/schedule": "^6.0.1",
    "@nestjs/swagger": "^11.2.3",
    "@nestjs/throttler": "^6.5.0",
    "@prisma/client": "^6.19.1",
    "@temporalio/activity": "^1.13.2",
    "@temporalio/client": "^1.13.2",
    "@temporalio/worker": "^1.13.2",
    "@temporalio/workflow": "^1.13.2",
    "@types/handlebars": "^4.0.40",
    "@types/js-yaml": "^4.0.9",
    "axios": "^1.13.6",
    "bcrypt": "^6.0.0",
    "bull": "^4.16.5",
    "bullmq": "^5.63.2",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.3",
    "cookie-parser": "^1.4.7",
    "csv-parse": "^6.2.1",
    "date-fns": "^4.1.0",
    "date-fns-tz": "^3.2.0",
    "file-type": "^16.5.4",
    "handlebars": "^4.7.8",
    "ioredis": "^5.10.1",
    "js-yaml": "^4.1.1",
    "langchain": "^1.1.5",
    "ldapts": "^8.0.9",
    "openai": "^6.10.0",
    "openid-client": "^6.8.4",
    "otplib": "^13.4.0",
    "passport": "^0.7.0",
    "passport-jwt": "^4.0.1",
    "pdf-parse": "^2.4.5",
    "pg": "^8.16.3",
    "qrcode": "^1.5.4",
    "reflect-metadata": "^0.2.2",
    "rxjs": "^7.8.1",
    "soap": "^1.8.0",
    "uuid": "^9.0.1",
    "whatwg-url": "^13.0.0",
    "winston": "^3.18.3",
    "winston-daily-rotate-file": "^5.0.0",
    "xlsx": "^0.18.5",
    "zod": "^4.4.3"
  },
  "devDependencies": {
    "@eslint/eslintrc": "^3.2.0",
    "@eslint/js": "^9.18.0",
    "@jest/test-sequencer": "^30.2.0",
    "@nestjs/cli": "^11.0.0",
    "@nestjs/schematics": "^11.0.0",
    "@nestjs/testing": "^11.0.1",
    "@types/bcrypt": "^6.0.0",
    "@types/cookie-parser": "^1.4.10",
    "@types/express": "^5.0.0",
    "@types/jest": "^30.0.0",
    "@types/node": "^22.10.7",
    "@types/passport-jwt": "^4.0.1",
    "@types/qrcode": "^1.5.5",
    "@types/supertest": "^6.0.2",
    "@types/uuid": "^10.0.0",
    "dotenv": "^16.4.7",
    "dotenv-cli": "^11.0.0",
    "eslint": "^9.18.0",
    "eslint-config-prettier": "^10.0.1",
    "eslint-plugin-prettier": "^5.2.2",
    "globals": "^16.0.0",
    "jest": "^30.0.0",
    "nodemon": "^3.1.11",
    "prettier": "^3.4.2",
    "prisma": "^6.19.0",
    "source-map-support": "^0.5.21",
    "supertest": "^7.0.0",
    "ts-jest": "^29.2.5",
    "ts-loader": "^9.5.2",
    "ts-node": "^10.9.2",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.7.3",
    "typescript-eslint": "^8.20.0"
  }
}
