@h-ai/api-contract 0.1.0-alpha.59 → 0.1.0-alpha.61

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.
package/README.en.md CHANGED
@@ -93,6 +93,14 @@ Write each business path directly in its `*-contract.ts` file. Inline output sch
93
93
 
94
94
  This package has no runtime configuration and does not read environment variables.
95
95
 
96
+ ## Configuration driven authentication
97
+
98
+ Agreements support configuration-loaded userAgreementMarkdown/privacyPolicyMarkdown and URLs. Markdown takes priority for the same agreement and is safely rendered in a modal.
99
+
100
+ IAM adds GET /auth/config and POST /auth/login/ldap, /auth/password-reset/request and /auth/password-reset/confirm. Public config is a schema whitelist; IamLdapLoginInput and IamPublicConfig are exported. Password lengths follow the configured IAM policy.
101
+
102
+ [完整 IAM 配置 / IAM configuration](../iam/README.en.md)
103
+
96
104
  ## Error handling
97
105
 
98
106
  Contracts describe input and output structures only. Procedures express business errors with `HaiResult<T>`, so clients need not catch business exceptions.
package/README.ja.md CHANGED
@@ -93,6 +93,14 @@ const app = serv.createApp({
93
93
 
94
94
  このパッケージには実行時設定がなく、環境変数も読み込みません。
95
95
 
96
+ ## 設定による認証画面
97
+
98
+ 規約は設定の userAgreementMarkdown/privacyPolicyMarkdown または URL を使用できます。同じ規約は Markdown 本文を優先して安全な Modal で描画します。
99
+
100
+ IAM に公開設定、LDAP、復旧要求と確定の標準 route を追加しました。IamPublicConfig は安全な Schema で、登録パスワードの長さは IAM 設定に従います。
101
+
102
+ [完整 IAM 配置 / IAM configuration](../iam/README.ja.md)
103
+
96
104
  ## エラー処理
97
105
 
98
106
  Contract は入出力構造のみを定義します。業務エラーは procedure が返す `HaiResult<T>` で表し、クライアント側で業務例外を捕捉する必要はありません。
package/README.md CHANGED
@@ -93,6 +93,14 @@ const app = serv.createApp({
93
93
 
94
94
  本包无运行时配置,不读取环境变量。
95
95
 
96
+ ## 配置驱动认证页面
97
+
98
+ 协议支持配置中的 userAgreementMarkdown/privacyPolicyMarkdown 正文及 URL;同主题优先 Markdown,由安全渲染器在弹窗显示。
99
+
100
+ 标准 IAM contract 新增 GET /auth/config、POST /auth/login/ldap、POST /auth/password-reset/request、POST /auth/password-reset/confirm。公开配置 Schema 是安全白名单。IamLdapLoginInput、IamPublicConfig 对调用方提供真实类型。密码长度以 IAM 运行时策略为准,contract 不固定注册密码最小长度。
101
+
102
+ [完整 IAM 配置 / IAM configuration](../iam/README.md)
103
+
96
104
  ## 错误处理
97
105
 
98
106
  Contract 只描述输入输出结构。业务错误由 procedure 返回 `HaiResult<T>` 表达,客户端不需要捕获业务异常。
@@ -34,6 +34,9 @@ var IamTokenPairSchema = z.object({
34
34
  tokenType: z.literal("Bearer")
35
35
  });
36
36
  var IamAgreementDisplaySchema = z.object({
37
+ /** 配置中的 Markdown 原文由客户端安全渲染。 */
38
+ userAgreementMarkdown: z.string().min(1).optional(),
39
+ privacyPolicyMarkdown: z.string().min(1).optional(),
37
40
  userAgreementUrl: z.string().optional(),
38
41
  privacyPolicyUrl: z.string().optional(),
39
42
  showOnRegister: z.boolean(),
@@ -55,6 +58,19 @@ var IamLoginInputSchema = z.object({
55
58
  password: z.string().min(1),
56
59
  rememberMe: z.boolean().optional()
57
60
  });
61
+ var IamLdapLoginInputSchema = z.object({ username: z.string().trim().min(1), password: z.string().min(1) });
62
+ var IamRequestPasswordResetInputSchema = z.object({ identifier: z.string().trim().min(1) });
63
+ var IamConfirmPasswordResetInputSchema = z.object({ token: z.string().min(1), newPassword: z.string().min(1) });
64
+ var IamPublicConfigSchema = z.object({
65
+ password: z.object({ minLength: z.number(), maxLength: z.number(), requireUppercase: z.boolean(), requireLowercase: z.boolean(), requireNumber: z.boolean(), requireSpecialChar: z.boolean(), expirationDays: z.number() }),
66
+ register: z.object({ enabled: z.boolean() }),
67
+ login: z.object({ password: z.boolean(), otp: z.boolean(), ldap: z.boolean(), email: z.boolean(), sms: z.boolean() }),
68
+ passwordReset: z.object({ enabled: z.boolean(), mode: z.enum(["email", "phone"]) }),
69
+ otp: z.object({ length: z.number(), resendInterval: z.number() }),
70
+ agreements: IamAgreementDisplaySchema,
71
+ ui: z.object({ variant: z.enum(["card", "split"]), title: z.string().optional(), subtitle: z.string().optional(), brandTitle: z.string().optional(), brandText: z.string().optional(), logoUrl: z.string().optional(), illustrationUrl: z.string().optional() }),
72
+ session: z.object({ maxAge: z.number() })
73
+ });
58
74
  var IamOtpLoginInputSchema = z.object({
59
75
  identifier: z.string().min(1),
60
76
  code: z.string().min(1)
@@ -76,7 +92,7 @@ var IamRefreshTokenDataSchema = z.object({
76
92
  });
77
93
  var IamRegisterInputSchema = z.object({
78
94
  username: z.string().min(1),
79
- password: z.string().min(6),
95
+ password: z.string().min(1),
80
96
  email: z.string().email().optional(),
81
97
  phone: z.string().optional(),
82
98
  displayName: z.string().optional(),
@@ -84,7 +100,7 @@ var IamRegisterInputSchema = z.object({
84
100
  });
85
101
  var IamChangePasswordInputSchema = z.object({
86
102
  oldPassword: z.string().min(1),
87
- newPassword: z.string().min(6)
103
+ newPassword: z.string().min(1)
88
104
  });
89
105
  var IamUpdateCurrentUserInputSchema = z.object({
90
106
  username: z.string().min(1).optional(),
@@ -103,7 +119,7 @@ var IamAdminCreateUserInputSchema = z.object({
103
119
  username: z.string().min(1),
104
120
  email: z.string().email().optional(),
105
121
  phone: z.string().optional(),
106
- password: z.string().min(6),
122
+ password: z.string().min(1),
107
123
  displayName: z.string().optional(),
108
124
  metadata: z.record(z.string(), z.unknown()).optional(),
109
125
  roleIds: z.array(z.string()).optional(),
@@ -125,7 +141,7 @@ var IamUserIdInputSchema = z.object({
125
141
  });
126
142
  var IamAdminResetPasswordInputSchema = z.object({
127
143
  id: z.string().min(1),
128
- newPassword: z.string().min(6)
144
+ newPassword: z.string().min(1)
129
145
  });
130
146
  var IamRoleSchema = z.object({
131
147
  id: z.string(),
@@ -178,6 +194,10 @@ var userOutputSchema = haiResultSchema(IamUserSchema);
178
194
  var roleOutputSchema = haiResultSchema(IamRoleSchema);
179
195
  var iamContract = {
180
196
  auth: {
197
+ publicConfig: route({ method: "GET", path: "/auth/config", operationId: "iam.auth.publicConfig", summary: "Public authentication configuration", tags: ["iam", "auth"] }).output(haiResultSchema(IamPublicConfigSchema.nullable())),
198
+ loginWithLdap: route({ method: "POST", path: "/auth/login/ldap", operationId: "iam.auth.loginWithLdap", summary: "LDAP login", tags: ["iam", "auth"] }).input(IamLdapLoginInputSchema).output(authResultOutputSchema),
199
+ requestPasswordReset: route({ method: "POST", path: "/auth/password-reset/request", operationId: "iam.auth.requestPasswordReset", summary: "Request password reset", tags: ["iam", "auth"] }).input(IamRequestPasswordResetInputSchema).output(HaiVoidResultSchema),
200
+ confirmPasswordReset: route({ method: "POST", path: "/auth/password-reset/confirm", operationId: "iam.auth.confirmPasswordReset", summary: "Confirm password reset", tags: ["iam", "auth"] }).input(IamConfirmPasswordResetInputSchema).output(HaiVoidResultSchema),
181
201
  login: route({ method: "POST", path: "/auth/login", operationId: "iam.auth.login", summary: "Password login", tags: ["iam", "auth"] }).input(IamLoginInputSchema).output(authResultOutputSchema),
182
202
  loginWithOtp: route({ method: "POST", path: "/auth/login/otp", operationId: "iam.auth.loginWithOtp", summary: "OTP login", tags: ["iam", "auth"] }).input(IamOtpLoginInputSchema).output(authResultOutputSchema),
183
203
  logout: route({ method: "POST", path: "/auth/logout", operationId: "iam.auth.logout", summary: "Logout", tags: ["iam", "auth"] }).input(IamLogoutInputSchema).output(HaiVoidResultSchema),
@@ -211,6 +231,6 @@ var iamContract = {
211
231
  }
212
232
  };
213
233
 
214
- export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, PaginationQuerySchema, iamContract, paginatedSchema };
215
- //# sourceMappingURL=chunk-MBNBQY2J.js.map
216
- //# sourceMappingURL=chunk-MBNBQY2J.js.map
234
+ export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamConfirmPasswordResetInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamLdapLoginInputSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamPublicConfigSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRequestPasswordResetInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, PaginationQuerySchema, iamContract, paginatedSchema };
235
+ //# sourceMappingURL=chunk-APZWTGQD.js.map
236
+ //# sourceMappingURL=chunk-APZWTGQD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/pagination-schemas.ts","../src/iam/iam-schemas.ts","../src/iam/iam-contract.ts"],"names":["z"],"mappings":"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","file":"chunk-APZWTGQD.js","sourcesContent":["/**\n * @h-ai/api-contract — 分页 Schema\n *\n * 提供通用分页查询参数与分页结果封装,供各领域 contract 扩展复用。\n * @module pagination-schemas\n */\n\nimport { z } from 'zod'\n\n/**\n * 通用分页查询参数 Schema。\n *\n * 页码和页大小均为可选,由服务端提供合理默认值(page=1, pageSize=20)。\n * 支持字符串 coerce,适配 GET 请求 query string 场景。\n *\n * @example\n * ```ts\n * // 扩展为领域专属查询参数\n * const IamListUsersInputSchema = PaginationQuerySchema.extend({\n * search: z.string().optional(),\n * })\n * ```\n */\nexport const PaginationQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional(),\n pageSize: z.coerce.number().int().min(1).max(100).optional(),\n})\n\n/**\n * 创建分页结果 Schema。\n *\n * 生成标准分页响应结构 `{ items, total, page, pageSize }`,\n * 与 `@h-ai/reldb` 的 `PageResult<T>` 保持对齐。\n *\n * @param itemSchema - 分页项的 Zod Schema\n * @returns 包含 items/total/page/pageSize 的对象 Schema\n *\n * @example\n * ```ts\n * const listUsers = route({ method: 'GET', path: '/users' })\n * .output(haiResultSchema(paginatedSchema(IamUserSchema)))\n * // 解析结果形如:\n * // { success: true, data: { items: [...], total: 100, page: 1, pageSize: 20 } }\n * ```\n */\nexport function paginatedSchema<T extends z.ZodType>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n}\n","/**\n * @h-ai/api-contract — IAM 领域 Schema\n *\n * 包含用户、Token、角色、权限以及相关 input/data 的 Zod Schema 定义。\n * 一次性输出包装在 contract 中内联,仅保留跨接口、跨层复用的数据结构。\n * @module iam-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\nimport { PaginationQuerySchema } from '../common/pagination-schemas.js'\n\n/** 用户基础信息 Schema。 */\nexport const IamUserSchema = z.object({\n id: z.string(),\n username: z.string(),\n email: z.string().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n enabled: z.boolean(),\n emailVerified: z.boolean().optional(),\n phoneVerified: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** Token 对 Schema。 */\nexport const IamTokenPairSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string().optional(),\n expiresIn: z.number(),\n tokenType: z.literal('Bearer'),\n})\n\n/** 协议展示 Schema。 */\nexport const IamAgreementDisplaySchema = z.object({\n /** 配置中的 Markdown 原文由客户端安全渲染。 */\n userAgreementMarkdown: z.string().min(1).optional(),\n privacyPolicyMarkdown: z.string().min(1).optional(),\n userAgreementUrl: z.string().optional(),\n privacyPolicyUrl: z.string().optional(),\n showOnRegister: z.boolean(),\n showOnLogin: z.boolean(),\n})\n\n/** 登录结果业务数据 Schema。 */\nexport const IamAuthResultSchema = z.object({\n user: IamUserSchema,\n tokens: IamTokenPairSchema,\n roles: z.array(z.string()).default([]),\n permissions: z.array(z.string()).default([]),\n agreements: IamAgreementDisplaySchema.optional(),\n})\n\n/** 当前会话用户信息;包含服务端重新校验后的角色与权限快照。 */\nexport const IamCurrentUserSchema = IamUserSchema.extend({\n roles: z.array(z.string()),\n permissions: z.array(z.string()),\n})\n\n/** 密码登录入参 Schema。 */\nexport const IamLoginInputSchema = z.object({\n identifier: z.string().min(1),\n password: z.string().min(1),\n rememberMe: z.boolean().optional(),\n})\n\n/** LDAP 登录与密码找回入参。 */\nexport const IamLdapLoginInputSchema = z.object({ username: z.string().trim().min(1), password: z.string().min(1) })\nexport const IamRequestPasswordResetInputSchema = z.object({ identifier: z.string().trim().min(1) })\nexport const IamConfirmPasswordResetInputSchema = z.object({ token: z.string().min(1), newPassword: z.string().min(1) })\n\n/** 认证页面公开配置白名单,独立于服务端连接/凭据配置。 */\nexport const IamPublicConfigSchema = z.object({\n password: z.object({ minLength: z.number(), maxLength: z.number(), requireUppercase: z.boolean(), requireLowercase: z.boolean(), requireNumber: z.boolean(), requireSpecialChar: z.boolean(), expirationDays: z.number() }),\n register: z.object({ enabled: z.boolean() }),\n login: z.object({ password: z.boolean(), otp: z.boolean(), ldap: z.boolean(), email: z.boolean(), sms: z.boolean() }),\n passwordReset: z.object({ enabled: z.boolean(), mode: z.enum(['email', 'phone']) }),\n otp: z.object({ length: z.number(), resendInterval: z.number() }),\n agreements: IamAgreementDisplaySchema,\n ui: z.object({ variant: z.enum(['card', 'split']), title: z.string().optional(), subtitle: z.string().optional(), brandTitle: z.string().optional(), brandText: z.string().optional(), logoUrl: z.string().optional(), illustrationUrl: z.string().optional() }),\n session: z.object({ maxAge: z.number() }),\n})\n\n/** OTP 登录入参 Schema。 */\nexport const IamOtpLoginInputSchema = z.object({\n identifier: z.string().min(1),\n code: z.string().min(1),\n})\n\n/** 登出入参 Schema。 */\nexport const IamLogoutInputSchema = z.object({\n accessToken: z.string().min(1).optional(),\n})\n\n/** 发送 OTP 入参 Schema。 */\nexport const IamSendOtpInputSchema = z.object({\n identifier: z.string().min(1),\n})\n\n/** 发送 OTP 业务数据 Schema。 */\nexport const IamSendOtpDataSchema = z.object({\n expiresAt: z.coerce.date(),\n})\n\n/** Token 刷新入参 Schema。 */\nexport const IamRefreshTokenInputSchema = z.object({\n refreshToken: z.string().min(1),\n})\n\n/** Token 刷新业务数据 Schema。 */\nexport const IamRefreshTokenDataSchema = z.object({\n tokens: IamTokenPairSchema,\n})\n\n/** 注册入参 Schema。 */\nexport const IamRegisterInputSchema = z.object({\n username: z.string().min(1),\n password: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 修改密码入参 Schema。 */\nexport const IamChangePasswordInputSchema = z.object({\n oldPassword: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/** 当前用户更新入参 Schema。 */\nexport const IamUpdateCurrentUserInputSchema = z.object({\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n phone: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 用户列表查询入参 Schema。 */\nexport const IamListUsersInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n // 注意:HTTP query 是字符串,使用枚举 + transform 避免 z.coerce.boolean 的 'false' → true 陷阱。\n enabled: z.enum(['true', 'false']).optional().transform(v => v === undefined ? undefined : v === 'true'),\n})\n\n/** Admin 创建用户入参 Schema。 */\nexport const IamAdminCreateUserInputSchema = z.object({\n username: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n password: z.string().min(1),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n roleIds: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n})\n\n/** Admin 更新用户入参 Schema。 */\nexport const IamAdminUpdateUserInputSchema = z.object({\n id: z.string().min(1),\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n enabled: z.boolean().optional(),\n roleIds: z.array(z.string()).optional(),\n})\n\n/** Admin 删除用户入参 Schema。 */\nexport const IamUserIdInputSchema = z.object({\n id: z.string().min(1),\n})\n\n/** Admin 重置密码入参 Schema。 */\nexport const IamAdminResetPasswordInputSchema = z.object({\n id: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/** 角色基础信息 Schema。 */\nexport const IamRoleSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 创建角色入参 Schema。 */\nexport const IamCreateRoleInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n})\n\n/** 更新角色入参 Schema。 */\nexport const IamUpdateRoleInputSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1).optional(),\n description: z.string().optional(),\n})\n\n/** 权限类型 Schema。 */\nexport const IamPermissionTypeSchema = z.enum(['menu', 'api', 'button'])\n\n/** 权限基础信息 Schema。 */\nexport const IamPermissionSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 权限列表查询入参 Schema。 */\nexport const IamListPermissionsInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\n/** 创建权限入参 Schema。 */\nexport const IamCreatePermissionInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\nexport type IamLoginInput = z.infer<typeof IamLoginInputSchema>\nexport type IamLdapLoginInput = z.infer<typeof IamLdapLoginInputSchema>\nexport type IamPublicConfig = z.infer<typeof IamPublicConfigSchema>\nexport type IamOtpLoginInput = z.infer<typeof IamOtpLoginInputSchema>\nexport type IamLogoutInput = z.infer<typeof IamLogoutInputSchema>\nexport type IamSendOtpInput = z.infer<typeof IamSendOtpInputSchema>\nexport type IamAuthResultOutput = HaiResult<z.infer<typeof IamAuthResultSchema>>\nexport type IamCurrentUser = z.infer<typeof IamCurrentUserSchema>\nexport type IamCurrentUserOutput = HaiResult<IamCurrentUser>\nexport type IamRefreshTokenInput = z.infer<typeof IamRefreshTokenInputSchema>\nexport type IamRefreshTokenOutput = HaiResult<z.infer<typeof IamRefreshTokenDataSchema>>\nexport type IamRegisterInput = z.infer<typeof IamRegisterInputSchema>\nexport type IamChangePasswordInput = z.infer<typeof IamChangePasswordInputSchema>\nexport type IamUpdateCurrentUserInput = z.infer<typeof IamUpdateCurrentUserInputSchema>\nexport type IamListUsersInput = z.infer<typeof IamListUsersInputSchema>\nexport type IamAdminCreateUserInput = z.infer<typeof IamAdminCreateUserInputSchema>\nexport type IamAdminUpdateUserInput = z.infer<typeof IamAdminUpdateUserInputSchema>\nexport type IamUserIdInput = z.infer<typeof IamUserIdInputSchema>\nexport type IamAdminResetPasswordInput = z.infer<typeof IamAdminResetPasswordInputSchema>\nexport type IamCreateRoleInput = z.infer<typeof IamCreateRoleInputSchema>\nexport type IamUpdateRoleInput = z.infer<typeof IamUpdateRoleInputSchema>\nexport type IamListPermissionsInput = z.infer<typeof IamListPermissionsInputSchema>\nexport type IamCreatePermissionInput = z.infer<typeof IamCreatePermissionInputSchema>\n","/**\n * @h-ai/api-contract — IAM 领域 contract\n *\n * 定义身份认证与权限管理相关 API 的接口边界:\n * - auth:登录、登出、OTP、刷新 Token、注册、修改密码\n * - users:Admin 管理用户(CRUD + 重置密码)\n * - roles:Admin 管理角色(CRUD)\n * - permissions:Admin 管理权限(CRUD)\n *\n * auth.* 入口址前缀为 `/auth`;users/roles/permissions 前缀为 `/iam`。\n * @module iam-contract\n */\n\nimport { paginatedSchema } from '../common/pagination-schemas.js'\nimport { haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n IamAdminCreateUserInputSchema,\n IamAdminResetPasswordInputSchema,\n IamAdminUpdateUserInputSchema,\n IamAuthResultSchema,\n IamChangePasswordInputSchema,\n IamConfirmPasswordResetInputSchema,\n IamCreatePermissionInputSchema,\n IamCreateRoleInputSchema,\n IamCurrentUserSchema,\n IamLdapLoginInputSchema,\n IamListPermissionsInputSchema,\n IamListUsersInputSchema,\n IamLoginInputSchema,\n IamLogoutInputSchema,\n IamOtpLoginInputSchema,\n IamPermissionSchema,\n IamPublicConfigSchema,\n IamRefreshTokenDataSchema,\n IamRefreshTokenInputSchema,\n IamRegisterInputSchema,\n IamRequestPasswordResetInputSchema,\n IamRoleSchema,\n IamSendOtpDataSchema,\n IamSendOtpInputSchema,\n IamUpdateCurrentUserInputSchema,\n IamUpdateRoleInputSchema,\n IamUserIdInputSchema,\n IamUserSchema,\n} from './iam-schemas.js'\n\n// 同一 contract 内被多个接口复用的输出结构保持私有,避免扩大公共 Schema 面。\nconst authResultOutputSchema = haiResultSchema(IamAuthResultSchema)\nconst userOutputSchema = haiResultSchema(IamUserSchema)\nconst roleOutputSchema = haiResultSchema(IamRoleSchema)\n\n/** IAM 领域 oRPC contract。 */\nexport const iamContract = {\n auth: {\n publicConfig: route({ method: 'GET', path: '/auth/config', operationId: 'iam.auth.publicConfig', summary: 'Public authentication configuration', tags: ['iam', 'auth'] })\n .output(haiResultSchema(IamPublicConfigSchema.nullable())),\n loginWithLdap: route({ method: 'POST', path: '/auth/login/ldap', operationId: 'iam.auth.loginWithLdap', summary: 'LDAP login', tags: ['iam', 'auth'] })\n .input(IamLdapLoginInputSchema)\n .output(authResultOutputSchema),\n requestPasswordReset: route({ method: 'POST', path: '/auth/password-reset/request', operationId: 'iam.auth.requestPasswordReset', summary: 'Request password reset', tags: ['iam', 'auth'] })\n .input(IamRequestPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n confirmPasswordReset: route({ method: 'POST', path: '/auth/password-reset/confirm', operationId: 'iam.auth.confirmPasswordReset', summary: 'Confirm password reset', tags: ['iam', 'auth'] })\n .input(IamConfirmPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n login: route({ method: 'POST', path: '/auth/login', operationId: 'iam.auth.login', summary: 'Password login', tags: ['iam', 'auth'] })\n .input(IamLoginInputSchema)\n .output(authResultOutputSchema),\n loginWithOtp: route({ method: 'POST', path: '/auth/login/otp', operationId: 'iam.auth.loginWithOtp', summary: 'OTP login', tags: ['iam', 'auth'] })\n .input(IamOtpLoginInputSchema)\n .output(authResultOutputSchema),\n logout: route({ method: 'POST', path: '/auth/logout', operationId: 'iam.auth.logout', summary: 'Logout', tags: ['iam', 'auth'] })\n .input(IamLogoutInputSchema)\n .output(HaiVoidResultSchema),\n currentUser: route({ method: 'GET', path: '/auth/me', operationId: 'iam.auth.currentUser', summary: 'Get current user and access scope', tags: ['iam', 'auth'] })\n .output(haiResultSchema(IamCurrentUserSchema)),\n refresh: route({ method: 'POST', path: '/auth/refresh', operationId: 'iam.auth.refresh', summary: 'Refresh access token', tags: ['iam', 'auth'] })\n .input(IamRefreshTokenInputSchema)\n .output(haiResultSchema(IamRefreshTokenDataSchema)),\n sendOtp: route({ method: 'POST', path: '/auth/otp/send', operationId: 'iam.auth.sendOtp', summary: 'Send OTP', tags: ['iam', 'auth'] })\n .input(IamSendOtpInputSchema)\n .output(haiResultSchema(IamSendOtpDataSchema)),\n register: route({ method: 'POST', path: '/auth/register', operationId: 'iam.auth.register', summary: 'Register and login', tags: ['iam', 'auth'] })\n .input(IamRegisterInputSchema)\n .output(authResultOutputSchema),\n changePassword: route({ method: 'POST', path: '/auth/change-password', operationId: 'iam.auth.changePassword', summary: 'Change current user password', tags: ['iam', 'auth'] })\n .input(IamChangePasswordInputSchema)\n .output(HaiVoidResultSchema),\n updateCurrentUser: route({ method: 'PUT', path: '/auth/me', operationId: 'iam.auth.updateCurrentUser', summary: 'Update current user', tags: ['iam', 'auth'] })\n .input(IamUpdateCurrentUserInputSchema)\n .output(userOutputSchema),\n },\n users: {\n list: route({ method: 'GET', path: '/iam/users', operationId: 'iam.users.list', summary: 'List users', tags: ['iam', 'users'] })\n .input(IamListUsersInputSchema)\n .output(haiResultSchema(paginatedSchema(IamUserSchema))),\n get: route({ method: 'GET', path: '/iam/users/{id}', operationId: 'iam.users.get', summary: 'Get user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamUserSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/users', operationId: 'iam.users.create', summary: 'Create user', tags: ['iam', 'users'] })\n .input(IamAdminCreateUserInputSchema)\n .output(userOutputSchema),\n update: route({ method: 'PUT', path: '/iam/users/{id}', operationId: 'iam.users.update', summary: 'Update user', tags: ['iam', 'users'] })\n .input(IamAdminUpdateUserInputSchema)\n .output(userOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/users/{id}', operationId: 'iam.users.delete', summary: 'Delete user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n resetPassword: route({ method: 'POST', path: '/iam/users/{id}/reset-password', operationId: 'iam.users.resetPassword', summary: 'Reset user password', tags: ['iam', 'users'] })\n .input(IamAdminResetPasswordInputSchema)\n .output(HaiVoidResultSchema),\n },\n roles: {\n list: route({ method: 'GET', path: '/iam/roles', operationId: 'iam.roles.list', summary: 'List roles', tags: ['iam', 'roles'] })\n .output(haiResultSchema(paginatedSchema(IamRoleSchema))),\n get: route({ method: 'GET', path: '/iam/roles/{id}', operationId: 'iam.roles.get', summary: 'Get role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamRoleSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/roles', operationId: 'iam.roles.create', summary: 'Create role', tags: ['iam', 'roles'] })\n .input(IamCreateRoleInputSchema)\n .output(roleOutputSchema),\n update: route({ method: 'PUT', path: '/iam/roles/{id}', operationId: 'iam.roles.update', summary: 'Update role', tags: ['iam', 'roles'] })\n .input(IamUpdateRoleInputSchema)\n .output(roleOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/roles/{id}', operationId: 'iam.roles.delete', summary: 'Delete role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n permissions: {\n list: route({ method: 'GET', path: '/iam/permissions', operationId: 'iam.permissions.list', summary: 'List permissions', tags: ['iam', 'permissions'] })\n .input(IamListPermissionsInputSchema)\n .output(haiResultSchema(paginatedSchema(IamPermissionSchema))),\n get: route({ method: 'GET', path: '/iam/permissions/{id}', operationId: 'iam.permissions.get', summary: 'Get permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamPermissionSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/permissions', operationId: 'iam.permissions.create', summary: 'Create permission', tags: ['iam', 'permissions'] })\n .input(IamCreatePermissionInputSchema)\n .output(haiResultSchema(IamPermissionSchema)),\n delete: route({ method: 'DELETE', path: '/iam/permissions/{id}', operationId: 'iam.permissions.delete', summary: 'Delete permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n}\n\nexport type IamContract = typeof iamContract\n"]}
@@ -1,7 +1,7 @@
1
- import * as _orpc_contract from '@orpc/contract';
2
1
  import * as zod_v4_core from 'zod/v4/core';
3
2
  import * as zod from 'zod';
4
3
  import { z } from 'zod';
4
+ import * as _orpc_contract from '@orpc/contract';
5
5
  import { HaiResult } from '@h-ai/core';
6
6
 
7
7
  /**
@@ -19,6 +19,163 @@ import { HaiResult } from '@h-ai/core';
19
19
  /** IAM 领域 oRPC contract。 */
20
20
  declare const iamContract: {
21
21
  auth: {
22
+ publicConfig: _orpc_contract.ContractProcedureBuilderWithOutput<_orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
23
+ success: zod.ZodLiteral<true>;
24
+ data: zod.ZodNullable<zod.ZodObject<{
25
+ password: zod.ZodObject<{
26
+ minLength: zod.ZodNumber;
27
+ maxLength: zod.ZodNumber;
28
+ requireUppercase: zod.ZodBoolean;
29
+ requireLowercase: zod.ZodBoolean;
30
+ requireNumber: zod.ZodBoolean;
31
+ requireSpecialChar: zod.ZodBoolean;
32
+ expirationDays: zod.ZodNumber;
33
+ }, zod_v4_core.$strip>;
34
+ register: zod.ZodObject<{
35
+ enabled: zod.ZodBoolean;
36
+ }, zod_v4_core.$strip>;
37
+ login: zod.ZodObject<{
38
+ password: zod.ZodBoolean;
39
+ otp: zod.ZodBoolean;
40
+ ldap: zod.ZodBoolean;
41
+ email: zod.ZodBoolean;
42
+ sms: zod.ZodBoolean;
43
+ }, zod_v4_core.$strip>;
44
+ passwordReset: zod.ZodObject<{
45
+ enabled: zod.ZodBoolean;
46
+ mode: zod.ZodEnum<{
47
+ email: "email";
48
+ phone: "phone";
49
+ }>;
50
+ }, zod_v4_core.$strip>;
51
+ otp: zod.ZodObject<{
52
+ length: zod.ZodNumber;
53
+ resendInterval: zod.ZodNumber;
54
+ }, zod_v4_core.$strip>;
55
+ agreements: zod.ZodObject<{
56
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
57
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
58
+ userAgreementUrl: zod.ZodOptional<zod.ZodString>;
59
+ privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
60
+ showOnRegister: zod.ZodBoolean;
61
+ showOnLogin: zod.ZodBoolean;
62
+ }, zod_v4_core.$strip>;
63
+ ui: zod.ZodObject<{
64
+ variant: zod.ZodEnum<{
65
+ split: "split";
66
+ card: "card";
67
+ }>;
68
+ title: zod.ZodOptional<zod.ZodString>;
69
+ subtitle: zod.ZodOptional<zod.ZodString>;
70
+ brandTitle: zod.ZodOptional<zod.ZodString>;
71
+ brandText: zod.ZodOptional<zod.ZodString>;
72
+ logoUrl: zod.ZodOptional<zod.ZodString>;
73
+ illustrationUrl: zod.ZodOptional<zod.ZodString>;
74
+ }, zod_v4_core.$strip>;
75
+ session: zod.ZodObject<{
76
+ maxAge: zod.ZodNumber;
77
+ }, zod_v4_core.$strip>;
78
+ }, zod_v4_core.$strip>>;
79
+ }, zod_v4_core.$strip>, zod.ZodObject<{
80
+ success: zod.ZodLiteral<false>;
81
+ error: zod.ZodObject<{
82
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
83
+ message: zod.ZodString;
84
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
85
+ system: zod.ZodOptional<zod.ZodString>;
86
+ module: zod.ZodOptional<zod.ZodString>;
87
+ cause: zod.ZodOptional<zod.ZodUnknown>;
88
+ suggestion: zod.ZodOptional<zod.ZodString>;
89
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
90
+ }, zod_v4_core.$strip>;
91
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
92
+ loginWithLdap: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
93
+ username: zod.ZodString;
94
+ password: zod.ZodString;
95
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
96
+ success: zod.ZodLiteral<true>;
97
+ data: zod.ZodObject<{
98
+ user: zod.ZodObject<{
99
+ id: zod.ZodString;
100
+ username: zod.ZodString;
101
+ email: zod.ZodOptional<zod.ZodString>;
102
+ phone: zod.ZodOptional<zod.ZodString>;
103
+ displayName: zod.ZodOptional<zod.ZodString>;
104
+ avatarUrl: zod.ZodOptional<zod.ZodString>;
105
+ enabled: zod.ZodBoolean;
106
+ emailVerified: zod.ZodOptional<zod.ZodBoolean>;
107
+ phoneVerified: zod.ZodOptional<zod.ZodBoolean>;
108
+ createdAt: zod.ZodCoercedDate<unknown>;
109
+ updatedAt: zod.ZodCoercedDate<unknown>;
110
+ metadata: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
111
+ }, zod_v4_core.$strip>;
112
+ tokens: zod.ZodObject<{
113
+ accessToken: zod.ZodString;
114
+ refreshToken: zod.ZodOptional<zod.ZodString>;
115
+ expiresIn: zod.ZodNumber;
116
+ tokenType: zod.ZodLiteral<"Bearer">;
117
+ }, zod_v4_core.$strip>;
118
+ roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
119
+ permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
120
+ agreements: zod.ZodOptional<zod.ZodObject<{
121
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
122
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
123
+ userAgreementUrl: zod.ZodOptional<zod.ZodString>;
124
+ privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
125
+ showOnRegister: zod.ZodBoolean;
126
+ showOnLogin: zod.ZodBoolean;
127
+ }, zod_v4_core.$strip>>;
128
+ }, zod_v4_core.$strip>;
129
+ }, zod_v4_core.$strip>, zod.ZodObject<{
130
+ success: zod.ZodLiteral<false>;
131
+ error: zod.ZodObject<{
132
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
133
+ message: zod.ZodString;
134
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
135
+ system: zod.ZodOptional<zod.ZodString>;
136
+ module: zod.ZodOptional<zod.ZodString>;
137
+ cause: zod.ZodOptional<zod.ZodUnknown>;
138
+ suggestion: zod.ZodOptional<zod.ZodString>;
139
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
140
+ }, zod_v4_core.$strip>;
141
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
142
+ requestPasswordReset: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
143
+ identifier: zod.ZodString;
144
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
145
+ success: zod.ZodLiteral<true>;
146
+ data: zod.ZodVoid;
147
+ }, zod_v4_core.$strip>, zod.ZodObject<{
148
+ success: zod.ZodLiteral<false>;
149
+ error: zod.ZodObject<{
150
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
151
+ message: zod.ZodString;
152
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
153
+ system: zod.ZodOptional<zod.ZodString>;
154
+ module: zod.ZodOptional<zod.ZodString>;
155
+ cause: zod.ZodOptional<zod.ZodUnknown>;
156
+ suggestion: zod.ZodOptional<zod.ZodString>;
157
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
158
+ }, zod_v4_core.$strip>;
159
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
160
+ confirmPasswordReset: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
161
+ token: zod.ZodString;
162
+ newPassword: zod.ZodString;
163
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
164
+ success: zod.ZodLiteral<true>;
165
+ data: zod.ZodVoid;
166
+ }, zod_v4_core.$strip>, zod.ZodObject<{
167
+ success: zod.ZodLiteral<false>;
168
+ error: zod.ZodObject<{
169
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
170
+ message: zod.ZodString;
171
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
172
+ system: zod.ZodOptional<zod.ZodString>;
173
+ module: zod.ZodOptional<zod.ZodString>;
174
+ cause: zod.ZodOptional<zod.ZodUnknown>;
175
+ suggestion: zod.ZodOptional<zod.ZodString>;
176
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
177
+ }, zod_v4_core.$strip>;
178
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
22
179
  login: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
23
180
  identifier: zod.ZodString;
24
181
  password: zod.ZodString;
@@ -49,6 +206,8 @@ declare const iamContract: {
49
206
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
50
207
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
51
208
  agreements: zod.ZodOptional<zod.ZodObject<{
209
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
210
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
52
211
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
53
212
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
54
213
  showOnRegister: zod.ZodBoolean;
@@ -97,6 +256,8 @@ declare const iamContract: {
97
256
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
98
257
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
99
258
  agreements: zod.ZodOptional<zod.ZodObject<{
259
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
260
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
100
261
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
101
262
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
102
263
  showOnRegister: zod.ZodBoolean;
@@ -243,6 +404,8 @@ declare const iamContract: {
243
404
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
244
405
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
245
406
  agreements: zod.ZodOptional<zod.ZodObject<{
407
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
408
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
246
409
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
247
410
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
248
411
  showOnRegister: zod.ZodBoolean;
@@ -811,6 +974,8 @@ declare const IamTokenPairSchema: z.ZodObject<{
811
974
  }, z.core.$strip>;
812
975
  /** 协议展示 Schema。 */
813
976
  declare const IamAgreementDisplaySchema: z.ZodObject<{
977
+ userAgreementMarkdown: z.ZodOptional<z.ZodString>;
978
+ privacyPolicyMarkdown: z.ZodOptional<z.ZodString>;
814
979
  userAgreementUrl: z.ZodOptional<z.ZodString>;
815
980
  privacyPolicyUrl: z.ZodOptional<z.ZodString>;
816
981
  showOnRegister: z.ZodBoolean;
@@ -841,6 +1006,8 @@ declare const IamAuthResultSchema: z.ZodObject<{
841
1006
  roles: z.ZodDefault<z.ZodArray<z.ZodString>>;
842
1007
  permissions: z.ZodDefault<z.ZodArray<z.ZodString>>;
843
1008
  agreements: z.ZodOptional<z.ZodObject<{
1009
+ userAgreementMarkdown: z.ZodOptional<z.ZodString>;
1010
+ privacyPolicyMarkdown: z.ZodOptional<z.ZodString>;
844
1011
  userAgreementUrl: z.ZodOptional<z.ZodString>;
845
1012
  privacyPolicyUrl: z.ZodOptional<z.ZodString>;
846
1013
  showOnRegister: z.ZodBoolean;
@@ -870,6 +1037,74 @@ declare const IamLoginInputSchema: z.ZodObject<{
870
1037
  password: z.ZodString;
871
1038
  rememberMe: z.ZodOptional<z.ZodBoolean>;
872
1039
  }, z.core.$strip>;
1040
+ /** LDAP 登录与密码找回入参。 */
1041
+ declare const IamLdapLoginInputSchema: z.ZodObject<{
1042
+ username: z.ZodString;
1043
+ password: z.ZodString;
1044
+ }, z.core.$strip>;
1045
+ declare const IamRequestPasswordResetInputSchema: z.ZodObject<{
1046
+ identifier: z.ZodString;
1047
+ }, z.core.$strip>;
1048
+ declare const IamConfirmPasswordResetInputSchema: z.ZodObject<{
1049
+ token: z.ZodString;
1050
+ newPassword: z.ZodString;
1051
+ }, z.core.$strip>;
1052
+ /** 认证页面公开配置白名单,独立于服务端连接/凭据配置。 */
1053
+ declare const IamPublicConfigSchema: z.ZodObject<{
1054
+ password: z.ZodObject<{
1055
+ minLength: z.ZodNumber;
1056
+ maxLength: z.ZodNumber;
1057
+ requireUppercase: z.ZodBoolean;
1058
+ requireLowercase: z.ZodBoolean;
1059
+ requireNumber: z.ZodBoolean;
1060
+ requireSpecialChar: z.ZodBoolean;
1061
+ expirationDays: z.ZodNumber;
1062
+ }, z.core.$strip>;
1063
+ register: z.ZodObject<{
1064
+ enabled: z.ZodBoolean;
1065
+ }, z.core.$strip>;
1066
+ login: z.ZodObject<{
1067
+ password: z.ZodBoolean;
1068
+ otp: z.ZodBoolean;
1069
+ ldap: z.ZodBoolean;
1070
+ email: z.ZodBoolean;
1071
+ sms: z.ZodBoolean;
1072
+ }, z.core.$strip>;
1073
+ passwordReset: z.ZodObject<{
1074
+ enabled: z.ZodBoolean;
1075
+ mode: z.ZodEnum<{
1076
+ email: "email";
1077
+ phone: "phone";
1078
+ }>;
1079
+ }, z.core.$strip>;
1080
+ otp: z.ZodObject<{
1081
+ length: z.ZodNumber;
1082
+ resendInterval: z.ZodNumber;
1083
+ }, z.core.$strip>;
1084
+ agreements: z.ZodObject<{
1085
+ userAgreementMarkdown: z.ZodOptional<z.ZodString>;
1086
+ privacyPolicyMarkdown: z.ZodOptional<z.ZodString>;
1087
+ userAgreementUrl: z.ZodOptional<z.ZodString>;
1088
+ privacyPolicyUrl: z.ZodOptional<z.ZodString>;
1089
+ showOnRegister: z.ZodBoolean;
1090
+ showOnLogin: z.ZodBoolean;
1091
+ }, z.core.$strip>;
1092
+ ui: z.ZodObject<{
1093
+ variant: z.ZodEnum<{
1094
+ split: "split";
1095
+ card: "card";
1096
+ }>;
1097
+ title: z.ZodOptional<z.ZodString>;
1098
+ subtitle: z.ZodOptional<z.ZodString>;
1099
+ brandTitle: z.ZodOptional<z.ZodString>;
1100
+ brandText: z.ZodOptional<z.ZodString>;
1101
+ logoUrl: z.ZodOptional<z.ZodString>;
1102
+ illustrationUrl: z.ZodOptional<z.ZodString>;
1103
+ }, z.core.$strip>;
1104
+ session: z.ZodObject<{
1105
+ maxAge: z.ZodNumber;
1106
+ }, z.core.$strip>;
1107
+ }, z.core.$strip>;
873
1108
  /** OTP 登录入参 Schema。 */
874
1109
  declare const IamOtpLoginInputSchema: z.ZodObject<{
875
1110
  identifier: z.ZodString;
@@ -1035,6 +1270,8 @@ declare const IamCreatePermissionInputSchema: z.ZodObject<{
1035
1270
  }>>;
1036
1271
  }, z.core.$strip>;
1037
1272
  type IamLoginInput = z.infer<typeof IamLoginInputSchema>;
1273
+ type IamLdapLoginInput = z.infer<typeof IamLdapLoginInputSchema>;
1274
+ type IamPublicConfig = z.infer<typeof IamPublicConfigSchema>;
1038
1275
  type IamOtpLoginInput = z.infer<typeof IamOtpLoginInputSchema>;
1039
1276
  type IamLogoutInput = z.infer<typeof IamLogoutInputSchema>;
1040
1277
  type IamSendOtpInput = z.infer<typeof IamSendOtpInputSchema>;
@@ -1056,4 +1293,4 @@ type IamUpdateRoleInput = z.infer<typeof IamUpdateRoleInputSchema>;
1056
1293
  type IamListPermissionsInput = z.infer<typeof IamListPermissionsInputSchema>;
1057
1294
  type IamCreatePermissionInput = z.infer<typeof IamCreatePermissionInputSchema>;
1058
1295
 
1059
- export { type IamAdminCreateUserInput, IamAdminCreateUserInputSchema, type IamAdminResetPasswordInput, IamAdminResetPasswordInputSchema, type IamAdminUpdateUserInput, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, type IamAuthResultOutput, IamAuthResultSchema, type IamChangePasswordInput, IamChangePasswordInputSchema, type IamContract, type IamCreatePermissionInput, IamCreatePermissionInputSchema, type IamCreateRoleInput, IamCreateRoleInputSchema, type IamCurrentUser, type IamCurrentUserOutput, IamCurrentUserSchema, type IamListPermissionsInput, IamListPermissionsInputSchema, type IamListUsersInput, IamListUsersInputSchema, type IamLoginInput, IamLoginInputSchema, type IamLogoutInput, IamLogoutInputSchema, type IamOtpLoginInput, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamRefreshTokenDataSchema, type IamRefreshTokenInput, IamRefreshTokenInputSchema, type IamRefreshTokenOutput, type IamRegisterInput, IamRegisterInputSchema, IamRoleSchema, IamSendOtpDataSchema, type IamSendOtpInput, IamSendOtpInputSchema, IamTokenPairSchema, type IamUpdateCurrentUserInput, IamUpdateCurrentUserInputSchema, type IamUpdateRoleInput, IamUpdateRoleInputSchema, type IamUserIdInput, IamUserIdInputSchema, IamUserSchema, iamContract };
1296
+ export { type IamAdminCreateUserInput, IamAdminCreateUserInputSchema, type IamAdminResetPasswordInput, IamAdminResetPasswordInputSchema, type IamAdminUpdateUserInput, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, type IamAuthResultOutput, IamAuthResultSchema, type IamChangePasswordInput, IamChangePasswordInputSchema, IamConfirmPasswordResetInputSchema, type IamContract, type IamCreatePermissionInput, IamCreatePermissionInputSchema, type IamCreateRoleInput, IamCreateRoleInputSchema, type IamCurrentUser, type IamCurrentUserOutput, IamCurrentUserSchema, type IamLdapLoginInput, IamLdapLoginInputSchema, type IamListPermissionsInput, IamListPermissionsInputSchema, type IamListUsersInput, IamListUsersInputSchema, type IamLoginInput, IamLoginInputSchema, type IamLogoutInput, IamLogoutInputSchema, type IamOtpLoginInput, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, type IamPublicConfig, IamPublicConfigSchema, IamRefreshTokenDataSchema, type IamRefreshTokenInput, IamRefreshTokenInputSchema, type IamRefreshTokenOutput, type IamRegisterInput, IamRegisterInputSchema, IamRequestPasswordResetInputSchema, IamRoleSchema, IamSendOtpDataSchema, type IamSendOtpInput, IamSendOtpInputSchema, IamTokenPairSchema, type IamUpdateCurrentUserInput, IamUpdateCurrentUserInputSchema, type IamUpdateRoleInput, IamUpdateRoleInputSchema, type IamUserIdInput, IamUserIdInputSchema, IamUserSchema, iamContract };
package/dist/iam/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, iamContract } from '../chunk-MBNBQY2J.js';
1
+ export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamConfirmPasswordResetInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamLdapLoginInputSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamPublicConfigSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRequestPasswordResetInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, iamContract } from '../chunk-APZWTGQD.js';
2
2
  import '../chunk-CUU2F6YD.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import { AnyContractProcedure, AnyContractRouter } from '@orpc/contract';
4
4
  import * as zod_v4_core from 'zod/v4/core';
5
5
  import * as zod from 'zod';
6
6
  import { z } from 'zod';
7
- export { IamAdminCreateUserInput, IamAdminCreateUserInputSchema, IamAdminResetPasswordInput, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInput, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultOutput, IamAuthResultSchema, IamChangePasswordInput, IamChangePasswordInputSchema, IamContract, IamCreatePermissionInput, IamCreatePermissionInputSchema, IamCreateRoleInput, IamCreateRoleInputSchema, IamCurrentUser, IamCurrentUserOutput, IamCurrentUserSchema, IamListPermissionsInput, IamListPermissionsInputSchema, IamListUsersInput, IamListUsersInputSchema, IamLoginInput, IamLoginInputSchema, IamLogoutInput, IamLogoutInputSchema, IamOtpLoginInput, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamRefreshTokenDataSchema, IamRefreshTokenInput, IamRefreshTokenInputSchema, IamRefreshTokenOutput, IamRegisterInput, IamRegisterInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInput, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInput, IamUpdateCurrentUserInputSchema, IamUpdateRoleInput, IamUpdateRoleInputSchema, IamUserIdInput, IamUserIdInputSchema, IamUserSchema } from './iam/index.js';
7
+ export { IamAdminCreateUserInput, IamAdminCreateUserInputSchema, IamAdminResetPasswordInput, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInput, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultOutput, IamAuthResultSchema, IamChangePasswordInput, IamChangePasswordInputSchema, IamConfirmPasswordResetInputSchema, IamContract, IamCreatePermissionInput, IamCreatePermissionInputSchema, IamCreateRoleInput, IamCreateRoleInputSchema, IamCurrentUser, IamCurrentUserOutput, IamCurrentUserSchema, IamLdapLoginInput, IamLdapLoginInputSchema, IamListPermissionsInput, IamListPermissionsInputSchema, IamListUsersInput, IamListUsersInputSchema, IamLoginInput, IamLoginInputSchema, IamLogoutInput, IamLogoutInputSchema, IamOtpLoginInput, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamPublicConfig, IamPublicConfigSchema, IamRefreshTokenDataSchema, IamRefreshTokenInput, IamRefreshTokenInputSchema, IamRefreshTokenOutput, IamRegisterInput, IamRegisterInputSchema, IamRequestPasswordResetInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInput, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInput, IamUpdateCurrentUserInputSchema, IamUpdateRoleInput, IamUpdateRoleInputSchema, IamUserIdInput, IamUserIdInputSchema, IamUserSchema } from './iam/index.js';
8
8
  export { PaymentContract, PaymentCreateOrderDataSchema, PaymentCreateOrderInput, PaymentCreateOrderInputSchema, PaymentCreateOrderOutput, PaymentNotifyMessageSchema, PaymentOrderSchema, PaymentProviderSchema, PaymentQueryOrderInputSchema, PaymentRefundDataSchema, PaymentRefundInput, PaymentRefundInputSchema, PaymentStripeNotifyDataSchema, PaymentTradeTypeSchema } from './payment/index.js';
9
9
  export { StorageContract, StorageDeleteFilesInput, StorageDeleteFilesInputSchema, StorageFileKeyInput, StorageFileKeyInputSchema, StorageFileMetadataSchema, StorageListFilesDataSchema, StorageListFilesInput, StorageListFilesInputSchema, StoragePresignDownloadInput, StoragePresignDownloadInputSchema, StoragePresignUploadInput, StoragePresignUploadInputSchema, StoragePresignedUrlOutput, StoragePresignedUrlSchema } from './storage/index.js';
10
10
  import '@h-ai/core';
@@ -195,6 +195,163 @@ declare const apiContract: {
195
195
  /** IAM 领域 contract(认证 / 用户 / 角色 / 权限)。 */
196
196
  iam: {
197
197
  auth: {
198
+ publicConfig: _orpc_contract.ContractProcedureBuilderWithOutput<_orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
199
+ success: zod.ZodLiteral<true>;
200
+ data: zod.ZodNullable<zod.ZodObject<{
201
+ password: zod.ZodObject<{
202
+ minLength: zod.ZodNumber;
203
+ maxLength: zod.ZodNumber;
204
+ requireUppercase: zod.ZodBoolean;
205
+ requireLowercase: zod.ZodBoolean;
206
+ requireNumber: zod.ZodBoolean;
207
+ requireSpecialChar: zod.ZodBoolean;
208
+ expirationDays: zod.ZodNumber;
209
+ }, zod_v4_core.$strip>;
210
+ register: zod.ZodObject<{
211
+ enabled: zod.ZodBoolean;
212
+ }, zod_v4_core.$strip>;
213
+ login: zod.ZodObject<{
214
+ password: zod.ZodBoolean;
215
+ otp: zod.ZodBoolean;
216
+ ldap: zod.ZodBoolean;
217
+ email: zod.ZodBoolean;
218
+ sms: zod.ZodBoolean;
219
+ }, zod_v4_core.$strip>;
220
+ passwordReset: zod.ZodObject<{
221
+ enabled: zod.ZodBoolean;
222
+ mode: zod.ZodEnum<{
223
+ email: "email";
224
+ phone: "phone";
225
+ }>;
226
+ }, zod_v4_core.$strip>;
227
+ otp: zod.ZodObject<{
228
+ length: zod.ZodNumber;
229
+ resendInterval: zod.ZodNumber;
230
+ }, zod_v4_core.$strip>;
231
+ agreements: zod.ZodObject<{
232
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
233
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
234
+ userAgreementUrl: zod.ZodOptional<zod.ZodString>;
235
+ privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
236
+ showOnRegister: zod.ZodBoolean;
237
+ showOnLogin: zod.ZodBoolean;
238
+ }, zod_v4_core.$strip>;
239
+ ui: zod.ZodObject<{
240
+ variant: zod.ZodEnum<{
241
+ split: "split";
242
+ card: "card";
243
+ }>;
244
+ title: zod.ZodOptional<zod.ZodString>;
245
+ subtitle: zod.ZodOptional<zod.ZodString>;
246
+ brandTitle: zod.ZodOptional<zod.ZodString>;
247
+ brandText: zod.ZodOptional<zod.ZodString>;
248
+ logoUrl: zod.ZodOptional<zod.ZodString>;
249
+ illustrationUrl: zod.ZodOptional<zod.ZodString>;
250
+ }, zod_v4_core.$strip>;
251
+ session: zod.ZodObject<{
252
+ maxAge: zod.ZodNumber;
253
+ }, zod_v4_core.$strip>;
254
+ }, zod_v4_core.$strip>>;
255
+ }, zod_v4_core.$strip>, zod.ZodObject<{
256
+ success: zod.ZodLiteral<false>;
257
+ error: zod.ZodObject<{
258
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
259
+ message: zod.ZodString;
260
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
261
+ system: zod.ZodOptional<zod.ZodString>;
262
+ module: zod.ZodOptional<zod.ZodString>;
263
+ cause: zod.ZodOptional<zod.ZodUnknown>;
264
+ suggestion: zod.ZodOptional<zod.ZodString>;
265
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
266
+ }, zod_v4_core.$strip>;
267
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
268
+ loginWithLdap: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
269
+ username: zod.ZodString;
270
+ password: zod.ZodString;
271
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
272
+ success: zod.ZodLiteral<true>;
273
+ data: zod.ZodObject<{
274
+ user: zod.ZodObject<{
275
+ id: zod.ZodString;
276
+ username: zod.ZodString;
277
+ email: zod.ZodOptional<zod.ZodString>;
278
+ phone: zod.ZodOptional<zod.ZodString>;
279
+ displayName: zod.ZodOptional<zod.ZodString>;
280
+ avatarUrl: zod.ZodOptional<zod.ZodString>;
281
+ enabled: zod.ZodBoolean;
282
+ emailVerified: zod.ZodOptional<zod.ZodBoolean>;
283
+ phoneVerified: zod.ZodOptional<zod.ZodBoolean>;
284
+ createdAt: zod.ZodCoercedDate<unknown>;
285
+ updatedAt: zod.ZodCoercedDate<unknown>;
286
+ metadata: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
287
+ }, zod_v4_core.$strip>;
288
+ tokens: zod.ZodObject<{
289
+ accessToken: zod.ZodString;
290
+ refreshToken: zod.ZodOptional<zod.ZodString>;
291
+ expiresIn: zod.ZodNumber;
292
+ tokenType: zod.ZodLiteral<"Bearer">;
293
+ }, zod_v4_core.$strip>;
294
+ roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
295
+ permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
296
+ agreements: zod.ZodOptional<zod.ZodObject<{
297
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
298
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
299
+ userAgreementUrl: zod.ZodOptional<zod.ZodString>;
300
+ privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
301
+ showOnRegister: zod.ZodBoolean;
302
+ showOnLogin: zod.ZodBoolean;
303
+ }, zod_v4_core.$strip>>;
304
+ }, zod_v4_core.$strip>;
305
+ }, zod_v4_core.$strip>, zod.ZodObject<{
306
+ success: zod.ZodLiteral<false>;
307
+ error: zod.ZodObject<{
308
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
309
+ message: zod.ZodString;
310
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
311
+ system: zod.ZodOptional<zod.ZodString>;
312
+ module: zod.ZodOptional<zod.ZodString>;
313
+ cause: zod.ZodOptional<zod.ZodUnknown>;
314
+ suggestion: zod.ZodOptional<zod.ZodString>;
315
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
316
+ }, zod_v4_core.$strip>;
317
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
318
+ requestPasswordReset: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
319
+ identifier: zod.ZodString;
320
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
321
+ success: zod.ZodLiteral<true>;
322
+ data: zod.ZodVoid;
323
+ }, zod_v4_core.$strip>, zod.ZodObject<{
324
+ success: zod.ZodLiteral<false>;
325
+ error: zod.ZodObject<{
326
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
327
+ message: zod.ZodString;
328
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
329
+ system: zod.ZodOptional<zod.ZodString>;
330
+ module: zod.ZodOptional<zod.ZodString>;
331
+ cause: zod.ZodOptional<zod.ZodUnknown>;
332
+ suggestion: zod.ZodOptional<zod.ZodString>;
333
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
334
+ }, zod_v4_core.$strip>;
335
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
336
+ confirmPasswordReset: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
337
+ token: zod.ZodString;
338
+ newPassword: zod.ZodString;
339
+ }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
340
+ success: zod.ZodLiteral<true>;
341
+ data: zod.ZodVoid;
342
+ }, zod_v4_core.$strip>, zod.ZodObject<{
343
+ success: zod.ZodLiteral<false>;
344
+ error: zod.ZodObject<{
345
+ code: zod.ZodUnion<readonly [zod.ZodString, zod.ZodNumber]>;
346
+ message: zod.ZodString;
347
+ httpStatus: zod.ZodOptional<zod.ZodNumber>;
348
+ system: zod.ZodOptional<zod.ZodString>;
349
+ module: zod.ZodOptional<zod.ZodString>;
350
+ cause: zod.ZodOptional<zod.ZodUnknown>;
351
+ suggestion: zod.ZodOptional<zod.ZodString>;
352
+ ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
353
+ }, zod_v4_core.$strip>;
354
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>;
198
355
  login: _orpc_contract.ContractProcedureBuilderWithInputOutput<zod.ZodObject<{
199
356
  identifier: zod.ZodString;
200
357
  password: zod.ZodString;
@@ -225,6 +382,8 @@ declare const apiContract: {
225
382
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
226
383
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
227
384
  agreements: zod.ZodOptional<zod.ZodObject<{
385
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
386
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
228
387
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
229
388
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
230
389
  showOnRegister: zod.ZodBoolean;
@@ -273,6 +432,8 @@ declare const apiContract: {
273
432
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
274
433
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
275
434
  agreements: zod.ZodOptional<zod.ZodObject<{
435
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
436
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
276
437
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
277
438
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
278
439
  showOnRegister: zod.ZodBoolean;
@@ -419,6 +580,8 @@ declare const apiContract: {
419
580
  roles: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
420
581
  permissions: zod.ZodDefault<zod.ZodArray<zod.ZodString>>;
421
582
  agreements: zod.ZodOptional<zod.ZodObject<{
583
+ userAgreementMarkdown: zod.ZodOptional<zod.ZodString>;
584
+ privacyPolicyMarkdown: zod.ZodOptional<zod.ZodString>;
422
585
  userAgreementUrl: zod.ZodOptional<zod.ZodString>;
423
586
  privacyPolicyUrl: zod.ZodOptional<zod.ZodString>;
424
587
  showOnRegister: zod.ZodBoolean;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { iamContract, paginatedSchema } from './chunk-MBNBQY2J.js';
2
- export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, PaginationQuerySchema, paginatedSchema } from './chunk-MBNBQY2J.js';
1
+ import { iamContract, paginatedSchema } from './chunk-APZWTGQD.js';
2
+ export { IamAdminCreateUserInputSchema, IamAdminResetPasswordInputSchema, IamAdminUpdateUserInputSchema, IamAgreementDisplaySchema, IamAuthResultSchema, IamChangePasswordInputSchema, IamConfirmPasswordResetInputSchema, IamCreatePermissionInputSchema, IamCreateRoleInputSchema, IamCurrentUserSchema, IamLdapLoginInputSchema, IamListPermissionsInputSchema, IamListUsersInputSchema, IamLoginInputSchema, IamLogoutInputSchema, IamOtpLoginInputSchema, IamPermissionSchema, IamPermissionTypeSchema, IamPublicConfigSchema, IamRefreshTokenDataSchema, IamRefreshTokenInputSchema, IamRegisterInputSchema, IamRequestPasswordResetInputSchema, IamRoleSchema, IamSendOtpDataSchema, IamSendOtpInputSchema, IamTokenPairSchema, IamUpdateCurrentUserInputSchema, IamUpdateRoleInputSchema, IamUserIdInputSchema, IamUserSchema, PaginationQuerySchema, paginatedSchema } from './chunk-APZWTGQD.js';
3
3
  import { storageContract } from './chunk-3QSKWVLP.js';
4
4
  export { StorageDeleteFilesInputSchema, StorageFileKeyInputSchema, StorageFileMetadataSchema, StorageListFilesDataSchema, StorageListFilesInputSchema, StoragePresignDownloadInputSchema, StoragePresignUploadInputSchema, StoragePresignedUrlSchema } from './chunk-3QSKWVLP.js';
5
5
  import { aiContract } from './chunk-VSPYX4DD.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@h-ai/api-contract",
3
3
  "type": "module",
4
- "version": "0.1.0-alpha.59",
4
+ "version": "0.1.0-alpha.61",
5
5
  "description": "Hai Framework public API contracts powered by oRPC and Zod.",
6
6
  "license": "Apache-2.0",
7
7
  "exports": {
@@ -39,7 +39,7 @@
39
39
  "node": "^22.22.2 || ^24.15.0 || >=26.0.0"
40
40
  },
41
41
  "dependencies": {
42
- "@h-ai/core": "0.1.0-alpha.59",
42
+ "@h-ai/core": "0.1.0-alpha.61",
43
43
  "@orpc/contract": "^1.15.5",
44
44
  "zod": "^4.6.5"
45
45
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/pagination-schemas.ts","../src/iam/iam-schemas.ts","../src/iam/iam-contract.ts"],"names":["z"],"mappings":";;;AAuBO,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EAC9C,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,EAAE,QAAA;AACpD,CAAC;AAmBM,SAAS,gBAAqC,UAAA,EAAe;AAClE,EAAA,OAAO,EAAE,MAAA,CAAO;AAAA,IACd,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA;AAAA,IACzB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,QAAA,EAAU,EAAE,MAAA;AAAO,GACpB,CAAA;AACH;ACvCO,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,aAAA,EAAeA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,aAAA,EAAeA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC;AAGM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,CAAAA,CAAE,OAAA,CAAQ,QAAQ;AAC/B,CAAC;AAGM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,gBAAA,EAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACtC,gBAAA,EAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACtC,cAAA,EAAgBA,EAAE,OAAA,EAAQ;AAAA,EAC1B,WAAA,EAAaA,EAAE,OAAA;AACjB,CAAC;AAGM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,aAAA;AAAA,EACN,MAAA,EAAQ,kBAAA;AAAA,EACR,KAAA,EAAOA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EACrC,WAAA,EAAaA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC3C,UAAA,EAAY,0BAA0B,QAAA;AACxC,CAAC;AAGM,IAAM,oBAAA,GAAuB,cAAc,MAAA,CAAO;AAAA,EACvD,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EACzB,WAAA,EAAaA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ;AACjC,CAAC;AAGM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC5B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,UAAA,EAAYA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1B,CAAC;AAGM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC5B,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AACxB,CAAC;AAGM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,aAAaA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AACjC,CAAC;AAGM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAC9B,CAAC;AAGM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAChC,CAAC;AAGM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,MAAA,EAAQ;AACV,CAAC;AAGM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,GAAQ,QAAA,EAAS;AAAA,EACnC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC;AAGM,IAAM,4BAAA,GAA+BA,EAAE,MAAA,CAAO;AAAA,EACnD,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAC/B,CAAC;AAGM,IAAM,+BAAA,GAAkCA,EAAE,MAAA,CAAO;AAAA,EACtD,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACrC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,GAAQ,QAAA,EAAS;AAAA,EACnC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AAC9C,CAAC;AAGM,IAAM,uBAAA,GAA0B,sBAAsB,MAAA,CAAO;AAAA,EAClE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE5B,SAASA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,UAAU,CAAA,CAAA,KAAK,CAAA,KAAM,MAAA,GAAY,MAAA,GAAY,MAAM,MAAM;AACzG,CAAC;AAGM,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,GAAQ,QAAA,EAAS;AAAA,EACnC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACvB,CAAC;AAGM,IAAM,6BAAA,GAAgCA,EAAE,MAAA,CAAO;AAAA,EACpD,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACrC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,GAAQ,QAAA,EAAS;AAAA,EACnC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA,EAAS;AAAA,EACrD,OAAA,EAASA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,SAASA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC/B,CAAC;AAGM,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EAC3C,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AACtB,CAAC;AAGM,IAAM,gCAAA,GAAmCA,EAAE,MAAA,CAAO;AAAA,EACvD,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAC/B,CAAC;AAGM,IAAM,aAAA,GAAgBA,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACxB,CAAC;AAGM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,MAAMA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC;AAGM,IAAM,0BAA0BA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAC;AAGhE,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,IAAA,EAAM,wBAAwB,QAAA,EAAS;AAAA,EACvC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAAA,EACzB,SAAA,EAAWA,CAAAA,CAAE,MAAA,CAAO,IAAA;AACtB,CAAC;AAGM,IAAM,6BAAA,GAAgC,sBAAsB,MAAA,CAAO;AAAA,EACxE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,IAAA,EAAM,wBAAwB,QAAA;AAChC,CAAC;AAGM,IAAM,8BAAA,GAAiCA,EAAE,MAAA,CAAO;AAAA,EACrD,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,IAAA,EAAM,wBAAwB,QAAA;AAChC,CAAC;;;AClLD,IAAM,sBAAA,GAAyB,gBAAgB,mBAAmB,CAAA;AAClE,IAAM,gBAAA,GAAmB,gBAAgB,aAAa,CAAA;AACtD,IAAM,gBAAA,GAAmB,gBAAgB,aAAa,CAAA;AAG/C,IAAM,WAAA,GAAc;AAAA,EACzB,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,aAAA,EAAe,WAAA,EAAa,gBAAA,EAAkB,OAAA,EAAS,gBAAA,EAAkB,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAClI,KAAA,CAAM,mBAAmB,CAAA,CACzB,MAAA,CAAO,sBAAsB,CAAA;AAAA,IAChC,YAAA,EAAc,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,uBAAA,EAAyB,OAAA,EAAS,WAAA,EAAa,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAC/I,KAAA,CAAM,sBAAsB,CAAA,CAC5B,MAAA,CAAO,sBAAsB,CAAA;AAAA,IAChC,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,cAAA,EAAgB,WAAA,EAAa,iBAAA,EAAmB,OAAA,EAAS,QAAA,EAAU,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAC7H,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,mBAAmB,CAAA;AAAA,IAC7B,WAAA,EAAa,MAAM,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,UAAA,EAAY,aAAa,sBAAA,EAAwB,OAAA,EAAS,qCAAqC,IAAA,EAAM,CAAC,OAAO,MAAM,CAAA,EAAG,CAAA,CAC7J,MAAA,CAAO,eAAA,CAAgB,oBAAoB,CAAC,CAAA;AAAA,IAC/C,OAAA,EAAS,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,eAAA,EAAiB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,sBAAA,EAAwB,IAAA,EAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,CAAA,CAC9I,KAAA,CAAM,0BAA0B,CAAA,CAChC,MAAA,CAAO,eAAA,CAAgB,yBAAyB,CAAC,CAAA;AAAA,IACpD,OAAA,EAAS,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,gBAAA,EAAkB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,UAAA,EAAY,IAAA,EAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,CAAA,CACnI,KAAA,CAAM,qBAAqB,CAAA,CAC3B,MAAA,CAAO,eAAA,CAAgB,oBAAoB,CAAC,CAAA;AAAA,IAC/C,QAAA,EAAU,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,gBAAA,EAAkB,WAAA,EAAa,mBAAA,EAAqB,OAAA,EAAS,oBAAA,EAAsB,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAC/I,KAAA,CAAM,sBAAsB,CAAA,CAC5B,MAAA,CAAO,sBAAsB,CAAA;AAAA,IAChC,cAAA,EAAgB,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,uBAAA,EAAyB,WAAA,EAAa,yBAAA,EAA2B,OAAA,EAAS,8BAAA,EAAgC,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAC5K,KAAA,CAAM,4BAA4B,CAAA,CAClC,MAAA,CAAO,mBAAmB,CAAA;AAAA,IAC7B,iBAAA,EAAmB,MAAM,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,UAAA,EAAY,WAAA,EAAa,4BAAA,EAA8B,OAAA,EAAS,qBAAA,EAAuB,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,EAAG,EAC3J,KAAA,CAAM,+BAA+B,CAAA,CACrC,MAAA,CAAO,gBAAgB;AAAA,GAC5B;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,YAAA,EAAc,WAAA,EAAa,gBAAA,EAAkB,OAAA,EAAS,YAAA,EAAc,IAAA,EAAM,CAAC,OAAO,OAAO,CAAA,EAAG,CAAA,CAC5H,KAAA,CAAM,uBAAuB,CAAA,CAC7B,MAAA,CAAO,eAAA,CAAgB,eAAA,CAAgB,aAAa,CAAC,CAAC,CAAA;AAAA,IACzD,GAAA,EAAK,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,eAAA,EAAiB,OAAA,EAAS,UAAA,EAAY,IAAA,EAAM,CAAC,OAAO,OAAO,CAAA,EAAG,CAAA,CAC7H,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,QAAA,EAAU,CAAC,CAAA;AAAA,IACnD,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,YAAA,EAAc,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EAClI,KAAA,CAAM,6BAA6B,CAAA,CACnC,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC1B,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EACtI,KAAA,CAAM,6BAA6B,CAAA,CACnC,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC1B,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,UAAU,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EACzI,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,mBAAmB,CAAA;AAAA,IAC7B,aAAA,EAAe,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,gCAAA,EAAkC,WAAA,EAAa,yBAAA,EAA2B,OAAA,EAAS,qBAAA,EAAuB,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EAC5K,KAAA,CAAM,gCAAgC,CAAA,CACtC,MAAA,CAAO,mBAAmB;AAAA,GAC/B;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAM,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,YAAA,EAAc,WAAA,EAAa,gBAAA,EAAkB,OAAA,EAAS,YAAA,EAAc,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,CAAA,CAC5H,OAAO,eAAA,CAAgB,eAAA,CAAgB,aAAa,CAAC,CAAC,CAAA;AAAA,IACzD,GAAA,EAAK,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,eAAA,EAAiB,OAAA,EAAS,UAAA,EAAY,IAAA,EAAM,CAAC,OAAO,OAAO,CAAA,EAAG,CAAA,CAC7H,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,eAAA,CAAgB,aAAA,CAAc,QAAA,EAAU,CAAC,CAAA;AAAA,IACnD,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,YAAA,EAAc,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EAClI,KAAA,CAAM,wBAAwB,CAAA,CAC9B,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC1B,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EACtI,KAAA,CAAM,wBAAwB,CAAA,CAC9B,MAAA,CAAO,gBAAgB,CAAA;AAAA,IAC1B,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,UAAU,IAAA,EAAM,iBAAA,EAAmB,WAAA,EAAa,kBAAA,EAAoB,OAAA,EAAS,aAAA,EAAe,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,EAAG,EACzI,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,mBAAmB;AAAA,GAC/B;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,kBAAA,EAAoB,WAAA,EAAa,sBAAA,EAAwB,OAAA,EAAS,kBAAA,EAAoB,IAAA,EAAM,CAAC,OAAO,aAAa,CAAA,EAAG,CAAA,CACpJ,KAAA,CAAM,6BAA6B,CAAA,CACnC,MAAA,CAAO,eAAA,CAAgB,eAAA,CAAgB,mBAAmB,CAAC,CAAC,CAAA;AAAA,IAC/D,GAAA,EAAK,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,uBAAA,EAAyB,WAAA,EAAa,qBAAA,EAAuB,OAAA,EAAS,gBAAA,EAAkB,IAAA,EAAM,CAAC,OAAO,aAAa,CAAA,EAAG,CAAA,CACrJ,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,eAAA,CAAgB,mBAAA,CAAoB,QAAA,EAAU,CAAC,CAAA;AAAA,IACzD,MAAA,EAAQ,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,kBAAA,EAAoB,WAAA,EAAa,wBAAA,EAA0B,OAAA,EAAS,mBAAA,EAAqB,IAAA,EAAM,CAAC,KAAA,EAAO,aAAa,CAAA,EAAG,CAAA,CAC1J,KAAA,CAAM,8BAA8B,CAAA,CACpC,MAAA,CAAO,eAAA,CAAgB,mBAAmB,CAAC,CAAA;AAAA,IAC9C,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,UAAU,IAAA,EAAM,uBAAA,EAAyB,WAAA,EAAa,wBAAA,EAA0B,OAAA,EAAS,mBAAA,EAAqB,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,EAAG,EACjK,KAAA,CAAM,oBAAoB,CAAA,CAC1B,MAAA,CAAO,mBAAmB;AAAA;AAEjC","file":"chunk-MBNBQY2J.js","sourcesContent":["/**\n * @h-ai/api-contract — 分页 Schema\n *\n * 提供通用分页查询参数与分页结果封装,供各领域 contract 扩展复用。\n * @module pagination-schemas\n */\n\nimport { z } from 'zod'\n\n/**\n * 通用分页查询参数 Schema。\n *\n * 页码和页大小均为可选,由服务端提供合理默认值(page=1, pageSize=20)。\n * 支持字符串 coerce,适配 GET 请求 query string 场景。\n *\n * @example\n * ```ts\n * // 扩展为领域专属查询参数\n * const IamListUsersInputSchema = PaginationQuerySchema.extend({\n * search: z.string().optional(),\n * })\n * ```\n */\nexport const PaginationQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional(),\n pageSize: z.coerce.number().int().min(1).max(100).optional(),\n})\n\n/**\n * 创建分页结果 Schema。\n *\n * 生成标准分页响应结构 `{ items, total, page, pageSize }`,\n * 与 `@h-ai/reldb` 的 `PageResult<T>` 保持对齐。\n *\n * @param itemSchema - 分页项的 Zod Schema\n * @returns 包含 items/total/page/pageSize 的对象 Schema\n *\n * @example\n * ```ts\n * const listUsers = route({ method: 'GET', path: '/users' })\n * .output(haiResultSchema(paginatedSchema(IamUserSchema)))\n * // 解析结果形如:\n * // { success: true, data: { items: [...], total: 100, page: 1, pageSize: 20 } }\n * ```\n */\nexport function paginatedSchema<T extends z.ZodType>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n}\n","/**\n * @h-ai/api-contract — IAM 领域 Schema\n *\n * 包含用户、Token、角色、权限以及相关 input/data 的 Zod Schema 定义。\n * 一次性输出包装在 contract 中内联,仅保留跨接口、跨层复用的数据结构。\n * @module iam-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\nimport { PaginationQuerySchema } from '../common/pagination-schemas.js'\n\n/** 用户基础信息 Schema。 */\nexport const IamUserSchema = z.object({\n id: z.string(),\n username: z.string(),\n email: z.string().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n enabled: z.boolean(),\n emailVerified: z.boolean().optional(),\n phoneVerified: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** Token 对 Schema。 */\nexport const IamTokenPairSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string().optional(),\n expiresIn: z.number(),\n tokenType: z.literal('Bearer'),\n})\n\n/** 协议展示 Schema。 */\nexport const IamAgreementDisplaySchema = z.object({\n userAgreementUrl: z.string().optional(),\n privacyPolicyUrl: z.string().optional(),\n showOnRegister: z.boolean(),\n showOnLogin: z.boolean(),\n})\n\n/** 登录结果业务数据 Schema。 */\nexport const IamAuthResultSchema = z.object({\n user: IamUserSchema,\n tokens: IamTokenPairSchema,\n roles: z.array(z.string()).default([]),\n permissions: z.array(z.string()).default([]),\n agreements: IamAgreementDisplaySchema.optional(),\n})\n\n/** 当前会话用户信息;包含服务端重新校验后的角色与权限快照。 */\nexport const IamCurrentUserSchema = IamUserSchema.extend({\n roles: z.array(z.string()),\n permissions: z.array(z.string()),\n})\n\n/** 密码登录入参 Schema。 */\nexport const IamLoginInputSchema = z.object({\n identifier: z.string().min(1),\n password: z.string().min(1),\n rememberMe: z.boolean().optional(),\n})\n\n/** OTP 登录入参 Schema。 */\nexport const IamOtpLoginInputSchema = z.object({\n identifier: z.string().min(1),\n code: z.string().min(1),\n})\n\n/** 登出入参 Schema。 */\nexport const IamLogoutInputSchema = z.object({\n accessToken: z.string().min(1).optional(),\n})\n\n/** 发送 OTP 入参 Schema。 */\nexport const IamSendOtpInputSchema = z.object({\n identifier: z.string().min(1),\n})\n\n/** 发送 OTP 业务数据 Schema。 */\nexport const IamSendOtpDataSchema = z.object({\n expiresAt: z.coerce.date(),\n})\n\n/** Token 刷新入参 Schema。 */\nexport const IamRefreshTokenInputSchema = z.object({\n refreshToken: z.string().min(1),\n})\n\n/** Token 刷新业务数据 Schema。 */\nexport const IamRefreshTokenDataSchema = z.object({\n tokens: IamTokenPairSchema,\n})\n\n/** 注册入参 Schema。 */\nexport const IamRegisterInputSchema = z.object({\n username: z.string().min(1),\n password: z.string().min(6),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 修改密码入参 Schema。 */\nexport const IamChangePasswordInputSchema = z.object({\n oldPassword: z.string().min(1),\n newPassword: z.string().min(6),\n})\n\n/** 当前用户更新入参 Schema。 */\nexport const IamUpdateCurrentUserInputSchema = z.object({\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n phone: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 用户列表查询入参 Schema。 */\nexport const IamListUsersInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n // 注意:HTTP query 是字符串,使用枚举 + transform 避免 z.coerce.boolean 的 'false' → true 陷阱。\n enabled: z.enum(['true', 'false']).optional().transform(v => v === undefined ? undefined : v === 'true'),\n})\n\n/** Admin 创建用户入参 Schema。 */\nexport const IamAdminCreateUserInputSchema = z.object({\n username: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n password: z.string().min(6),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n roleIds: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n})\n\n/** Admin 更新用户入参 Schema。 */\nexport const IamAdminUpdateUserInputSchema = z.object({\n id: z.string().min(1),\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n enabled: z.boolean().optional(),\n roleIds: z.array(z.string()).optional(),\n})\n\n/** Admin 删除用户入参 Schema。 */\nexport const IamUserIdInputSchema = z.object({\n id: z.string().min(1),\n})\n\n/** Admin 重置密码入参 Schema。 */\nexport const IamAdminResetPasswordInputSchema = z.object({\n id: z.string().min(1),\n newPassword: z.string().min(6),\n})\n\n/** 角色基础信息 Schema。 */\nexport const IamRoleSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 创建角色入参 Schema。 */\nexport const IamCreateRoleInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n})\n\n/** 更新角色入参 Schema。 */\nexport const IamUpdateRoleInputSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1).optional(),\n description: z.string().optional(),\n})\n\n/** 权限类型 Schema。 */\nexport const IamPermissionTypeSchema = z.enum(['menu', 'api', 'button'])\n\n/** 权限基础信息 Schema。 */\nexport const IamPermissionSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 权限列表查询入参 Schema。 */\nexport const IamListPermissionsInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\n/** 创建权限入参 Schema。 */\nexport const IamCreatePermissionInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\nexport type IamLoginInput = z.infer<typeof IamLoginInputSchema>\nexport type IamOtpLoginInput = z.infer<typeof IamOtpLoginInputSchema>\nexport type IamLogoutInput = z.infer<typeof IamLogoutInputSchema>\nexport type IamSendOtpInput = z.infer<typeof IamSendOtpInputSchema>\nexport type IamAuthResultOutput = HaiResult<z.infer<typeof IamAuthResultSchema>>\nexport type IamCurrentUser = z.infer<typeof IamCurrentUserSchema>\nexport type IamCurrentUserOutput = HaiResult<IamCurrentUser>\nexport type IamRefreshTokenInput = z.infer<typeof IamRefreshTokenInputSchema>\nexport type IamRefreshTokenOutput = HaiResult<z.infer<typeof IamRefreshTokenDataSchema>>\nexport type IamRegisterInput = z.infer<typeof IamRegisterInputSchema>\nexport type IamChangePasswordInput = z.infer<typeof IamChangePasswordInputSchema>\nexport type IamUpdateCurrentUserInput = z.infer<typeof IamUpdateCurrentUserInputSchema>\nexport type IamListUsersInput = z.infer<typeof IamListUsersInputSchema>\nexport type IamAdminCreateUserInput = z.infer<typeof IamAdminCreateUserInputSchema>\nexport type IamAdminUpdateUserInput = z.infer<typeof IamAdminUpdateUserInputSchema>\nexport type IamUserIdInput = z.infer<typeof IamUserIdInputSchema>\nexport type IamAdminResetPasswordInput = z.infer<typeof IamAdminResetPasswordInputSchema>\nexport type IamCreateRoleInput = z.infer<typeof IamCreateRoleInputSchema>\nexport type IamUpdateRoleInput = z.infer<typeof IamUpdateRoleInputSchema>\nexport type IamListPermissionsInput = z.infer<typeof IamListPermissionsInputSchema>\nexport type IamCreatePermissionInput = z.infer<typeof IamCreatePermissionInputSchema>\n","/**\n * @h-ai/api-contract — IAM 领域 contract\n *\n * 定义身份认证与权限管理相关 API 的接口边界:\n * - auth:登录、登出、OTP、刷新 Token、注册、修改密码\n * - users:Admin 管理用户(CRUD + 重置密码)\n * - roles:Admin 管理角色(CRUD)\n * - permissions:Admin 管理权限(CRUD)\n *\n * auth.* 入口址前缀为 `/auth`;users/roles/permissions 前缀为 `/iam`。\n * @module iam-contract\n */\n\nimport { paginatedSchema } from '../common/pagination-schemas.js'\nimport { haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n IamAdminCreateUserInputSchema,\n IamAdminResetPasswordInputSchema,\n IamAdminUpdateUserInputSchema,\n IamAuthResultSchema,\n IamChangePasswordInputSchema,\n IamCreatePermissionInputSchema,\n IamCreateRoleInputSchema,\n IamCurrentUserSchema,\n IamListPermissionsInputSchema,\n IamListUsersInputSchema,\n IamLoginInputSchema,\n IamLogoutInputSchema,\n IamOtpLoginInputSchema,\n IamPermissionSchema,\n IamRefreshTokenDataSchema,\n IamRefreshTokenInputSchema,\n IamRegisterInputSchema,\n IamRoleSchema,\n IamSendOtpDataSchema,\n IamSendOtpInputSchema,\n IamUpdateCurrentUserInputSchema,\n IamUpdateRoleInputSchema,\n IamUserIdInputSchema,\n IamUserSchema,\n} from './iam-schemas.js'\n\n// 同一 contract 内被多个接口复用的输出结构保持私有,避免扩大公共 Schema 面。\nconst authResultOutputSchema = haiResultSchema(IamAuthResultSchema)\nconst userOutputSchema = haiResultSchema(IamUserSchema)\nconst roleOutputSchema = haiResultSchema(IamRoleSchema)\n\n/** IAM 领域 oRPC contract。 */\nexport const iamContract = {\n auth: {\n login: route({ method: 'POST', path: '/auth/login', operationId: 'iam.auth.login', summary: 'Password login', tags: ['iam', 'auth'] })\n .input(IamLoginInputSchema)\n .output(authResultOutputSchema),\n loginWithOtp: route({ method: 'POST', path: '/auth/login/otp', operationId: 'iam.auth.loginWithOtp', summary: 'OTP login', tags: ['iam', 'auth'] })\n .input(IamOtpLoginInputSchema)\n .output(authResultOutputSchema),\n logout: route({ method: 'POST', path: '/auth/logout', operationId: 'iam.auth.logout', summary: 'Logout', tags: ['iam', 'auth'] })\n .input(IamLogoutInputSchema)\n .output(HaiVoidResultSchema),\n currentUser: route({ method: 'GET', path: '/auth/me', operationId: 'iam.auth.currentUser', summary: 'Get current user and access scope', tags: ['iam', 'auth'] })\n .output(haiResultSchema(IamCurrentUserSchema)),\n refresh: route({ method: 'POST', path: '/auth/refresh', operationId: 'iam.auth.refresh', summary: 'Refresh access token', tags: ['iam', 'auth'] })\n .input(IamRefreshTokenInputSchema)\n .output(haiResultSchema(IamRefreshTokenDataSchema)),\n sendOtp: route({ method: 'POST', path: '/auth/otp/send', operationId: 'iam.auth.sendOtp', summary: 'Send OTP', tags: ['iam', 'auth'] })\n .input(IamSendOtpInputSchema)\n .output(haiResultSchema(IamSendOtpDataSchema)),\n register: route({ method: 'POST', path: '/auth/register', operationId: 'iam.auth.register', summary: 'Register and login', tags: ['iam', 'auth'] })\n .input(IamRegisterInputSchema)\n .output(authResultOutputSchema),\n changePassword: route({ method: 'POST', path: '/auth/change-password', operationId: 'iam.auth.changePassword', summary: 'Change current user password', tags: ['iam', 'auth'] })\n .input(IamChangePasswordInputSchema)\n .output(HaiVoidResultSchema),\n updateCurrentUser: route({ method: 'PUT', path: '/auth/me', operationId: 'iam.auth.updateCurrentUser', summary: 'Update current user', tags: ['iam', 'auth'] })\n .input(IamUpdateCurrentUserInputSchema)\n .output(userOutputSchema),\n },\n users: {\n list: route({ method: 'GET', path: '/iam/users', operationId: 'iam.users.list', summary: 'List users', tags: ['iam', 'users'] })\n .input(IamListUsersInputSchema)\n .output(haiResultSchema(paginatedSchema(IamUserSchema))),\n get: route({ method: 'GET', path: '/iam/users/{id}', operationId: 'iam.users.get', summary: 'Get user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamUserSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/users', operationId: 'iam.users.create', summary: 'Create user', tags: ['iam', 'users'] })\n .input(IamAdminCreateUserInputSchema)\n .output(userOutputSchema),\n update: route({ method: 'PUT', path: '/iam/users/{id}', operationId: 'iam.users.update', summary: 'Update user', tags: ['iam', 'users'] })\n .input(IamAdminUpdateUserInputSchema)\n .output(userOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/users/{id}', operationId: 'iam.users.delete', summary: 'Delete user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n resetPassword: route({ method: 'POST', path: '/iam/users/{id}/reset-password', operationId: 'iam.users.resetPassword', summary: 'Reset user password', tags: ['iam', 'users'] })\n .input(IamAdminResetPasswordInputSchema)\n .output(HaiVoidResultSchema),\n },\n roles: {\n list: route({ method: 'GET', path: '/iam/roles', operationId: 'iam.roles.list', summary: 'List roles', tags: ['iam', 'roles'] })\n .output(haiResultSchema(paginatedSchema(IamRoleSchema))),\n get: route({ method: 'GET', path: '/iam/roles/{id}', operationId: 'iam.roles.get', summary: 'Get role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamRoleSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/roles', operationId: 'iam.roles.create', summary: 'Create role', tags: ['iam', 'roles'] })\n .input(IamCreateRoleInputSchema)\n .output(roleOutputSchema),\n update: route({ method: 'PUT', path: '/iam/roles/{id}', operationId: 'iam.roles.update', summary: 'Update role', tags: ['iam', 'roles'] })\n .input(IamUpdateRoleInputSchema)\n .output(roleOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/roles/{id}', operationId: 'iam.roles.delete', summary: 'Delete role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n permissions: {\n list: route({ method: 'GET', path: '/iam/permissions', operationId: 'iam.permissions.list', summary: 'List permissions', tags: ['iam', 'permissions'] })\n .input(IamListPermissionsInputSchema)\n .output(haiResultSchema(paginatedSchema(IamPermissionSchema))),\n get: route({ method: 'GET', path: '/iam/permissions/{id}', operationId: 'iam.permissions.get', summary: 'Get permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamPermissionSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/permissions', operationId: 'iam.permissions.create', summary: 'Create permission', tags: ['iam', 'permissions'] })\n .input(IamCreatePermissionInputSchema)\n .output(haiResultSchema(IamPermissionSchema)),\n delete: route({ method: 'DELETE', path: '/iam/permissions/{id}', operationId: 'iam.permissions.delete', summary: 'Delete permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n}\n\nexport type IamContract = typeof iamContract\n"]}