项目结构
Monorepo 结构
Section titled “Monorepo 结构”IAM/├── apps/│ ├── web/│ │ ├── e2e/ # Playwright 用例│ │ └── src/│ │ ├── app/ # Next.js App Router 页面与代理 route│ │ ├── components/ # shadcn/ui 与业务组件│ │ ├── hooks/ # 客户端 hooks│ │ ├── lib/ # auth、代理、访问控制与工具│ │ └── utils/ # tRPC 客户端│ ├── server/│ │ └── src/│ │ ├── index.ts # Hono Worker 应用与全部外部路由│ │ └── node.ts # Node 本地运行入口│ └── docs/│ └── src/content/docs/ # Starlight Markdown/MDX├── packages/│ ├── contracts/src/ # 前后端共享契约与纯函数│ ├── api/src/routers/ # tRPC 领域路由│ ├── auth/src/ # Better Auth、企微、邮件、限流和授权│ ├── db/src/│ │ ├── schema/ # auth 与 wecom schema│ │ └── migrations/ # Drizzle migrations│ ├── env/src/ # server.ts / web.ts│ └── config/ # 共享 tsconfig├── README.md├── TODO.md├── turbo.json└── pnpm-workspace.yamlapps/web
Section titled “apps/web”- 登录、资料补全、个人设置、我的应用和管理控制台
- 通过 Better Auth Client 调用同源
/api/auth/* - 通过 tRPC + TanStack Query 获取服务端数据
/api/[...path]和/trpc/[...path]代理到iam-apisrc/proxy.ts处理页面登录态、资料完整性与管理端路由权限
Web 不得运行时导入 @IAM/auth、@IAM/db、@IAM/env/server,对 @IAM/api 只允许类型导入。
apps/server
Section titled “apps/server”- Better Auth handler 与 OAuth/OIDC 端点
- tRPC endpoint
- RFC 8414 / OIDC discovery
- R2 上传与文件读取
- 企业微信通讯录回调和内部全量同步
- 健康检查、CORS 和 Worker Binding 注入
apps/docs
Section titled “apps/docs”Astro Starlight 文档站。内容、导航和根 README/TODO 应随代码能力同步更新。
| Package | 职责 |
|---|---|
@IAM/contracts |
共享类型、Zod schema、枚举和不依赖服务端的纯函数 |
@IAM/api |
tRPC context、权限守卫及 users/oauth-clients/sessions/dashboard 等路由 |
@IAM/auth |
Better Auth 实例、插件、企微身份、应用授权、邮件、审计和限流 |
@IAM/db |
Drizzle 数据库实例、auth/wecom schema 与 migrations |
@IAM/env |
服务端和前端环境变量校验 |
@IAM/config |
共享 TypeScript 配置 |
apps/web ──► @IAM/contracts ◄── @IAM/api ──► @IAM/auth ──► @IAM/db ──► @IAM/env ▲ └──────────── apps/server ────────────────────────────────►边界原则:
- 前后端共享类型、Zod schema 和纯函数放入
@IAM/contracts。 - 认证标准能力优先调用 Better Auth 原生 API。
- 业务数据从 Web 端优先通过 tRPC 获取。
- 数据库与 secret 只在 Server/API/Auth/DB 层使用。
- 公开:
/login、/oauth-login、/consent、/forgot-password、/reset-password - 登录用户:
/apps、/profile、/complete-profile - 管理端:
/admin/dashboard、users、organization、roles、sessions、audit-logs、oauth-clients、consents、settings