From 8f473c2b6cf053db0ebef3ec3103942d7e526a63 Mon Sep 17 00:00:00 2001 From: aiyimickey <39365912+aiyimickey@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:47:20 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..cbb61c6 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# shared — TLYQ 共享标准库 + +tlyq.ai 各站点共享的标准库,消除代码重复,统一基础设施实现。 + +## 目录结构 + +``` +shared/ +├── lib/ +│ ├── auth/ # 认证标准库 +│ │ ├── config.ts # config 工厂(createAuthConfig) +│ │ ├── jwt.ts # JWT 签发/验证 +│ │ ├── ldap.ts # LDAP 认证 +│ │ ├── middleware.ts # middleware 工厂(createMiddleware) +│ │ ├── oidc.ts # OIDC 客户端 +│ │ ├── types.ts # 类型定义 +│ │ └── user-sync.ts # OIDC 用户同步 +│ ├── audit/ # 审计日志标准库 +│ │ ├── audit-schema.ts # 表结构常量 +│ │ └── write-audit-log.ts # writeAuditLog + diffObjects + getClientIP +│ ├── wechat/ # 企业微信推送 +│ │ ├── wechat-pusher.ts # WeChatPusher 类 +│ │ └── message-formatter.ts # 消息格式化工具 +│ ├── alert/ # 告警管理 +│ │ ├── alert-manager.ts # AlertManager(去重/冷却/免打扰) +│ │ ├── health-checker.ts # HealthChecker(HTTP/Docker) +│ │ └── types.ts # 类型定义 +│ └── db/ # 数据库 schema +│ └── alert-schema.ts # CREATE TABLE 常量 +└── ui/ # 共享 UI 组件 + └── login-page.tsx # 统一登录页 +``` + +## 使用方式 + +### 1. 创建 symlink + +```bash +ln -sf ../shared {站点目录}/shared +``` + +### 2. 配置 tsconfig + +```json +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@shared/*": ["./shared/*"] + } + } +} +``` + +### 3. 引用 + +```typescript +import { createAuthConfig } from '@shared/lib/auth/config' +import { createMiddleware } from '@shared/lib/auth/middleware' +import { writeAuditLog } from '@shared/lib/audit/write-audit-log' +import { WeChatPusher } from '@shared/lib/wechat/wechat-pusher' +``` + +## 设计原则 + +- 零业务依赖:纯基础设施,不含站点特有逻辑 +- 配置驱动:所有环境变量通过参数传入,不硬编码 +- 接口稳定:包装器保持各站点原有调用方式不变 +- Edge Runtime 兼容:middleware 仅用 atob,不用 Node.js crypto