{"_id":"@anycms/oauth-client","_rev":"2-9750d233f448df98b2ca9a48ce31d8f8","name":"@anycms/oauth-client","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@anycms/oauth-client","version":"0.1.0","keywords":["oauth2","bff","anycms","auth","organization"],"license":"MIT","_id":"@anycms/oauth-client@0.1.0","maintainers":[{"name":"wuliangdi","email":"wu@liangdi.me"}],"dist":{"shasum":"6faf9f237404bc91b727236a919e68bb83159db0","tarball":"https://registry.npmjs.org/@anycms/oauth-client/-/oauth-client-0.1.0.tgz","fileCount":1,"integrity":"sha512-bS7TjqzNxic9EPnb4GjFr4K3KRmj7oScvdyRcD7HMlHbKItkpt+dpP2JNTmWAtIYBJtspAYunaMdK4EPdm6VKA==","signatures":[{"sig":"MEUCIBX8wTDKFfllOZgLIOk/7lj7F8S4ZoTJ62sannoWPqBtAiEA1Xik5QkP3aFXcxgBeaNjWffmJHT0KRte0os5BU7Sgus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264},"type":"module","_from":"file:anycms-oauth-client-0.1.0.tgz","exports":{".":"./src/index.ts"},"_npmUser":{"name":"wuliangdi","email":"wu@liangdi.me"},"_resolved":"/tmp/e065faba1a87c1d6f71a2d7649516462/anycms-oauth-client-0.1.0.tgz","_integrity":"sha512-bS7TjqzNxic9EPnb4GjFr4K3KRmj7oScvdyRcD7HMlHbKItkpt+dpP2JNTmWAtIYBJtspAYunaMdK4EPdm6VKA==","_npmVersion":"10.9.2","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/oauth-client_0.1.0_1779432836981_0.8467155062951128","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anycms/oauth-client","version":"0.1.1","type":"module","exports":{".":"./src/index.ts"},"keywords":["oauth2","bff","anycms","auth","organization"],"license":"MIT","_id":"@anycms/oauth-client@0.1.1","description":"OAuth2 认证 + 组织架构 API 客户端，面向 AnyCMS BFF 代理层。","_integrity":"sha512-8ZE9z2X9pxA6mf5CX/B6smI2rD1ibz7R3a33j6ptaY1hSH6FxcZA55hlQvMMjYm2EHtkEaBUx1DTr1Js6QKT7A==","_resolved":"/tmp/0fb3f9626f8ef61527a2340b940b47c6/anycms-oauth-client-0.1.1.tgz","_from":"file:anycms-oauth-client-0.1.1.tgz","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-8ZE9z2X9pxA6mf5CX/B6smI2rD1ibz7R3a33j6ptaY1hSH6FxcZA55hlQvMMjYm2EHtkEaBUx1DTr1Js6QKT7A==","shasum":"169b7462b517c25ed81c0d8a2bed347b9a81568e","tarball":"https://registry.npmjs.org/@anycms/oauth-client/-/oauth-client-0.1.1.tgz","fileCount":2,"unpackedSize":4013,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFLPbMsJw3DflFBBdr9GyP4HyvtIdXFDhd5Q0Mu9m3nEAiEAwu4ThpjU886U2QvEvfRSPEa/Bw6QPdsew8QTN4/lwvQ="}]},"_npmUser":{"name":"wuliangdi","email":"wu@liangdi.me"},"directories":{},"maintainers":[{"name":"wuliangdi","email":"wu@liangdi.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/oauth-client_0.1.1_1779434312610_0.04977220415679251"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-22T06:53:56.785Z","modified":"2026-05-22T07:18:32.885Z","0.1.0":"2026-05-22T06:53:57.120Z","0.1.1":"2026-05-22T07:18:32.747Z"},"license":"MIT","keywords":["oauth2","bff","anycms","auth","organization"],"maintainers":[{"name":"wuliangdi","email":"wu@liangdi.me"}],"readme":"# @anycms/oauth-client\n\nOAuth2 认证 + 组织架构 API 客户端，面向 AnyCMS BFF 代理层。\n\n## 安装\n\n```bash\npnpm add @anycms/oauth-client\n```\n\n## 快速开始\n\n### 默认实例（推荐）\n\n开箱即用，使用相对路径 + `credentials: \"include\"` 自动携带 cookie：\n\n```typescript\nimport { authApi, companyApi, departmentApi, orgUserApi, permissionApi } from \"@anycms/oauth-client\";\n\n// 获取当前登录用户\nconst res = await authApi.me();\nconsole.log(res.data); // { sub, name, nickname, email, ... }\n```\n\n### 自定义配置\n\n```typescript\nimport { createOAuthClient } from \"@anycms/oauth-client\";\n\nconst client = createOAuthClient({\n  baseUrl: \"https://api.example.com\",  // 可选，默认 \"\"\n  credentials: \"include\",              // 可选，默认 \"include\"\n});\n\nclient.auth.me();\nclient.org.companyApi.list({ page: 1, pageSize: 20 });\n```\n\n也可以单独创建 Auth 或 Org API：\n\n```typescript\nimport { createAuthApi, createOrgApis } from \"@anycms/oauth-client\";\n\nconst auth = createAuthApi({ baseUrl: \"https://api.example.com\" });\nconst { companyApi, departmentApi, orgUserApi, permissionApi } = createOrgApis({ baseUrl: \"https://api.example.com\" });\n```\n\n## API 参考\n\n### AuthApi — 认证\n\n| 方法 | 说明 | 返回类型 |\n|------|------|----------|\n| `getLoginUrl()` | 获取登录跳转 URL（`/api/auth/login`） | `string` |\n| `me()` | 获取当前登录用户信息 | `Promise<PaginatedResponse<OAuthUser>>` |\n| `refresh()` | 刷新 token | `Promise<PaginatedResponse<{ expiresIn: number }>>` |\n| `logout()` | 退出登录 | `Promise<PaginatedResponse<{ message: string }>>` |\n\n### OrgApis — 组织架构\n\n#### companyApi\n\n| 方法 | 说明 |\n|------|------|\n| `list(params?)` | 公司列表，支持 `{ page, pageSize }` |\n| `get(id)` | 按 ID 获取公司 |\n| `getByCode(code)` | 按编码获取公司 |\n\n#### departmentApi\n\n| 方法 | 说明 |\n|------|------|\n| `get(id)` | 获取部门详情 |\n| `tree(companyId)` | 获取部门树形结构 |\n| `ancestors(id)` | 获取祖先部门链 |\n| `descendants(id)` | 获取后代部门 |\n| `users(id, params?)` | 获取部门下用户，支持分页 |\n| `permissions(id)` | 获取部门权限规则 |\n\n#### orgUserApi\n\n| 方法 | 说明 |\n|------|------|\n| `departments(userId)` | 获取用户所属部门 |\n| `list(params?)` | 用户列表（含部门信息） |\n| `registeredUsers(params?)` | 注册用户列表 |\n| `permissions(userId, resourceType)` | 获取用户权限 |\n| `roles(userId, params?)` | 获取用户角色 |\n| `rbacPermissions(userId, params?)` | 获取用户 RBAC 权限 |\n\n#### permissionApi\n\n| 方法 | 说明 |\n|------|------|\n| `check(req)` | 权限检查 |\n| `definitions(params?)` | 权限定义列表 |\n\n### 权限检查请求\n\n```typescript\nconst result = await permissionApi.check({\n  userId: \"user-123\",\n  resourceType: \"agent\",\n  resourceId: \"agent-456\",       // 可选\n  requiredPermission: \"edit\",    // \"read\" | \"use\" | \"edit\" | \"manage\" | \"owner\"\n});\n// result.data: { hasPermission, matchedScope, matchedDepartmentId }\n```\n\n## 类型\n\n```typescript\nimport type {\n  OAuthUser,\n  Company,\n  Department,\n  DepartmentTreeNode,\n  UserDepartment,\n  RegisteredUser,\n  PermissionCheckRequest,\n  PermissionCheckResult,\n  DepartmentPermission,\n  UserRole,\n  PermissionDefinition,\n  ApiResponse,\n  PaginatedResponse,\n  ClientConfig,\n  AuthApi,\n  OrgApis,\n  OAuthClient,\n} from \"@anycms/oauth-client\";\n```\n\n## 认证方式\n\n浏览器场景推荐 cookie 方式（默认 `credentials: \"include\"`），也支持：\n\n1. **Cookie**（推荐）— 浏览器自动携带 `oauth2_sid`\n2. **Authorization Header** — `Bearer <session_id>`\n3. **Query 参数** — `?token=<session_id>`（适用于 iframe、WebSocket）\n\n## License\n\nMIT\n","readmeFilename":"README.md","description":"OAuth2 认证 + 组织架构 API 客户端，面向 AnyCMS BFF 代理层。"}