@dofe/sso-contracts 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/README.md +303 -0
  2. package/dist/api/admin-setting.contract.d.ts +69 -0
  3. package/dist/api/admin-setting.contract.d.ts.map +1 -0
  4. package/dist/api/admin-setting.contract.js +29 -0
  5. package/dist/api/admin-setting.contract.js.map +1 -0
  6. package/dist/api/admin-webhook.contract.d.ts +290 -0
  7. package/dist/api/admin-webhook.contract.d.ts.map +1 -0
  8. package/dist/api/admin-webhook.contract.js +79 -0
  9. package/dist/api/admin-webhook.contract.js.map +1 -0
  10. package/dist/api/admin.contract.d.ts +895 -0
  11. package/dist/api/admin.contract.d.ts.map +1 -0
  12. package/dist/api/admin.contract.js +178 -0
  13. package/dist/api/admin.contract.js.map +1 -0
  14. package/dist/api/analytics.contract.d.ts +99 -0
  15. package/dist/api/analytics.contract.d.ts.map +1 -0
  16. package/dist/api/analytics.contract.js +45 -0
  17. package/dist/api/analytics.contract.js.map +1 -0
  18. package/dist/api/app-rbac.contract.d.ts +259 -0
  19. package/dist/api/app-rbac.contract.d.ts.map +1 -0
  20. package/dist/api/app-rbac.contract.js +106 -0
  21. package/dist/api/app-rbac.contract.js.map +1 -0
  22. package/dist/api/approval.contract.d.ts +243 -0
  23. package/dist/api/approval.contract.d.ts.map +1 -0
  24. package/dist/api/approval.contract.js +56 -0
  25. package/dist/api/approval.contract.js.map +1 -0
  26. package/dist/api/audit-log.contract.d.ts +741 -0
  27. package/dist/api/audit-log.contract.d.ts.map +1 -0
  28. package/dist/api/audit-log.contract.js +44 -0
  29. package/dist/api/audit-log.contract.js.map +1 -0
  30. package/dist/api/auth.contract.d.ts +757 -0
  31. package/dist/api/auth.contract.d.ts.map +1 -0
  32. package/dist/api/auth.contract.js +144 -0
  33. package/dist/api/auth.contract.js.map +1 -0
  34. package/dist/api/client.contract.d.ts +435 -0
  35. package/dist/api/client.contract.d.ts.map +1 -0
  36. package/dist/api/client.contract.js +90 -0
  37. package/dist/api/client.contract.js.map +1 -0
  38. package/dist/api/connector.contract.d.ts +202 -0
  39. package/dist/api/connector.contract.d.ts.map +1 -0
  40. package/dist/api/connector.contract.js +54 -0
  41. package/dist/api/connector.contract.js.map +1 -0
  42. package/dist/api/dashboard.contract.d.ts +109 -0
  43. package/dist/api/dashboard.contract.d.ts.map +1 -0
  44. package/dist/api/dashboard.contract.js +34 -0
  45. package/dist/api/dashboard.contract.js.map +1 -0
  46. package/dist/api/download.contract.d.ts +81 -0
  47. package/dist/api/download.contract.d.ts.map +1 -0
  48. package/dist/api/download.contract.js +57 -0
  49. package/dist/api/download.contract.js.map +1 -0
  50. package/dist/api/impersonation.contract.d.ts +171 -0
  51. package/dist/api/impersonation.contract.d.ts.map +1 -0
  52. package/dist/api/impersonation.contract.js +53 -0
  53. package/dist/api/impersonation.contract.js.map +1 -0
  54. package/dist/api/index.d.ts +33 -0
  55. package/dist/api/index.d.ts.map +1 -0
  56. package/dist/api/index.js +49 -0
  57. package/dist/api/index.js.map +1 -0
  58. package/dist/api/internal-app-rbac.contract.d.ts +570 -0
  59. package/dist/api/internal-app-rbac.contract.d.ts.map +1 -0
  60. package/dist/api/internal-app-rbac.contract.js +123 -0
  61. package/dist/api/internal-app-rbac.contract.js.map +1 -0
  62. package/dist/api/internal-approval.contract.d.ts +490 -0
  63. package/dist/api/internal-approval.contract.d.ts.map +1 -0
  64. package/dist/api/internal-approval.contract.js +73 -0
  65. package/dist/api/internal-approval.contract.js.map +1 -0
  66. package/dist/api/internal.contract.d.ts +1765 -0
  67. package/dist/api/internal.contract.d.ts.map +1 -0
  68. package/dist/api/internal.contract.js +316 -0
  69. package/dist/api/internal.contract.js.map +1 -0
  70. package/dist/api/message.contract.d.ts +127 -0
  71. package/dist/api/message.contract.d.ts.map +1 -0
  72. package/dist/api/message.contract.js +85 -0
  73. package/dist/api/message.contract.js.map +1 -0
  74. package/dist/api/mfa.contract.d.ts +322 -0
  75. package/dist/api/mfa.contract.d.ts.map +1 -0
  76. package/dist/api/mfa.contract.js +79 -0
  77. package/dist/api/mfa.contract.js.map +1 -0
  78. package/dist/api/oidc.contract.d.ts +69 -0
  79. package/dist/api/oidc.contract.d.ts.map +1 -0
  80. package/dist/api/oidc.contract.js +44 -0
  81. package/dist/api/oidc.contract.js.map +1 -0
  82. package/dist/api/rbac.contract.d.ts +413 -0
  83. package/dist/api/rbac.contract.d.ts.map +1 -0
  84. package/dist/api/rbac.contract.js +151 -0
  85. package/dist/api/rbac.contract.js.map +1 -0
  86. package/dist/api/risk-words.contract.d.ts +40 -0
  87. package/dist/api/risk-words.contract.d.ts.map +1 -0
  88. package/dist/api/risk-words.contract.js +35 -0
  89. package/dist/api/risk-words.contract.js.map +1 -0
  90. package/dist/api/setting.contract.d.ts +302 -0
  91. package/dist/api/setting.contract.d.ts.map +1 -0
  92. package/dist/api/setting.contract.js +105 -0
  93. package/dist/api/setting.contract.js.map +1 -0
  94. package/dist/api/sign-in-experience.contract.d.ts +156 -0
  95. package/dist/api/sign-in-experience.contract.d.ts.map +1 -0
  96. package/dist/api/sign-in-experience.contract.js +29 -0
  97. package/dist/api/sign-in-experience.contract.js.map +1 -0
  98. package/dist/api/sign.contract.d.ts +834 -0
  99. package/dist/api/sign.contract.d.ts.map +1 -0
  100. package/dist/api/sign.contract.js +227 -0
  101. package/dist/api/sign.contract.js.map +1 -0
  102. package/dist/api/sms.contract.d.ts +150 -0
  103. package/dist/api/sms.contract.d.ts.map +1 -0
  104. package/dist/api/sms.contract.js +76 -0
  105. package/dist/api/sms.contract.js.map +1 -0
  106. package/dist/api/system.contract.d.ts +69 -0
  107. package/dist/api/system.contract.d.ts.map +1 -0
  108. package/dist/api/system.contract.js +42 -0
  109. package/dist/api/system.contract.js.map +1 -0
  110. package/dist/api/task.contract.d.ts +106 -0
  111. package/dist/api/task.contract.d.ts.map +1 -0
  112. package/dist/api/task.contract.js +47 -0
  113. package/dist/api/task.contract.js.map +1 -0
  114. package/dist/api/tenant.contract.d.ts +855 -0
  115. package/dist/api/tenant.contract.d.ts.map +1 -0
  116. package/dist/api/tenant.contract.js +143 -0
  117. package/dist/api/tenant.contract.js.map +1 -0
  118. package/dist/api/uploader.contract.d.ts +232 -0
  119. package/dist/api/uploader.contract.d.ts.map +1 -0
  120. package/dist/api/uploader.contract.js +75 -0
  121. package/dist/api/uploader.contract.js.map +1 -0
  122. package/dist/api/user-v1.contract.d.ts +237 -0
  123. package/dist/api/user-v1.contract.d.ts.map +1 -0
  124. package/dist/api/user-v1.contract.js +75 -0
  125. package/dist/api/user-v1.contract.js.map +1 -0
  126. package/dist/api/user.contract.d.ts +140 -0
  127. package/dist/api/user.contract.d.ts.map +1 -0
  128. package/dist/api/user.contract.js +51 -0
  129. package/dist/api/user.contract.js.map +1 -0
  130. package/dist/api/webhook.contract.d.ts +108 -0
  131. package/dist/api/webhook.contract.d.ts.map +1 -0
  132. package/dist/api/webhook.contract.js +60 -0
  133. package/dist/api/webhook.contract.js.map +1 -0
  134. package/dist/base.d.ts +91 -0
  135. package/dist/base.d.ts.map +1 -0
  136. package/dist/base.js +68 -0
  137. package/dist/base.js.map +1 -0
  138. package/dist/errors/codes.d.ts +183 -0
  139. package/dist/errors/codes.d.ts.map +1 -0
  140. package/dist/errors/codes.js +41 -0
  141. package/dist/errors/codes.js.map +1 -0
  142. package/dist/errors/domains/auth.errors.d.ts +8 -0
  143. package/dist/errors/domains/auth.errors.d.ts.map +1 -0
  144. package/dist/errors/domains/auth.errors.js +14 -0
  145. package/dist/errors/domains/auth.errors.js.map +1 -0
  146. package/dist/errors/domains/common.errors.d.ts +71 -0
  147. package/dist/errors/domains/common.errors.d.ts.map +1 -0
  148. package/dist/errors/domains/common.errors.js +205 -0
  149. package/dist/errors/domains/common.errors.js.map +1 -0
  150. package/dist/errors/domains/index.d.ts +7 -0
  151. package/dist/errors/domains/index.d.ts.map +1 -0
  152. package/dist/errors/domains/index.js +24 -0
  153. package/dist/errors/domains/index.js.map +1 -0
  154. package/dist/errors/domains/tenant.errors.d.ts +8 -0
  155. package/dist/errors/domains/tenant.errors.d.ts.map +1 -0
  156. package/dist/errors/domains/tenant.errors.js +14 -0
  157. package/dist/errors/domains/tenant.errors.js.map +1 -0
  158. package/dist/errors/domains/user.errors.d.ts +21 -0
  159. package/dist/errors/domains/user.errors.d.ts.map +1 -0
  160. package/dist/errors/domains/user.errors.js +50 -0
  161. package/dist/errors/domains/user.errors.js.map +1 -0
  162. package/dist/errors/error-response.d.ts +116 -0
  163. package/dist/errors/error-response.d.ts.map +1 -0
  164. package/dist/errors/error-response.js +128 -0
  165. package/dist/errors/error-response.js.map +1 -0
  166. package/dist/errors/index.d.ts +9 -0
  167. package/dist/errors/index.d.ts.map +1 -0
  168. package/dist/errors/index.js +29 -0
  169. package/dist/errors/index.js.map +1 -0
  170. package/dist/errors/messages.d.ts +26 -0
  171. package/dist/errors/messages.d.ts.map +1 -0
  172. package/dist/errors/messages.js +224 -0
  173. package/dist/errors/messages.js.map +1 -0
  174. package/dist/index.d.ts +14 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +34 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/schemas/admin-system.schema.d.ts +58 -0
  179. package/dist/schemas/admin-system.schema.d.ts.map +1 -0
  180. package/dist/schemas/admin-system.schema.js +40 -0
  181. package/dist/schemas/admin-system.schema.js.map +1 -0
  182. package/dist/schemas/admin-webhook.schema.d.ts +129 -0
  183. package/dist/schemas/admin-webhook.schema.d.ts.map +1 -0
  184. package/dist/schemas/admin-webhook.schema.js +64 -0
  185. package/dist/schemas/admin-webhook.schema.js.map +1 -0
  186. package/dist/schemas/admin.schema.d.ts +255 -0
  187. package/dist/schemas/admin.schema.d.ts.map +1 -0
  188. package/dist/schemas/admin.schema.js +164 -0
  189. package/dist/schemas/admin.schema.js.map +1 -0
  190. package/dist/schemas/analytics.schema.d.ts +144 -0
  191. package/dist/schemas/analytics.schema.d.ts.map +1 -0
  192. package/dist/schemas/analytics.schema.js +69 -0
  193. package/dist/schemas/analytics.schema.js.map +1 -0
  194. package/dist/schemas/app-rbac.schema.d.ts +125 -0
  195. package/dist/schemas/app-rbac.schema.d.ts.map +1 -0
  196. package/dist/schemas/app-rbac.schema.js +68 -0
  197. package/dist/schemas/app-rbac.schema.js.map +1 -0
  198. package/dist/schemas/approval.schema.d.ts +134 -0
  199. package/dist/schemas/approval.schema.d.ts.map +1 -0
  200. package/dist/schemas/approval.schema.js +60 -0
  201. package/dist/schemas/approval.schema.js.map +1 -0
  202. package/dist/schemas/audit-log.schema.d.ts +395 -0
  203. package/dist/schemas/audit-log.schema.d.ts.map +1 -0
  204. package/dist/schemas/audit-log.schema.js +49 -0
  205. package/dist/schemas/audit-log.schema.js.map +1 -0
  206. package/dist/schemas/auth.schema.d.ts +110 -0
  207. package/dist/schemas/auth.schema.d.ts.map +1 -0
  208. package/dist/schemas/auth.schema.js +100 -0
  209. package/dist/schemas/auth.schema.js.map +1 -0
  210. package/dist/schemas/client.schema.d.ts +103 -0
  211. package/dist/schemas/client.schema.d.ts.map +1 -0
  212. package/dist/schemas/client.schema.js +62 -0
  213. package/dist/schemas/client.schema.js.map +1 -0
  214. package/dist/schemas/connector.schema.d.ts +71 -0
  215. package/dist/schemas/connector.schema.d.ts.map +1 -0
  216. package/dist/schemas/connector.schema.js +35 -0
  217. package/dist/schemas/connector.schema.js.map +1 -0
  218. package/dist/schemas/dashboard.schema.d.ts +34 -0
  219. package/dist/schemas/dashboard.schema.d.ts.map +1 -0
  220. package/dist/schemas/dashboard.schema.js +34 -0
  221. package/dist/schemas/dashboard.schema.js.map +1 -0
  222. package/dist/schemas/download.schema.d.ts +42 -0
  223. package/dist/schemas/download.schema.d.ts.map +1 -0
  224. package/dist/schemas/download.schema.js +43 -0
  225. package/dist/schemas/download.schema.js.map +1 -0
  226. package/dist/schemas/impersonation.schema.d.ts +34 -0
  227. package/dist/schemas/impersonation.schema.d.ts.map +1 -0
  228. package/dist/schemas/impersonation.schema.js +37 -0
  229. package/dist/schemas/impersonation.schema.js.map +1 -0
  230. package/dist/schemas/index.d.ts +33 -0
  231. package/dist/schemas/index.d.ts.map +1 -0
  232. package/dist/schemas/index.js +51 -0
  233. package/dist/schemas/index.js.map +1 -0
  234. package/dist/schemas/internal.schema.d.ts +339 -0
  235. package/dist/schemas/internal.schema.d.ts.map +1 -0
  236. package/dist/schemas/internal.schema.js +218 -0
  237. package/dist/schemas/internal.schema.js.map +1 -0
  238. package/dist/schemas/message.schema.d.ts +117 -0
  239. package/dist/schemas/message.schema.d.ts.map +1 -0
  240. package/dist/schemas/message.schema.js +73 -0
  241. package/dist/schemas/message.schema.js.map +1 -0
  242. package/dist/schemas/mfa.schema.d.ts +52 -0
  243. package/dist/schemas/mfa.schema.d.ts.map +1 -0
  244. package/dist/schemas/mfa.schema.js +53 -0
  245. package/dist/schemas/mfa.schema.js.map +1 -0
  246. package/dist/schemas/oidc.schema.d.ts +101 -0
  247. package/dist/schemas/oidc.schema.d.ts.map +1 -0
  248. package/dist/schemas/oidc.schema.js +101 -0
  249. package/dist/schemas/oidc.schema.js.map +1 -0
  250. package/dist/schemas/prisma-enums.generated.d.ts +196 -0
  251. package/dist/schemas/prisma-enums.generated.d.ts.map +1 -0
  252. package/dist/schemas/prisma-enums.generated.js +91 -0
  253. package/dist/schemas/prisma-enums.generated.js.map +1 -0
  254. package/dist/schemas/rbac.schema.d.ts +170 -0
  255. package/dist/schemas/rbac.schema.d.ts.map +1 -0
  256. package/dist/schemas/rbac.schema.js +82 -0
  257. package/dist/schemas/rbac.schema.js.map +1 -0
  258. package/dist/schemas/risk-words.schema.d.ts +16 -0
  259. package/dist/schemas/risk-words.schema.d.ts.map +1 -0
  260. package/dist/schemas/risk-words.schema.js +25 -0
  261. package/dist/schemas/risk-words.schema.js.map +1 -0
  262. package/dist/schemas/setting.schema.d.ts +62 -0
  263. package/dist/schemas/setting.schema.d.ts.map +1 -0
  264. package/dist/schemas/setting.schema.js +66 -0
  265. package/dist/schemas/setting.schema.js.map +1 -0
  266. package/dist/schemas/sie.schema.d.ts +180 -0
  267. package/dist/schemas/sie.schema.d.ts.map +1 -0
  268. package/dist/schemas/sie.schema.js +56 -0
  269. package/dist/schemas/sie.schema.js.map +1 -0
  270. package/dist/schemas/sign.schema.d.ts +156 -0
  271. package/dist/schemas/sign.schema.d.ts.map +1 -0
  272. package/dist/schemas/sign.schema.js +143 -0
  273. package/dist/schemas/sign.schema.js.map +1 -0
  274. package/dist/schemas/sms.schema.d.ts +36 -0
  275. package/dist/schemas/sms.schema.d.ts.map +1 -0
  276. package/dist/schemas/sms.schema.js +48 -0
  277. package/dist/schemas/sms.schema.js.map +1 -0
  278. package/dist/schemas/sse.schema.d.ts +27 -0
  279. package/dist/schemas/sse.schema.d.ts.map +1 -0
  280. package/dist/schemas/sse.schema.js +32 -0
  281. package/dist/schemas/sse.schema.js.map +1 -0
  282. package/dist/schemas/system.schema.d.ts +48 -0
  283. package/dist/schemas/system.schema.d.ts.map +1 -0
  284. package/dist/schemas/system.schema.js +25 -0
  285. package/dist/schemas/system.schema.js.map +1 -0
  286. package/dist/schemas/tag.schema.d.ts +57 -0
  287. package/dist/schemas/tag.schema.d.ts.map +1 -0
  288. package/dist/schemas/tag.schema.js +46 -0
  289. package/dist/schemas/tag.schema.js.map +1 -0
  290. package/dist/schemas/task.schema.d.ts +92 -0
  291. package/dist/schemas/task.schema.d.ts.map +1 -0
  292. package/dist/schemas/task.schema.js +45 -0
  293. package/dist/schemas/task.schema.js.map +1 -0
  294. package/dist/schemas/tenant.schema.d.ts +206 -0
  295. package/dist/schemas/tenant.schema.d.ts.map +1 -0
  296. package/dist/schemas/tenant.schema.js +90 -0
  297. package/dist/schemas/tenant.schema.js.map +1 -0
  298. package/dist/schemas/uploader.schema.d.ts +137 -0
  299. package/dist/schemas/uploader.schema.d.ts.map +1 -0
  300. package/dist/schemas/uploader.schema.js +115 -0
  301. package/dist/schemas/uploader.schema.js.map +1 -0
  302. package/dist/schemas/user.schema.d.ts +107 -0
  303. package/dist/schemas/user.schema.d.ts.map +1 -0
  304. package/dist/schemas/user.schema.js +70 -0
  305. package/dist/schemas/user.schema.js.map +1 -0
  306. package/dist/schemas/webhook.schema.d.ts +75 -0
  307. package/dist/schemas/webhook.schema.d.ts.map +1 -0
  308. package/dist/schemas/webhook.schema.js +71 -0
  309. package/dist/schemas/webhook.schema.js.map +1 -0
  310. package/package.json +77 -0
package/README.md ADDED
@@ -0,0 +1,303 @@
1
+ # @repo/contracts - API 契约
2
+
3
+ 使用 ts-rest 实现的前后端类型安全 API 契约。
4
+
5
+ ## 安装
6
+
7
+ ```json
8
+ {
9
+ "dependencies": {
10
+ "@repo/contracts": "workspace:*"
11
+ }
12
+ }
13
+ ```
14
+
15
+ ## 使用
16
+
17
+ ### 前端使用
18
+
19
+ ```typescript
20
+ import { teamContract } from '@repo/contracts/api';
21
+ import { initClient } from '@ts-rest/core';
22
+
23
+ const client = initClient(teamContract, {
24
+ baseUrl: '/api',
25
+ });
26
+
27
+ const { data } = await client.getInfo({ params: { teamId: '123' } });
28
+ ```
29
+
30
+ ### 后端使用
31
+
32
+ ```typescript
33
+ import { teamContract } from '@repo/contracts/api';
34
+ import { TsRestHandler, tsRestHandler } from '@ts-rest/nest';
35
+ import { success } from '@/common/ts-rest';
36
+
37
+ @Controller()
38
+ export class TeamController {
39
+ @TsRestHandler(teamContract.getInfo)
40
+ async getInfo() {
41
+ return tsRestHandler(teamContract.getInfo, async ({ params }) => {
42
+ const team = await this.teamService.getInfo(params.teamId);
43
+ return success(team);
44
+ });
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## 错误码系统
50
+
51
+ 错误码按业务域组织,从 `@repo/contracts/errors` 导出。
52
+
53
+ ### 错误码域
54
+
55
+ | 域 | 前缀 | 导入 |
56
+ | ------- | ------- | ------------------ |
57
+ | Team | 1xx | `TeamErrorCode` |
58
+ | User | 2xx | `UserErrorCode` |
59
+ | Space | 3xx | `SpaceErrorCode` |
60
+ | Folder | 4xx | `FolderErrorCode` |
61
+ | File | 5xx | `FileErrorCode` |
62
+ | Comment | 56x-57x | `CommentErrorCode` |
63
+ | Payment | 7xx | `PaymentErrorCode` |
64
+ | Common | 9xx | `CommonErrorCode` |
65
+
66
+ ### 后端错误处理
67
+
68
+ ```typescript
69
+ import { TeamErrorCode, apiError } from '@repo/contracts/errors';
70
+ import { ApiExceptionV2 } from '@/filter/exception/api-exception-v2';
71
+
72
+ // 简单错误
73
+ throw apiError(TeamErrorCode.TeamNotFound);
74
+
75
+ // 带数据的错误
76
+ throw apiError(TeamErrorCode.TeamNotFound, { teamId: '123' });
77
+
78
+ // 直接使用 ApiExceptionV2
79
+ throw ApiExceptionV2.fromCode(TeamErrorCode.TeamNotFound);
80
+ ```
81
+
82
+ ### 前端错误处理
83
+
84
+ ```typescript
85
+ import {
86
+ TeamErrorCode,
87
+ handleApiError,
88
+ createErrorHandler,
89
+ } from '@repo/contracts/errors';
90
+
91
+ // 创建类型安全的错误处理器
92
+ const teamErrorHandler = createErrorHandler({
93
+ [TeamErrorCode.TeamNotFound]: {
94
+ message: '团队不存在',
95
+ action: () => router.push('/teams'),
96
+ },
97
+ [TeamErrorCode.TeamOpNoPermission]: {
98
+ message: '您没有权限执行此操作',
99
+ },
100
+ });
101
+
102
+ // 处理 API 响应
103
+ const handleTeamError = (errorCode: number) => {
104
+ const result = teamErrorHandler(errorCode);
105
+ if (result) {
106
+ toast.error(result.message);
107
+ result.action?.();
108
+ }
109
+ };
110
+ ```
111
+
112
+ ### 契约中的类型化错误响应
113
+
114
+ ```typescript
115
+ import { TeamErrorCode } from '../errors/domains/team.errors';
116
+ import { createTypedErrorResponse } from '../errors/error-response';
117
+
118
+ export const teamContract = c.router({
119
+ getInfo: {
120
+ method: 'GET',
121
+ path: '/:teamId',
122
+ responses: {
123
+ 200: createApiResponse(TeamInfoSchema),
124
+ 400: createTypedErrorResponse([
125
+ TeamErrorCode.TeamNotFound,
126
+ TeamErrorCode.TeamMemberViewNoPermission,
127
+ ] as const),
128
+ },
129
+ },
130
+ });
131
+ ```
132
+
133
+ ### 验证 Schema
134
+
135
+ ```typescript
136
+ import { TeamNameSchema, PaginationQuerySchema } from '@repo/contracts/schemas';
137
+
138
+ // 在表单中使用
139
+ const teamForm = useForm({
140
+ resolver: zodResolver(
141
+ z.object({
142
+ name: TeamNameSchema,
143
+ }),
144
+ ),
145
+ });
146
+
147
+ // 在 API 查询中使用
148
+ const query = PaginationQuerySchema.parse(searchParams);
149
+ ```
150
+
151
+ ## 目录结构
152
+
153
+ ```
154
+ src/
155
+ ├── api/ # API 契约
156
+ │ ├── team.contract.ts
157
+ │ ├── user.contract.ts
158
+ │ ├── space.contract.ts
159
+ │ └── index.ts
160
+ ├── errors/ # 错误码系统
161
+ │ ├── domains/ # 域错误定义
162
+ │ │ ├── team.errors.ts
163
+ │ │ ├── user.errors.ts
164
+ │ │ └── ...
165
+ │ ├── codes.ts # 统一错误码
166
+ │ ├── error-response.ts # 类型化错误响应辅助函数
167
+ │ └── index.ts
168
+ ├── schemas/ # Zod Schema
169
+ │ ├── team.schema.ts
170
+ │ ├── user.schema.ts
171
+ │ └── ...
172
+ ├── base.ts # 基础 Schema (createApiResponse 等)
173
+ └── index.ts # 主导出
174
+ ```
175
+
176
+ ## 构建
177
+
178
+ ```bash
179
+ pnpm --filter @repo/contracts build
180
+ ```
181
+
182
+ ## 迁移
183
+
184
+ 从旧错误系统迁移请参阅:
185
+
186
+ - [错误系统迁移指南](./ERROR-MIGRATION.md) - 从旧系统迁移到新系统的指南
187
+ - [错误码管理优化方案](./错误码管理方案.md) - 错误码枚举字符串化优化方案及实施情况
188
+
189
+ ### 错误码系统状态
190
+
191
+ ✅ **已完成**:
192
+
193
+ - 所有错误码已迁移到 `@packages/contracts/src/errors`
194
+ - 错误码枚举已改为字符串格式(避免打包类型问题)
195
+ - i18n 错误消息已迁移到 `errors.json`
196
+ - 过期文件已清理
197
+
198
+ ✅ **已完成**:
199
+
200
+ - 所有文件已迁移到新系统或桥接文件
201
+ - `code.enum.ts` 已无任何直接引用(可安全删除)
202
+
203
+ 📊 **实施进度**:**100%** ✅
204
+
205
+ ---
206
+
207
+ ## NPM 发布流程
208
+
209
+ ### 发布说明
210
+
211
+ 本包在 workspace 内使用名称 `@repo/contracts`,发布到 npmjs 时使用名称 `@dofe/sso-contracts`。
212
+
213
+ 发布脚本会自动处理名称转换:
214
+ - `prepack` - 发布前将名称改为 `@dofe/sso-contracts`
215
+ - `postpack` - 发布后恢复为 `@repo/contracts`
216
+
217
+ ### 发布命令
218
+
219
+ ```bash
220
+ # 进入 contracts 目录
221
+ cd sso.dofe.ai/packages/contracts
222
+
223
+ # 发布 patch 版本 (0.1.0 → 0.1.1)
224
+ pnpm release:patch
225
+
226
+ # 发布 minor 版本 (0.1.0 → 0.2.0)
227
+ pnpm release:minor
228
+
229
+ # 发布 major 版本 (0.1.0 → 1.0.0)
230
+ pnpm release:major
231
+
232
+ # 带 OTP 发布(如果启用了 2FA)
233
+ npm publish --access public --otp=<你的OTP码>
234
+ ```
235
+
236
+ ### 发布流程详解
237
+
238
+ ```bash
239
+ pnpm release:patch
240
+ ```
241
+
242
+ 执行步骤:
243
+ 1. `npm version patch` - 升级版本号
244
+ 2. `pnpm run prepack` - 将 package.json 名称改为 `@dofe/sso-contracts`
245
+ 3. `npm publish --access public` - 发布到 npmjs
246
+ 4. `pnpm run postpack` - 恢复 package.json 名称为 `@repo/contracts`
247
+
248
+ ### 前置条件
249
+
250
+ 1. npm 账户登录:
251
+ ```bash
252
+ npm login
253
+ ```
254
+
255
+ 2. 验证登录状态:
256
+ ```bash
257
+ npm whoami
258
+ ```
259
+
260
+ ### 其他项目引用
261
+
262
+ 发布后,agents.dofe.ai、models.dofe.ai 等项目可通过以下方式引用:
263
+
264
+ ```json
265
+ {
266
+ "dependencies": {
267
+ "@dofe/sso-contracts": "^0.1.0"
268
+ }
269
+ }
270
+ ```
271
+
272
+ ```typescript
273
+ import { InternalTenantSchema, TeamMemberRoleSchema } from '@dofe/sso-contracts';
274
+ import { internalContract } from '@dofe/sso-contracts/api';
275
+ ```
276
+
277
+ ### 可用导出
278
+
279
+ | 导出路径 | 内容 |
280
+ |---------|------|
281
+ | `@dofe/sso-contracts` | 所有 schemas、contracts、errors |
282
+ | `@dofe/sso-contracts/api` | API contracts |
283
+ | `@dofe/sso-contracts/schemas` | Zod schemas |
284
+ | `@dofe/sso-contracts/schemas/internal` | Internal API schemas (Tenant/Team) |
285
+ | `@dofe/sso-contracts/errors` | Error codes |
286
+ | `@dofe/sso-contracts/base` | Base utilities (createApiResponse) |
287
+
288
+ ### 常见问题
289
+
290
+ **Q: 发布失败 "You do not have permission"**
291
+
292
+ A: 确保 npm 账户有权限发布 `@dofe` scope 包。需要先在 npmjs 创建或加入 `@dofe` organization。
293
+
294
+ **Q: 发布失败 "Package already exists"**
295
+
296
+ A: 版本号已存在,需要升级版本:
297
+ ```bash
298
+ pnpm release:patch
299
+ ```
300
+
301
+ **Q: 本地安装失败 "Cannot resolve @repo/contracts"**
302
+
303
+ A: 这是因为 workspace 依赖问题。确保在 sso.dofe.ai 项目根目录运行 `pnpm install`。
@@ -0,0 +1,69 @@
1
+ export declare const adminSettingContract: {
2
+ getConfig: {
3
+ summary: "Get system configuration";
4
+ method: "GET";
5
+ path: "/admin/settings";
6
+ responses: {
7
+ 200: import("zod").ZodObject<{
8
+ code: import("zod").ZodNumber;
9
+ msg: import("zod").ZodString;
10
+ data: import("zod").ZodObject<{
11
+ siteName: import("zod").ZodNullable<import("zod").ZodString>;
12
+ siteDescription: import("zod").ZodNullable<import("zod").ZodString>;
13
+ defaultLanguage: import("zod").ZodString;
14
+ timezone: import("zod").ZodString;
15
+ rateLimit: import("zod").ZodObject<{
16
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
17
+ points: import("zod").ZodDefault<import("zod").ZodNumber>;
18
+ duration: import("zod").ZodDefault<import("zod").ZodNumber>;
19
+ blockDuration: import("zod").ZodDefault<import("zod").ZodNumber>;
20
+ }, import("zod/v4/core").$strip>;
21
+ corsAllowedOrigins: import("zod").ZodArray<import("zod").ZodString>;
22
+ updatedAt: import("zod").ZodString;
23
+ }, import("zod/v4/core").$strip>;
24
+ }, import("zod/v4/core").$strip>;
25
+ };
26
+ };
27
+ updateConfig: {
28
+ summary: "Update system configuration";
29
+ method: "PUT";
30
+ body: import("zod").ZodObject<{
31
+ siteName: import("zod").ZodOptional<import("zod").ZodString>;
32
+ siteDescription: import("zod").ZodOptional<import("zod").ZodString>;
33
+ defaultLanguage: import("zod").ZodOptional<import("zod").ZodEnum<{
34
+ en: "en";
35
+ "zh-CN": "zh-CN";
36
+ }>>;
37
+ timezone: import("zod").ZodOptional<import("zod").ZodString>;
38
+ rateLimit: import("zod").ZodOptional<import("zod").ZodObject<{
39
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
40
+ points: import("zod").ZodDefault<import("zod").ZodNumber>;
41
+ duration: import("zod").ZodDefault<import("zod").ZodNumber>;
42
+ blockDuration: import("zod").ZodDefault<import("zod").ZodNumber>;
43
+ }, import("zod/v4/core").$strip>>;
44
+ corsAllowedOrigins: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
45
+ }, import("zod/v4/core").$strip>;
46
+ path: "/admin/settings";
47
+ responses: {
48
+ 200: import("zod").ZodObject<{
49
+ code: import("zod").ZodNumber;
50
+ msg: import("zod").ZodString;
51
+ data: import("zod").ZodObject<{
52
+ siteName: import("zod").ZodNullable<import("zod").ZodString>;
53
+ siteDescription: import("zod").ZodNullable<import("zod").ZodString>;
54
+ defaultLanguage: import("zod").ZodString;
55
+ timezone: import("zod").ZodString;
56
+ rateLimit: import("zod").ZodObject<{
57
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
58
+ points: import("zod").ZodDefault<import("zod").ZodNumber>;
59
+ duration: import("zod").ZodDefault<import("zod").ZodNumber>;
60
+ blockDuration: import("zod").ZodDefault<import("zod").ZodNumber>;
61
+ }, import("zod/v4/core").$strip>;
62
+ corsAllowedOrigins: import("zod").ZodArray<import("zod").ZodString>;
63
+ updatedAt: import("zod").ZodString;
64
+ }, import("zod/v4/core").$strip>;
65
+ }, import("zod/v4/core").$strip>;
66
+ };
67
+ };
68
+ };
69
+ //# sourceMappingURL=admin-setting.contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-setting.contract.d.ts","sourceRoot":"","sources":["../../src/api/admin-setting.contract.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBhC,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.adminSettingContract = void 0;
4
+ const core_1 = require("@ts-rest/core");
5
+ const base_1 = require("../base");
6
+ const admin_system_schema_1 = require("../schemas/admin-system.schema");
7
+ const c = (0, core_1.initContract)();
8
+ exports.adminSettingContract = c.router({
9
+ getConfig: {
10
+ method: 'GET',
11
+ path: '/settings',
12
+ responses: {
13
+ 200: (0, base_1.ApiResponseSchema)(admin_system_schema_1.SystemConfigResponseSchema),
14
+ },
15
+ summary: 'Get system configuration',
16
+ },
17
+ updateConfig: {
18
+ method: 'PUT',
19
+ path: '/settings',
20
+ body: admin_system_schema_1.UpdateSystemConfigBodySchema,
21
+ responses: {
22
+ 200: (0, base_1.ApiResponseSchema)(admin_system_schema_1.SystemConfigResponseSchema),
23
+ },
24
+ summary: 'Update system configuration',
25
+ },
26
+ }, {
27
+ pathPrefix: '/admin',
28
+ });
29
+ //# sourceMappingURL=admin-setting.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-setting.contract.js","sourceRoot":"","sources":["../../src/api/admin-setting.contract.ts"],"names":[],"mappings":";;;AAAA,wCAA6C;AAC7C,kCAA4C;AAC5C,wEAGwC;AAExC,MAAM,CAAC,GAAG,IAAA,mBAAY,GAAE,CAAC;AAEZ,QAAA,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAC1C;IACE,SAAS,EAAE;QACT,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE;YACT,GAAG,EAAE,IAAA,wBAAiB,EAAC,gDAA0B,CAAC;SACnD;QACD,OAAO,EAAE,0BAA0B;KACpC;IAED,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,kDAA4B;QAClC,SAAS,EAAE;YACT,GAAG,EAAE,IAAA,wBAAiB,EAAC,gDAA0B,CAAC;SACnD;QACD,OAAO,EAAE,6BAA6B;KACvC;CACF,EACD;IACE,UAAU,EAAE,QAAQ;CACrB,CACF,CAAC"}