@zmzai/db
v0.1.0
Published
zmzai cloud 共享 Mongoose 模型与认证原语——muzhi / zmzai-auth / zmzai-relay 复用,schema 单一来源
Downloads
18
Maintainers
Readme
@zmzai/db
zmzai cloud 共享数据层。muzhi / zmzai-auth / zmzai-relay 三服务共用同一 MongoDB
(muzhi_production),User / Session 的 Mongoose schema 必须一致;此包是 schema
的唯一来源,消除三处镜像副本(此前各 app 用 strict: "throw" 靠纪律同步)。
内容
models/user.ts—users集合:name / email / passwordHash / role / status / emailVerifiedmodels/session.ts—sessions集合:userId / tokenHash / expiresAt / lastSeenAt(TTL 自动过期)models/account.ts—accounts集合:OAuth 身份与 user 绑定(provider + providerAccountId唯一)auth/token.ts— 纯函数generateToken()/hashToken(secret, token)(sha256)
在各 app 接入
# package.json
"@zmzai/db": "github:Ulanxx/zmzai-db#main"// next.config.ts —— Next 需显式 transpile 私有 TS 包
const nextConfig = { transpilePackages: ["@zmzai/db"], /* ... */ };import { UserModel, SessionModel, AccountModel, hashToken, generateToken } from "@zmzai/db";schema drift 修复说明
UserStatus 此前 muzhi 用 ["active","disabled"](canonical,写入方),
zmzai-auth / zmzai-relay 镜像误用 ["active","suspended"]。本包统一为
["active","disabled"]。由于 auth/relay 只读不写 status,理论上无 suspended
脏数据;接入前可执行 db.users.distinct("status") 确认,若存在则:
db.users.updateMany({ status: "suspended" }, { $set: { status: "disabled" } })