@h-ai/api-contract 0.1.0-alpha.66 → 0.1.0-alpha.68

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/dist/ai/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { AUDIO_WS_PATH, AiAssistantMessageSchema, AiChatCompletionChoiceSchema, AiChatCompletionDataSchema, AiChatCompletionInputSchema, AiChatHistoryDataSchema, AiChatHistoryInputSchema, AiChatMessageSchema, AiChatRecordSchema, AiImageContentSchema, AiMemoryEntrySchema, AiMemoryListDataSchema, AiMemoryListInputSchema, AiMemoryRecallDataSchema, AiMemoryRecallInputSchema, AiMemoryTypeSchema, AiMessageContentSchema, AiMessageRoleSchema, AiSendMessageDataSchema, AiSendMessageInputSchema, AiSessionInfoSchema, AiSessionListDataSchema, AiSessionListInputSchema, AiTextContentSchema, AiTokenUsageSchema, AiToolCallSchema, AiToolDefinitionSchema, AiToolParameterSchema, AudioFormatSchema, AudioWsClientMessageSchema, AudioWsDoneMessageSchema, AudioWsStartMessageSchema, AudioWsTextMessageSchema, aiContract } from '../chunk-VSPYX4DD.js';
2
- import '../chunk-CUU2F6YD.js';
1
+ export { AUDIO_WS_PATH, AiAssistantMessageSchema, AiChatCompletionChoiceSchema, AiChatCompletionDataSchema, AiChatCompletionInputSchema, AiChatHistoryDataSchema, AiChatHistoryInputSchema, AiChatMessageSchema, AiChatRecordSchema, AiImageContentSchema, AiMemoryEntrySchema, AiMemoryListDataSchema, AiMemoryListInputSchema, AiMemoryRecallDataSchema, AiMemoryRecallInputSchema, AiMemoryTypeSchema, AiMessageContentSchema, AiMessageRoleSchema, AiSendMessageDataSchema, AiSendMessageInputSchema, AiSessionInfoSchema, AiSessionListDataSchema, AiSessionListInputSchema, AiTextContentSchema, AiTokenUsageSchema, AiToolCallSchema, AiToolDefinitionSchema, AudioFormatSchema, AudioWsClientMessageSchema, AudioWsDoneMessageSchema, AudioWsStartMessageSchema, AudioWsTextMessageSchema, aiContract } from '../chunk-G55ATYDA.js';
2
+ import '../chunk-JKPLID6E.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { haiResultSchema, route, HaiVoidResultSchema } from './chunk-CUU2F6YD.js';
1
+ import { haiResultSchema, route, HaiVoidResultSchema } from './chunk-JKPLID6E.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  var PaginationQuerySchema = z.object({
@@ -55,8 +55,7 @@ var IamCurrentUserSchema = IamUserSchema.extend({
55
55
  });
56
56
  var IamLoginInputSchema = z.object({
57
57
  identifier: z.string().min(1),
58
- password: z.string().min(1),
59
- rememberMe: z.boolean().optional()
58
+ password: z.string().min(1)
60
59
  });
61
60
  var IamLdapLoginInputSchema = z.object({ username: z.string().trim().min(1), password: z.string().min(1) });
62
61
  var IamRequestPasswordResetInputSchema = z.object({ identifier: z.string().trim().min(1) });
@@ -233,5 +232,5 @@ var iamContract = {
233
232
  };
234
233
 
235
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 };
236
- //# sourceMappingURL=chunk-RVSGP2GF.js.map
237
- //# sourceMappingURL=chunk-RVSGP2GF.js.map
235
+ //# sourceMappingURL=chunk-G3SME6V5.js.map
236
+ //# sourceMappingURL=chunk-G3SME6V5.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-G3SME6V5.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 * @example\n * ```ts\n * import { PaginationQuerySchema } from '@h-ai/api-contract'\n *\n * const value = PaginationQuerySchema.parse({})\n * void value\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 * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n * import { z } from 'zod'\n *\n * const page = apiContract.paginatedSchema(z.object({ id: z.string() }))\n * .parse({ items: [{ id: 'order_1' }], total: 1, page: 1, pageSize: 20 })\n * void page\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/**\n * 用户基础信息 Schema。\n * @example\n * ```ts\n * import { IamUserSchema } from '@h-ai/api-contract'\n *\n * const value = IamUserSchema.parse({\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null\n * })\n * void value\n * ```\n */\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/**\n * Token 对 Schema。\n * @example\n * ```ts\n * import { IamTokenPairSchema } from '@h-ai/api-contract'\n *\n * const value = IamTokenPairSchema.parse({\n * accessToken: 'example-only-access',\n * expiresIn: 0,\n * tokenType: 'Bearer'\n * })\n * void value\n * ```\n */\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/**\n * 协议展示 Schema。\n * @example\n * ```ts\n * import { IamAgreementDisplaySchema } from '@h-ai/api-contract'\n *\n * const value = IamAgreementDisplaySchema.parse({\n * showOnRegister: true,\n * showOnLogin: true\n * })\n * void value\n * ```\n */\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/**\n * 登录结果业务数据 Schema。\n * @example\n * ```ts\n * import { IamAuthResultSchema } from '@h-ai/api-contract'\n *\n * const value = IamAuthResultSchema.parse({\n * user: {\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null\n * },\n * tokens: {\n * accessToken: 'example-only-access',\n * expiresIn: 0,\n * tokenType: 'Bearer'\n * }\n * })\n * void value\n * ```\n */\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/**\n * 当前会话用户信息;包含服务端重新校验后的角色与权限快照。\n * @example\n * ```ts\n * import { IamCurrentUserSchema } from '@h-ai/api-contract'\n *\n * const value = IamCurrentUserSchema.parse({\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null,\n * roles: [\n * 'example'\n * ],\n * permissions: [\n * 'example'\n * ]\n * })\n * void value\n * ```\n */\nexport const IamCurrentUserSchema = IamUserSchema.extend({\n roles: z.array(z.string()),\n permissions: z.array(z.string()),\n})\n\n/**\n * 密码登录入参 Schema。\n * @example\n * ```ts\n * import { IamLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamLoginInputSchema.parse({\n * identifier: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport const IamLoginInputSchema = z.object({\n identifier: z.string().min(1),\n password: z.string().min(1),\n})\n\n/**\n * LDAP 登录与密码找回入参。\n * @example\n * ```ts\n * import { IamLdapLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamLdapLoginInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport const IamLdapLoginInputSchema = z.object({ username: z.string().trim().min(1), password: z.string().min(1) })\n/**\n * IamRequestPasswordResetInput 数据的运行时 Zod 校验约束。\n * @example\n * ```ts\n * import { IamRequestPasswordResetInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamRequestPasswordResetInputSchema.parse({\n * identifier: 'alice'\n * })\n * void value\n * ```\n */\nexport const IamRequestPasswordResetInputSchema = z.object({ identifier: z.string().trim().min(1) })\n/**\n * IamConfirmPasswordResetInput 数据的运行时 Zod 校验约束。\n * @example\n * ```ts\n * import { IamConfirmPasswordResetInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamConfirmPasswordResetInputSchema.parse({\n * token: 'example-only-token',\n * newPassword: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport const IamConfirmPasswordResetInputSchema = z.object({ token: z.string().min(1), newPassword: z.string().min(1) })\n\n/**\n * 认证页面公开配置白名单,独立于服务端连接/凭据配置。\n * @example\n * ```ts\n * import { IamPublicConfigSchema } from '@h-ai/api-contract'\n *\n * const value = IamPublicConfigSchema.parse({\n * password: {\n * minLength: 0,\n * maxLength: 0,\n * requireUppercase: true,\n * requireLowercase: true,\n * requireNumber: true,\n * requireSpecialChar: true,\n * expirationDays: 0\n * },\n * register: {\n * enabled: true\n * },\n * login: {\n * password: true,\n * otp: true,\n * ldap: true,\n * email: true,\n * sms: true\n * },\n * passwordReset: {\n * enabled: true,\n * mode: 'email'\n * },\n * otp: {\n * length: 0,\n * resendInterval: 0\n * },\n * agreements: {\n * showOnRegister: true,\n * showOnLogin: true\n * },\n * ui: {\n * variant: 'card'\n * },\n * session: {\n * maxAge: 0\n * }\n * })\n * void value\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/**\n * OTP 登录入参 Schema。\n * @example\n * ```ts\n * import { IamOtpLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamOtpLoginInputSchema.parse({\n * identifier: 'alice',\n * code: 'example-1'\n * })\n * void value\n * ```\n */\nexport const IamOtpLoginInputSchema = z.object({\n identifier: z.string().min(1),\n code: z.string().min(1),\n})\n\n/**\n * 登出入参 Schema。\n * 仅撤销调用方持有的完整 accessToken;省略时使用 Authorization Bearer,二者均无值则失败。\n * access 已到期仍可撤销关联 refresh;此入口不按 userId 撤销,也不授予任何身份权限。\n * @example\n * ```ts\n * import { IamLogoutInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamLogoutInputSchema.parse({})\n * void value\n * ```\n */\nexport const IamLogoutInputSchema = z.object({\n accessToken: z.string().min(1).optional(),\n})\n\n/**\n * 发送 OTP 入参 Schema。\n * @example\n * ```ts\n * import { IamSendOtpInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamSendOtpInputSchema.parse({\n * identifier: 'alice'\n * })\n * void value\n * ```\n */\nexport const IamSendOtpInputSchema = z.object({\n identifier: z.string().min(1),\n})\n\n/**\n * 发送 OTP 业务数据 Schema。\n * @example\n * ```ts\n * import { IamSendOtpDataSchema } from '@h-ai/api-contract'\n *\n * const value = IamSendOtpDataSchema.parse({\n * expiresAt: null\n * })\n * void value\n * ```\n */\nexport const IamSendOtpDataSchema = z.object({\n expiresAt: z.coerce.date(),\n})\n\n/**\n * Token 刷新入参 Schema。\n * @example\n * ```ts\n * import { IamRefreshTokenInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamRefreshTokenInputSchema.parse({\n * refreshToken: 'example-only-refresh'\n * })\n * void value\n * ```\n */\nexport const IamRefreshTokenInputSchema = z.object({\n refreshToken: z.string().min(1),\n})\n\n/**\n * Token 刷新业务数据 Schema。\n * @example\n * ```ts\n * import { IamRefreshTokenDataSchema } from '@h-ai/api-contract'\n *\n * const value = IamRefreshTokenDataSchema.parse({\n * tokens: {\n * accessToken: 'example-only-access',\n * expiresIn: 0,\n * tokenType: 'Bearer'\n * }\n * })\n * void value\n * ```\n */\nexport const IamRefreshTokenDataSchema = z.object({\n tokens: IamTokenPairSchema,\n})\n\n/**\n * 注册入参 Schema。\n * @example\n * ```ts\n * import { IamRegisterInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamRegisterInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\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/**\n * 修改密码入参 Schema。\n * @example\n * ```ts\n * import { IamChangePasswordInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamChangePasswordInputSchema.parse({\n * oldPassword: 'example',\n * newPassword: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport const IamChangePasswordInputSchema = z.object({\n oldPassword: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/**\n * 当前用户更新入参 Schema。\n * @example\n * ```ts\n * import { IamUpdateCurrentUserInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamUpdateCurrentUserInputSchema.parse({})\n * void value\n * ```\n */\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/**\n * 用户列表查询入参 Schema。\n * @example\n * ```ts\n * import { IamListUsersInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamListUsersInputSchema.parse({})\n * void value\n * ```\n */\nexport const IamListUsersInputSchema = PaginationQuerySchema.extend({\n roleCode: z.string().trim().min(1).max(100).optional(),\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/**\n * Admin 创建用户入参 Schema。\n * @example\n * ```ts\n * import { IamAdminCreateUserInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamAdminCreateUserInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\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/**\n * Admin 更新用户入参 Schema。\n * @example\n * ```ts\n * import { IamAdminUpdateUserInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamAdminUpdateUserInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\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/**\n * Admin 删除用户入参 Schema。\n * @example\n * ```ts\n * import { IamUserIdInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamUserIdInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\nexport const IamUserIdInputSchema = z.object({\n id: z.string().min(1),\n})\n\n/**\n * Admin 重置密码入参 Schema。\n * @example\n * ```ts\n * import { IamAdminResetPasswordInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamAdminResetPasswordInputSchema.parse({\n * id: 'example-1',\n * newPassword: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport const IamAdminResetPasswordInputSchema = z.object({\n id: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/**\n * 角色基础信息 Schema。\n * @example\n * ```ts\n * import { IamRoleSchema } from '@h-ai/api-contract'\n *\n * const value = IamRoleSchema.parse({\n * id: 'example-1',\n * code: 'example-1',\n * name: 'Example',\n * createdAt: null,\n * updatedAt: null\n * })\n * void value\n * ```\n */\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/**\n * 创建角色入参 Schema。\n * @example\n * ```ts\n * import { IamCreateRoleInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamCreateRoleInputSchema.parse({\n * code: 'example-1',\n * name: 'Example'\n * })\n * void value\n * ```\n */\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/**\n * 更新角色入参 Schema。\n * @example\n * ```ts\n * import { IamUpdateRoleInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamUpdateRoleInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\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/**\n * 权限类型 Schema。\n * @example\n * ```ts\n * import { IamPermissionTypeSchema } from '@h-ai/api-contract'\n *\n * const value = IamPermissionTypeSchema.parse('menu')\n * void value\n * ```\n */\nexport const IamPermissionTypeSchema = z.enum(['menu', 'api', 'button'])\n\n/**\n * 权限基础信息 Schema。\n * @example\n * ```ts\n * import { IamPermissionSchema } from '@h-ai/api-contract'\n *\n * const value = IamPermissionSchema.parse({\n * id: 'example-1',\n * code: 'example-1',\n * name: 'Example',\n * createdAt: null,\n * updatedAt: null\n * })\n * void value\n * ```\n */\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/**\n * 权限列表查询入参 Schema。\n * @example\n * ```ts\n * import { IamListPermissionsInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamListPermissionsInputSchema.parse({})\n * void value\n * ```\n */\nexport const IamListPermissionsInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\n/**\n * 创建权限入参 Schema。\n * @example\n * ```ts\n * import { IamCreatePermissionInputSchema } from '@h-ai/api-contract'\n *\n * const value = IamCreatePermissionInputSchema.parse({\n * code: 'example-1',\n * name: 'Example'\n * })\n * void value\n * ```\n */\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\n/**\n * 账号密码登录请求。\n * @example\n * ```ts\n * import type { IamLoginInput } from '@h-ai/api-contract'\n * import { IamLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamLoginInput = IamLoginInputSchema.parse({\n * identifier: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamLoginInput = z.infer<typeof IamLoginInputSchema>\n/**\n * LDAP 登录请求。\n * @example\n * ```ts\n * import type { IamLdapLoginInput } from '@h-ai/api-contract'\n * import { IamLdapLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamLdapLoginInput = IamLdapLoginInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamLdapLoginInput = z.infer<typeof IamLdapLoginInputSchema>\n/**\n * 允许下发客户端的身份认证配置。\n * @example\n * ```ts\n * import type { IamPublicConfig } from '@h-ai/api-contract'\n * import { IamPublicConfigSchema } from '@h-ai/api-contract'\n *\n * const value: IamPublicConfig = IamPublicConfigSchema.parse({\n * password: {\n * minLength: 0,\n * maxLength: 0,\n * requireUppercase: true,\n * requireLowercase: true,\n * requireNumber: true,\n * requireSpecialChar: true,\n * expirationDays: 0\n * },\n * register: {\n * enabled: true\n * },\n * login: {\n * password: true,\n * otp: true,\n * ldap: true,\n * email: true,\n * sms: true\n * },\n * passwordReset: {\n * enabled: true,\n * mode: 'email'\n * },\n * otp: {\n * length: 0,\n * resendInterval: 0\n * },\n * agreements: {\n * showOnRegister: true,\n * showOnLogin: true\n * },\n * ui: {\n * variant: 'card'\n * },\n * session: {\n * maxAge: 0\n * }\n * })\n * void value\n * ```\n */\nexport type IamPublicConfig = z.infer<typeof IamPublicConfigSchema>\n/**\n * 一次性验证码登录请求。\n * @example\n * ```ts\n * import type { IamOtpLoginInput } from '@h-ai/api-contract'\n * import { IamOtpLoginInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamOtpLoginInput = IamOtpLoginInputSchema.parse({\n * identifier: 'alice',\n * code: 'example-1'\n * })\n * void value\n * ```\n */\nexport type IamOtpLoginInput = z.infer<typeof IamOtpLoginInputSchema>\n/**\n * 注销当前会话的请求。\n * @example\n * ```ts\n * import type { IamLogoutInput } from '@h-ai/api-contract'\n * import { IamLogoutInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamLogoutInput = IamLogoutInputSchema.parse({})\n * void value\n * ```\n */\nexport type IamLogoutInput = z.infer<typeof IamLogoutInputSchema>\n/**\n * 发送一次性验证码的请求。\n * @example\n * ```ts\n * import type { IamSendOtpInput } from '@h-ai/api-contract'\n * import { IamSendOtpInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamSendOtpInput = IamSendOtpInputSchema.parse({\n * identifier: 'alice'\n * })\n * void value\n * ```\n */\nexport type IamSendOtpInput = z.infer<typeof IamSendOtpInputSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 IamAuthResultOutput 响应。\n * @example\n * ```ts\n * import type { IamAuthResultOutput } from '@h-ai/api-contract'\n * import { IamAuthResultSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: IamAuthResultOutput = ok(IamAuthResultSchema.parse({\n * user: {\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null\n * },\n * tokens: {\n * accessToken: 'example-only-access',\n * expiresIn: 0,\n * tokenType: 'Bearer'\n * }\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type IamAuthResultOutput = HaiResult<z.infer<typeof IamAuthResultSchema>>\n/**\n * 当前登录用户及其有效权限。\n * @example\n * ```ts\n * import type { IamCurrentUser } from '@h-ai/api-contract'\n * import { IamCurrentUserSchema } from '@h-ai/api-contract'\n *\n * const value: IamCurrentUser = IamCurrentUserSchema.parse({\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null,\n * roles: [\n * 'example'\n * ],\n * permissions: [\n * 'example'\n * ]\n * })\n * void value\n * ```\n */\nexport type IamCurrentUser = z.infer<typeof IamCurrentUserSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 IamCurrentUserOutput 响应。\n * @example\n * ```ts\n * import type { IamCurrentUserOutput } from '@h-ai/api-contract'\n * import { IamCurrentUserSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: IamCurrentUserOutput = ok(IamCurrentUserSchema.parse({\n * id: 'example-1',\n * username: 'alice',\n * enabled: true,\n * createdAt: null,\n * updatedAt: null,\n * roles: [\n * 'example'\n * ],\n * permissions: [\n * 'example'\n * ]\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type IamCurrentUserOutput = HaiResult<IamCurrentUser>\n/**\n * 使用刷新凭据换取会话令牌的请求。\n * @example\n * ```ts\n * import type { IamRefreshTokenInput } from '@h-ai/api-contract'\n * import { IamRefreshTokenInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamRefreshTokenInput = IamRefreshTokenInputSchema.parse({\n * refreshToken: 'example-only-refresh'\n * })\n * void value\n * ```\n */\nexport type IamRefreshTokenInput = z.infer<typeof IamRefreshTokenInputSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 IamRefreshTokenOutput 响应。\n * @example\n * ```ts\n * import type { IamRefreshTokenOutput } from '@h-ai/api-contract'\n * import { IamRefreshTokenDataSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: IamRefreshTokenOutput = ok(IamRefreshTokenDataSchema.parse({\n * tokens: {\n * accessToken: 'example-only-access',\n * expiresIn: 0,\n * tokenType: 'Bearer'\n * }\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type IamRefreshTokenOutput = HaiResult<z.infer<typeof IamRefreshTokenDataSchema>>\n/**\n * 用户注册请求。\n * @example\n * ```ts\n * import type { IamRegisterInput } from '@h-ai/api-contract'\n * import { IamRegisterInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamRegisterInput = IamRegisterInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamRegisterInput = z.infer<typeof IamRegisterInputSchema>\n/**\n * 当前用户修改密码的请求。\n * @example\n * ```ts\n * import type { IamChangePasswordInput } from '@h-ai/api-contract'\n * import { IamChangePasswordInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamChangePasswordInput = IamChangePasswordInputSchema.parse({\n * oldPassword: 'example',\n * newPassword: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamChangePasswordInput = z.infer<typeof IamChangePasswordInputSchema>\n/**\n * 修改当前用户资料的请求。\n * @example\n * ```ts\n * import type { IamUpdateCurrentUserInput } from '@h-ai/api-contract'\n * import { IamUpdateCurrentUserInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamUpdateCurrentUserInput = IamUpdateCurrentUserInputSchema.parse({})\n * void value\n * ```\n */\nexport type IamUpdateCurrentUserInput = z.infer<typeof IamUpdateCurrentUserInputSchema>\n/**\n * 管理员分页查询用户的请求。\n * @example\n * ```ts\n * import type { IamListUsersInput } from '@h-ai/api-contract'\n * import { IamListUsersInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamListUsersInput = IamListUsersInputSchema.parse({})\n * void value\n * ```\n */\nexport type IamListUsersInput = z.infer<typeof IamListUsersInputSchema>\n/**\n * 管理员创建用户的请求。\n * @example\n * ```ts\n * import type { IamAdminCreateUserInput } from '@h-ai/api-contract'\n * import { IamAdminCreateUserInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamAdminCreateUserInput = IamAdminCreateUserInputSchema.parse({\n * username: 'alice',\n * password: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamAdminCreateUserInput = z.infer<typeof IamAdminCreateUserInputSchema>\n/**\n * 管理员修改用户的请求。\n * @example\n * ```ts\n * import type { IamAdminUpdateUserInput } from '@h-ai/api-contract'\n * import { IamAdminUpdateUserInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamAdminUpdateUserInput = IamAdminUpdateUserInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\nexport type IamAdminUpdateUserInput = z.infer<typeof IamAdminUpdateUserInputSchema>\n/**\n * 以用户 ID 定位目标的请求。\n * @example\n * ```ts\n * import type { IamUserIdInput } from '@h-ai/api-contract'\n * import { IamUserIdInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamUserIdInput = IamUserIdInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\nexport type IamUserIdInput = z.infer<typeof IamUserIdInputSchema>\n/**\n * 管理员重置用户密码的请求。\n * @example\n * ```ts\n * import type { IamAdminResetPasswordInput } from '@h-ai/api-contract'\n * import { IamAdminResetPasswordInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamAdminResetPasswordInput = IamAdminResetPasswordInputSchema.parse({\n * id: 'example-1',\n * newPassword: 'example-only-password'\n * })\n * void value\n * ```\n */\nexport type IamAdminResetPasswordInput = z.infer<typeof IamAdminResetPasswordInputSchema>\n/**\n * 创建角色的请求。\n * @example\n * ```ts\n * import type { IamCreateRoleInput } from '@h-ai/api-contract'\n * import { IamCreateRoleInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamCreateRoleInput = IamCreateRoleInputSchema.parse({\n * code: 'example-1',\n * name: 'Example'\n * })\n * void value\n * ```\n */\nexport type IamCreateRoleInput = z.infer<typeof IamCreateRoleInputSchema>\n/**\n * 修改角色的请求。\n * @example\n * ```ts\n * import type { IamUpdateRoleInput } from '@h-ai/api-contract'\n * import { IamUpdateRoleInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamUpdateRoleInput = IamUpdateRoleInputSchema.parse({\n * id: 'example-1'\n * })\n * void value\n * ```\n */\nexport type IamUpdateRoleInput = z.infer<typeof IamUpdateRoleInputSchema>\n/**\n * 分页查询权限定义的请求。\n * @example\n * ```ts\n * import type { IamListPermissionsInput } from '@h-ai/api-contract'\n * import { IamListPermissionsInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamListPermissionsInput = IamListPermissionsInputSchema.parse({})\n * void value\n * ```\n */\nexport type IamListPermissionsInput = z.infer<typeof IamListPermissionsInputSchema>\n/**\n * 创建权限定义的请求。\n * @example\n * ```ts\n * import type { IamCreatePermissionInput } from '@h-ai/api-contract'\n * import { IamCreatePermissionInputSchema } from '@h-ai/api-contract'\n *\n * const value: IamCreatePermissionInput = IamCreatePermissionInputSchema.parse({\n * code: 'example-1',\n * name: 'Example'\n * })\n * void value\n * ```\n */\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/**\n * IAM 领域 oRPC contract。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract = apiContract.iam\n * void contract\n * ```\n */\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\n/**\n * iam 领域公开 procedure 契约的完整类型。\n * @example\n * ```ts\n * import type { IamContract } from '@h-ai/api-contract'\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract: IamContract = apiContract.iam\n * void contract\n * ```\n */\nexport type IamContract = typeof iamContract\n"]}
@@ -1,4 +1,4 @@
1
- import { route, haiResultSchema } from './chunk-CUU2F6YD.js';
1
+ import { route, haiResultSchema } from './chunk-JKPLID6E.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  var AUDIO_WS_PATH = "/ai/audio";
@@ -39,63 +39,82 @@ var AiMessageRoleSchema = z.enum(["system", "user", "assistant", "tool"]);
39
39
  var AiTextContentSchema = z.object({
40
40
  type: z.literal("text"),
41
41
  text: z.string()
42
- });
42
+ }).strict();
43
43
  var AiImageContentSchema = z.object({
44
44
  type: z.literal("image_url"),
45
45
  image_url: z.object({
46
46
  url: z.string(),
47
47
  detail: z.enum(["auto", "low", "high"]).optional()
48
- })
49
- });
48
+ }).strict()
49
+ }).strict();
50
50
  var AiMessageContentSchema = z.union([
51
51
  z.string(),
52
52
  z.array(z.union([AiTextContentSchema, AiImageContentSchema]))
53
53
  ]);
54
54
  var AiToolCallSchema = z.object({
55
- id: z.string(),
55
+ id: z.string().min(1),
56
56
  type: z.literal("function"),
57
57
  function: z.object({
58
- name: z.string(),
58
+ name: z.string().min(1),
59
59
  arguments: z.string()
60
- })
61
- });
62
- var AiChatMessageSchema = z.object({
63
- role: AiMessageRoleSchema,
64
- content: AiMessageContentSchema.optional(),
65
- name: z.string().optional(),
66
- tool_calls: z.array(AiToolCallSchema).optional(),
67
- tool_call_id: z.string().optional()
68
- });
69
- var AiToolParameterSchema = z.object({
70
- type: z.string(),
71
- description: z.string().optional(),
72
- enum: z.array(z.string()).optional()
73
- });
60
+ }).strict()
61
+ }).strict();
62
+ var AiTextMessageContentSchema = z.union([z.string(), z.array(AiTextContentSchema)]);
63
+ var AiChatMessageSchema = z.discriminatedUnion("role", [
64
+ z.object({
65
+ role: z.literal("system"),
66
+ content: AiTextMessageContentSchema,
67
+ name: z.string().optional()
68
+ }).strict(),
69
+ z.object({
70
+ role: z.literal("user"),
71
+ content: AiMessageContentSchema,
72
+ name: z.string().optional()
73
+ }).strict(),
74
+ z.object({
75
+ role: z.literal("assistant"),
76
+ content: AiTextMessageContentSchema.nullable().optional(),
77
+ name: z.string().optional(),
78
+ tool_calls: z.array(AiToolCallSchema).min(1).optional()
79
+ }).strict().refine((message) => message.content != null || message.tool_calls !== void 0),
80
+ z.object({
81
+ role: z.literal("tool"),
82
+ content: AiTextMessageContentSchema,
83
+ tool_call_id: z.string().min(1)
84
+ }).strict()
85
+ ]);
74
86
  var AiToolDefinitionSchema = z.object({
75
87
  type: z.literal("function"),
76
88
  function: z.object({
77
- name: z.string(),
89
+ name: z.string().min(1),
78
90
  description: z.string().optional(),
79
- parameters: z.object({
80
- type: z.literal("object"),
81
- properties: z.record(z.string(), AiToolParameterSchema).optional(),
82
- required: z.array(z.string()).optional()
83
- }).optional()
84
- })
85
- });
91
+ parameters: z.record(z.string(), z.json()).optional(),
92
+ strict: z.boolean().nullable().optional()
93
+ }).strict()
94
+ }).strict();
86
95
  var AiChatCompletionInputSchema = z.object({
96
+ /** 默认绑定认证用户;跨主体访问需服务端显式授权。 */
97
+ objectId: z.string().min(1).optional(),
98
+ /** 用户主体内的会话 ID,省略时为 default。 */
99
+ sessionId: z.string().min(1).optional(),
87
100
  model: z.string().optional(),
88
101
  messages: z.array(AiChatMessageSchema).min(1),
89
102
  temperature: z.number().min(0).max(2).optional(),
90
103
  top_p: z.number().min(0).max(1).optional(),
91
104
  max_tokens: z.number().int().min(1).optional(),
92
- stream: z.boolean().optional(),
93
- tools: z.array(AiToolDefinitionSchema).optional(),
105
+ tools: z.array(AiToolDefinitionSchema).min(1).optional(),
94
106
  tool_choice: z.union([
95
107
  z.literal("auto"),
96
108
  z.literal("none"),
97
- z.object({ type: z.literal("function"), function: z.object({ name: z.string() }) })
109
+ z.literal("required"),
110
+ z.object({ type: z.literal("function"), function: z.object({ name: z.string().min(1) }).strict() }).strict()
98
111
  ]).optional()
112
+ }).strict().superRefine((input, context) => {
113
+ const choice = input.tool_choice;
114
+ if (choice === "required" && !input.tools?.length)
115
+ context.addIssue({ code: "custom", path: ["tool_choice"] });
116
+ if (typeof choice === "object" && !input.tools?.some((tool) => tool.function.name === choice.function.name))
117
+ context.addIssue({ code: "custom", path: ["tool_choice"] });
99
118
  });
100
119
  var AiTokenUsageSchema = z.object({
101
120
  prompt_tokens: z.number(),
@@ -121,6 +140,10 @@ var AiChatCompletionDataSchema = z.object({
121
140
  usage: AiTokenUsageSchema
122
141
  });
123
142
  var AiSendMessageInputSchema = z.object({
143
+ /** 默认绑定认证用户;跨主体访问需服务端显式授权。 */
144
+ objectId: z.string().min(1).optional(),
145
+ /** 用户主体内的会话 ID,省略时为 default。 */
146
+ sessionId: z.string().min(1).optional(),
124
147
  message: z.string().min(1),
125
148
  systemPrompt: z.string().optional(),
126
149
  model: z.string().optional(),
@@ -148,14 +171,14 @@ var AiMemoryRecallInputSchema = z.object({
148
171
  topK: z.number().int().min(1).optional(),
149
172
  types: z.array(AiMemoryTypeSchema).optional(),
150
173
  minImportance: z.number().min(0).max(1).optional(),
151
- objectId: z.string().optional()
174
+ objectId: z.string().min(1).optional()
152
175
  });
153
176
  var AiMemoryRecallDataSchema = z.object({
154
177
  items: z.array(AiMemoryEntrySchema)
155
178
  });
156
179
  var AiMemoryListInputSchema = z.object({
157
180
  types: z.array(AiMemoryTypeSchema).optional(),
158
- objectId: z.string().optional(),
181
+ objectId: z.string().min(1).optional(),
159
182
  offset: z.number().int().min(0).optional(),
160
183
  limit: z.number().int().min(1).max(100).optional()
161
184
  });
@@ -171,7 +194,8 @@ var AiSessionInfoSchema = z.object({
171
194
  metadata: z.record(z.string(), z.unknown()).optional()
172
195
  });
173
196
  var AiSessionListInputSchema = z.object({
174
- objectId: z.string().min(1)
197
+ /** 省略时由服务端绑定认证用户,不能据客户端参数推断身份。 */
198
+ objectId: z.string().min(1).optional()
175
199
  });
176
200
  var AiSessionListDataSchema = z.object({
177
201
  items: z.array(AiSessionInfoSchema)
@@ -194,7 +218,8 @@ var AiChatRecordSchema = z.object({
194
218
  duration: z.number()
195
219
  });
196
220
  var AiChatHistoryInputSchema = z.object({
197
- objectId: z.string().min(1),
221
+ /** 省略时由服务端绑定认证用户,跨主体访问需显式授权。 */
222
+ objectId: z.string().min(1).optional(),
198
223
  sessionId: z.string().min(1),
199
224
  limit: z.number().int().min(1).max(200).optional(),
200
225
  order: z.enum(["asc", "desc"]).optional()
@@ -206,7 +231,7 @@ var AiChatHistoryDataSchema = z.object({
206
231
  // src/ai/ai-contract.ts
207
232
  var aiContract = {
208
233
  chats: {
209
- createCompletion: route({ method: "POST", path: "/ai/chats/completions", operationId: "ai.chats.createCompletion", summary: "Create chat completion", tags: ["ai", "chats"] }).input(AiChatCompletionInputSchema).output(haiResultSchema(AiChatCompletionDataSchema)),
234
+ createCompletion: route({ method: "POST", path: "/ai/chats/completions", operationId: "ai.chats.createCompletion", summary: "Create non-streaming chat completion with function tools", tags: ["ai", "chats"] }).input(AiChatCompletionInputSchema).output(haiResultSchema(AiChatCompletionDataSchema)),
210
235
  sendMessage: route({ method: "POST", path: "/ai/chats/messages", operationId: "ai.chats.sendMessage", summary: "Send a single chat message", tags: ["ai", "chats"] }).input(AiSendMessageInputSchema).output(haiResultSchema(AiSendMessageDataSchema)),
211
236
  listHistory: route({ method: "POST", path: "/ai/chats/history", operationId: "ai.chats.listHistory", summary: "List chat history", tags: ["ai", "chats"] }).input(AiChatHistoryInputSchema).output(haiResultSchema(AiChatHistoryDataSchema))
212
237
  },
@@ -219,6 +244,6 @@ var aiContract = {
219
244
  }
220
245
  };
221
246
 
222
- export { AUDIO_WS_PATH, AiAssistantMessageSchema, AiChatCompletionChoiceSchema, AiChatCompletionDataSchema, AiChatCompletionInputSchema, AiChatHistoryDataSchema, AiChatHistoryInputSchema, AiChatMessageSchema, AiChatRecordSchema, AiImageContentSchema, AiMemoryEntrySchema, AiMemoryListDataSchema, AiMemoryListInputSchema, AiMemoryRecallDataSchema, AiMemoryRecallInputSchema, AiMemoryTypeSchema, AiMessageContentSchema, AiMessageRoleSchema, AiSendMessageDataSchema, AiSendMessageInputSchema, AiSessionInfoSchema, AiSessionListDataSchema, AiSessionListInputSchema, AiTextContentSchema, AiTokenUsageSchema, AiToolCallSchema, AiToolDefinitionSchema, AiToolParameterSchema, AudioFormatSchema, AudioWsClientMessageSchema, AudioWsDoneMessageSchema, AudioWsStartMessageSchema, AudioWsTextMessageSchema, aiContract };
223
- //# sourceMappingURL=chunk-VSPYX4DD.js.map
224
- //# sourceMappingURL=chunk-VSPYX4DD.js.map
247
+ export { AUDIO_WS_PATH, AiAssistantMessageSchema, AiChatCompletionChoiceSchema, AiChatCompletionDataSchema, AiChatCompletionInputSchema, AiChatHistoryDataSchema, AiChatHistoryInputSchema, AiChatMessageSchema, AiChatRecordSchema, AiImageContentSchema, AiMemoryEntrySchema, AiMemoryListDataSchema, AiMemoryListInputSchema, AiMemoryRecallDataSchema, AiMemoryRecallInputSchema, AiMemoryTypeSchema, AiMessageContentSchema, AiMessageRoleSchema, AiSendMessageDataSchema, AiSendMessageInputSchema, AiSessionInfoSchema, AiSessionListDataSchema, AiSessionListInputSchema, AiTextContentSchema, AiTokenUsageSchema, AiToolCallSchema, AiToolDefinitionSchema, AudioFormatSchema, AudioWsClientMessageSchema, AudioWsDoneMessageSchema, AudioWsStartMessageSchema, AudioWsTextMessageSchema, aiContract };
248
+ //# sourceMappingURL=chunk-G55ATYDA.js.map
249
+ //# sourceMappingURL=chunk-G55ATYDA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ai/ai-audio-ws-schemas.ts","../src/ai/ai-schemas.ts","../src/ai/ai-contract.ts"],"names":["z"],"mappings":"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","file":"chunk-G55ATYDA.js","sourcesContent":["/**\n * Audio WebSocket 传输协议的运行时 Schema。\n *\n * 该协议同时被 AI 客户端与 Serv 服务端消费,因此由 api-contract 维护单一事实源,\n * 避免 Serv 根入口为了校验可选 Audio 消息而静态加载整个 `@h-ai/ai` 包。\n */\nimport { z } from 'zod'\n\n/**\n * 统一语音入口的默认路径(相对 API 前缀)。\n * @example\n * ```ts\n * import { AUDIO_WS_PATH } from '@h-ai/api-contract'\n *\n * const endpoint = new URL(AUDIO_WS_PATH, 'https://api.example.com')\n * endpoint.protocol = 'wss:'\n * void endpoint\n * ```\n */\nexport const AUDIO_WS_PATH = '/ai/audio'\n\n/**\n * 合法音频格式。\n * @example\n * ```ts\n * import { AudioFormatSchema } from '@h-ai/api-contract'\n *\n * const value = AudioFormatSchema.parse('pcm16')\n * void value\n * ```\n */\nexport const AudioFormatSchema = z.enum(['pcm16', 'wav', 'mp3', 'opus'])\n\nconst MAX_CONTROL_FIELD_LEN = 512\nconst MAX_HINT_LEN = 256\nconst MAX_HINTS = 64\nconst MAX_SEGMENT_ID_LEN = 128\nconst MIN_SAMPLE_RATE = 8000\nconst MAX_SAMPLE_RATE = 192000\n\n/**\n * 会话起始帧 Schema。\n * @example\n * ```ts\n * import { AudioWsStartMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AudioWsStartMessageSchema.parse({\n * type: 'start',\n * operation: 'transcribe'\n * })\n * void value\n * ```\n */\nexport const AudioWsStartMessageSchema = z.object({\n type: z.literal('start'),\n operation: z.enum(['transcribe', 'synthesize']),\n stream: z.boolean().optional(),\n model: z.string().max(MAX_CONTROL_FIELD_LEN).optional(),\n language: z.string().max(MAX_CONTROL_FIELD_LEN).optional(),\n contextHints: z.array(z.string().max(MAX_HINT_LEN)).max(MAX_HINTS).optional(),\n voice: z.string().max(MAX_CONTROL_FIELD_LEN).optional(),\n instruction: z.string().max(MAX_CONTROL_FIELD_LEN).optional(),\n format: AudioFormatSchema.optional(),\n sampleRate: z.number().int().min(MIN_SAMPLE_RATE).max(MAX_SAMPLE_RATE).optional(),\n channels: z.union([z.literal(1), z.literal(2)]).optional(),\n})\n\n/**\n * 文本输入帧 Schema。\n * @example\n * ```ts\n * import { AudioWsTextMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AudioWsTextMessageSchema.parse({\n * type: 'text',\n * segmentId: 'example',\n * text: 'Hello'\n * })\n * void value\n * ```\n */\nexport const AudioWsTextMessageSchema = z.object({\n type: z.literal('text'),\n segmentId: z.string().min(1).max(MAX_SEGMENT_ID_LEN),\n text: z.string(),\n})\n\n/**\n * 输入结束帧 Schema。\n * @example\n * ```ts\n * import { AudioWsDoneMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AudioWsDoneMessageSchema.parse({\n * type: 'done'\n * })\n * void value\n * ```\n */\nexport const AudioWsDoneMessageSchema = z.object({\n type: z.literal('done'),\n})\n\n/**\n * 客户端 JSON 控制消息 Schema。\n * @example\n * ```ts\n * import { AudioWsClientMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AudioWsClientMessageSchema.parse({\n * type: 'start',\n * operation: 'transcribe'\n * })\n * void value\n * ```\n */\nexport const AudioWsClientMessageSchema = z.discriminatedUnion('type', [\n AudioWsStartMessageSchema,\n AudioWsTextMessageSchema,\n AudioWsDoneMessageSchema,\n])\n","/**\n * @h-ai/api-contract — AI 领域 Schema\n *\n * 包含聊天补全、消息占位、记忆召回与历史会话相关的 input/output Zod Schema。\n * 默认聊天补全为非流式 JSON,支持 function tool calling;未声明字段在边界拒绝。\n * 仅保留跨接口、跨层复用的数据结构;一次性输出包装在 contract 中内联。\n * @module ai-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\n\n/**\n * 消息角色 Schema。\n * @example\n * ```ts\n * import { AiMessageRoleSchema } from '@h-ai/api-contract'\n *\n * const value = AiMessageRoleSchema.parse('system')\n * void value\n * ```\n */\nexport const AiMessageRoleSchema = z.enum(['system', 'user', 'assistant', 'tool'])\n\n/**\n * 文本内容 Schema。\n * @example\n * ```ts\n * import { AiTextContentSchema } from '@h-ai/api-contract'\n *\n * const value = AiTextContentSchema.parse({\n * type: 'text',\n * text: 'Hello'\n * })\n * void value\n * ```\n */\nexport const AiTextContentSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n}).strict()\n\n/**\n * 图片内容 Schema。\n * @example\n * ```ts\n * import { AiImageContentSchema } from '@h-ai/api-contract'\n *\n * const value = AiImageContentSchema.parse({\n * type: 'image_url',\n * image_url: {\n * url: 'https://example.com/resource'\n * }\n * })\n * void value\n * ```\n */\nexport const AiImageContentSchema = z.object({\n type: z.literal('image_url'),\n image_url: z.object({\n url: z.string(),\n detail: z.enum(['auto', 'low', 'high']).optional(),\n }).strict(),\n}).strict()\n\n/**\n * 消息内容 Schema。\n * @example\n * ```ts\n * import { AiMessageContentSchema } from '@h-ai/api-contract'\n *\n * const value = AiMessageContentSchema.parse('example')\n * void value\n * ```\n */\nexport const AiMessageContentSchema = z.union([\n z.string(),\n z.array(z.union([AiTextContentSchema, AiImageContentSchema])),\n])\n\n/**\n * 工具调用 Schema。\n * @example\n * ```ts\n * import { AiToolCallSchema } from '@h-ai/api-contract'\n *\n * const value = AiToolCallSchema.parse({\n * id: 'call_1',\n * type: 'function',\n * function: {\n * name: 'lookupOrder',\n * arguments: '{\\'id\\':\\'order_1\\'}'\n * }\n * })\n * void value\n * ```\n */\nexport const AiToolCallSchema = z.object({\n id: z.string().min(1),\n type: z.literal('function'),\n function: z.object({\n name: z.string().min(1),\n arguments: z.string(),\n }).strict(),\n}).strict()\n\n/** system、assistant 和 tool 只接收文本,不把图片 URL 静默转换为文本。 */\nconst AiTextMessageContentSchema = z.union([z.string(), z.array(AiTextContentSchema)])\n\n/**\n * 按角色校验聊天消息;工具结果必须携带非空 tool_call_id。\n * @example\n * ```ts\n * import { AiChatMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatMessageSchema.parse({\n * role: 'system',\n * content: 'Hello'\n * })\n * void value\n * ```\n */\nexport const AiChatMessageSchema = z.discriminatedUnion('role', [\n z.object({\n role: z.literal('system'),\n content: AiTextMessageContentSchema,\n name: z.string().optional(),\n }).strict(),\n z.object({\n role: z.literal('user'),\n content: AiMessageContentSchema,\n name: z.string().optional(),\n }).strict(),\n z.object({\n role: z.literal('assistant'),\n content: AiTextMessageContentSchema.nullable().optional(),\n name: z.string().optional(),\n tool_calls: z.array(AiToolCallSchema).min(1).optional(),\n }).strict().refine(message => message.content != null || message.tool_calls !== undefined),\n z.object({\n role: z.literal('tool'),\n content: AiTextMessageContentSchema,\n tool_call_id: z.string().min(1),\n }).strict(),\n])\n\n/**\n * 完整的 function 工具定义;parameters 保留嵌套 JSON Schema,不裁剪其关键字。\n * @example\n * ```ts\n * import { AiToolDefinitionSchema } from '@h-ai/api-contract'\n *\n * const value = AiToolDefinitionSchema.parse({\n * type: 'function',\n * function: {\n * name: 'lookupOrder',\n * description: 'Look up an order',\n * parameters: {\n * type: 'object',\n * properties: {\n * id: {\n * type: 'string'\n * }\n * },\n * required: [\n * 'id'\n * ]\n * }\n * }\n * })\n * void value\n * ```\n */\nexport const AiToolDefinitionSchema = z.object({\n type: z.literal('function'),\n function: z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n parameters: z.record(z.string(), z.json()).optional(),\n strict: z.boolean().nullable().optional(),\n }).strict(),\n}).strict()\n\n/**\n * 非流式聊天补全入参;stream 等未声明字段明确拒绝。\n * @example\n * ```ts\n * import { AiChatCompletionInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatCompletionInputSchema.parse({\n * messages: [\n * {\n * role: 'user',\n * content: 'Say hello'\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport const AiChatCompletionInputSchema = z.object({\n /** 默认绑定认证用户;跨主体访问需服务端显式授权。 */\n objectId: z.string().min(1).optional(),\n /** 用户主体内的会话 ID,省略时为 default。 */\n sessionId: z.string().min(1).optional(),\n model: z.string().optional(),\n messages: z.array(AiChatMessageSchema).min(1),\n temperature: z.number().min(0).max(2).optional(),\n top_p: z.number().min(0).max(1).optional(),\n max_tokens: z.number().int().min(1).optional(),\n tools: z.array(AiToolDefinitionSchema).min(1).optional(),\n tool_choice: z.union([\n z.literal('auto'),\n z.literal('none'),\n z.literal('required'),\n z.object({ type: z.literal('function'), function: z.object({ name: z.string().min(1) }).strict() }).strict(),\n ]).optional(),\n}).strict().superRefine((input, context) => {\n const choice = input.tool_choice\n if (choice === 'required' && !input.tools?.length)\n context.addIssue({ code: 'custom', path: ['tool_choice'] })\n if (typeof choice === 'object' && !input.tools?.some(tool => tool.function.name === choice.function.name))\n context.addIssue({ code: 'custom', path: ['tool_choice'] })\n})\n\n/**\n * Token 使用统计 Schema。\n * @example\n * ```ts\n * import { AiTokenUsageSchema } from '@h-ai/api-contract'\n *\n * const value = AiTokenUsageSchema.parse({\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * })\n * void value\n * ```\n */\nexport const AiTokenUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n})\n\n/**\n * 助手消息 Schema。\n * @example\n * ```ts\n * import { AiAssistantMessageSchema } from '@h-ai/api-contract'\n *\n * const value = AiAssistantMessageSchema.parse({\n * role: 'assistant',\n * content: 'Hello'\n * })\n * void value\n * ```\n */\nexport const AiAssistantMessageSchema = z.object({\n role: z.literal('assistant'),\n content: z.string().nullable().optional(),\n tool_calls: z.array(AiToolCallSchema).optional(),\n})\n\n/**\n * 聊天完成选择 Schema。\n * @example\n * ```ts\n * import { AiChatCompletionChoiceSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatCompletionChoiceSchema.parse({\n * index: 0,\n * message: {\n * role: 'assistant',\n * content: 'Hello'\n * },\n * finish_reason: 'stop'\n * })\n * void value\n * ```\n */\nexport const AiChatCompletionChoiceSchema = z.object({\n index: z.number(),\n message: AiAssistantMessageSchema,\n finish_reason: z.enum(['stop', 'length', 'tool_calls', 'content_filter']),\n})\n\n/**\n * 聊天完成业务数据 Schema。\n * @example\n * ```ts\n * import { AiChatCompletionDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatCompletionDataSchema.parse({\n * id: 'example-1',\n * object: 'chat.completion',\n * created: 0,\n * model: 'example',\n * choices: [\n * {\n * index: 0,\n * message: {\n * role: 'assistant',\n * content: 'Hello'\n * },\n * finish_reason: 'stop'\n * }\n * ],\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * })\n * void value\n * ```\n */\nexport const AiChatCompletionDataSchema = z.object({\n id: z.string(),\n object: z.literal('chat.completion'),\n created: z.number(),\n model: z.string(),\n choices: z.array(AiChatCompletionChoiceSchema),\n usage: AiTokenUsageSchema,\n})\n\n/**\n * 简单消息入参 Schema。\n * @example\n * ```ts\n * import { AiSendMessageInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiSendMessageInputSchema.parse({\n * message: 'example'\n * })\n * void value\n * ```\n */\nexport const AiSendMessageInputSchema = z.object({\n /** 默认绑定认证用户;跨主体访问需服务端显式授权。 */\n objectId: z.string().min(1).optional(),\n /** 用户主体内的会话 ID,省略时为 default。 */\n sessionId: z.string().min(1).optional(),\n message: z.string().min(1),\n systemPrompt: z.string().optional(),\n model: z.string().optional(),\n temperature: z.number().min(0).max(2).optional(),\n})\n\n/**\n * 简单消息业务数据 Schema。\n * @example\n * ```ts\n * import { AiSendMessageDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiSendMessageDataSchema.parse({\n * content: 'Hello',\n * model: 'example'\n * })\n * void value\n * ```\n */\nexport const AiSendMessageDataSchema = z.object({\n content: z.string(),\n model: z.string(),\n usage: AiTokenUsageSchema.optional(),\n})\n\n/**\n * 记忆类型 Schema。\n * @example\n * ```ts\n * import { AiMemoryTypeSchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryTypeSchema.parse('fact')\n * void value\n * ```\n */\nexport const AiMemoryTypeSchema = z.enum(['fact', 'preference', 'event', 'entity', 'instruction'])\n\n/**\n * 记忆条目 Schema。\n * @example\n * ```ts\n * import { AiMemoryEntrySchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryEntrySchema.parse({\n * id: 'example-1',\n * content: 'Hello',\n * type: 'fact',\n * importance: 0,\n * createdAt: 0,\n * lastAccessedAt: 0,\n * accessCount: 0\n * })\n * void value\n * ```\n */\nexport const AiMemoryEntrySchema = z.object({\n id: z.string(),\n content: z.string(),\n type: AiMemoryTypeSchema,\n importance: z.number(),\n objectId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.number(),\n lastAccessedAt: z.number(),\n accessCount: z.number(),\n})\n\n/**\n * 记忆检索入参 Schema。\n * @example\n * ```ts\n * import { AiMemoryRecallInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryRecallInputSchema.parse({\n * query: 'example'\n * })\n * void value\n * ```\n */\nexport const AiMemoryRecallInputSchema = z.object({\n query: z.string().min(1),\n topK: z.number().int().min(1).optional(),\n types: z.array(AiMemoryTypeSchema).optional(),\n minImportance: z.number().min(0).max(1).optional(),\n objectId: z.string().min(1).optional(),\n})\n\n/**\n * 记忆检索业务数据 Schema。\n * @example\n * ```ts\n * import { AiMemoryRecallDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryRecallDataSchema.parse({\n * items: [\n * {\n * id: 'example-1',\n * content: 'Hello',\n * type: 'fact',\n * importance: 0,\n * createdAt: 0,\n * lastAccessedAt: 0,\n * accessCount: 0\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport const AiMemoryRecallDataSchema = z.object({\n items: z.array(AiMemoryEntrySchema),\n})\n\n/**\n * 记忆列表入参 Schema。\n * @example\n * ```ts\n * import { AiMemoryListInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryListInputSchema.parse({})\n * void value\n * ```\n */\nexport const AiMemoryListInputSchema = z.object({\n types: z.array(AiMemoryTypeSchema).optional(),\n objectId: z.string().min(1).optional(),\n offset: z.number().int().min(0).optional(),\n limit: z.number().int().min(1).max(100).optional(),\n})\n\n/**\n * 记忆列表业务数据 Schema。\n * @example\n * ```ts\n * import { AiMemoryListDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiMemoryListDataSchema.parse({\n * items: [\n * {\n * id: 'example-1',\n * content: 'Hello',\n * type: 'fact',\n * importance: 0,\n * createdAt: 0,\n * lastAccessedAt: 0,\n * accessCount: 0\n * }\n * ],\n * total: 0\n * })\n * void value\n * ```\n */\nexport const AiMemoryListDataSchema = z.object({\n items: z.array(AiMemoryEntrySchema),\n total: z.number(),\n})\n\n/**\n * 会话信息 Schema。\n * @example\n * ```ts\n * import { AiSessionInfoSchema } from '@h-ai/api-contract'\n *\n * const value = AiSessionInfoSchema.parse({\n * objectId: 'example',\n * sessionId: 'example',\n * createdAt: 0,\n * updatedAt: 0\n * })\n * void value\n * ```\n */\nexport const AiSessionInfoSchema = z.object({\n objectId: z.string(),\n sessionId: z.string(),\n createdAt: z.number(),\n updatedAt: z.number(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/**\n * 会话列表入参 Schema。\n * @example\n * ```ts\n * import { AiSessionListInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiSessionListInputSchema.parse({})\n * void value\n * ```\n */\nexport const AiSessionListInputSchema = z.object({\n /** 省略时由服务端绑定认证用户,不能据客户端参数推断身份。 */\n objectId: z.string().min(1).optional(),\n})\n\n/**\n * 会话列表业务数据 Schema。\n * @example\n * ```ts\n * import { AiSessionListDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiSessionListDataSchema.parse({\n * items: [\n * {\n * objectId: 'example',\n * sessionId: 'example',\n * createdAt: 0,\n * updatedAt: 0\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport const AiSessionListDataSchema = z.object({\n items: z.array(AiSessionInfoSchema),\n})\n\n/**\n * 对话记录 Schema。\n * @example\n * ```ts\n * import { AiChatRecordSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatRecordSchema.parse({\n * id: 'example-1',\n * objectId: 'example',\n * sessionId: 'example',\n * request: {\n * model: 'example',\n * messages: [\n * {\n * role: 'system',\n * content: 'Hello'\n * }\n * ]\n * },\n * response: {\n * content: 'Hello',\n * finishReason: 'example',\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * },\n * createdAt: 0,\n * duration: 0\n * })\n * void value\n * ```\n */\nexport const AiChatRecordSchema = z.object({\n id: z.string(),\n objectId: z.string(),\n sessionId: z.string(),\n request: z.object({\n model: z.string(),\n messages: z.array(AiChatMessageSchema),\n }),\n response: z.object({\n content: z.string(),\n toolCalls: z.array(AiToolCallSchema).optional(),\n finishReason: z.string(),\n usage: AiTokenUsageSchema,\n }),\n createdAt: z.number(),\n duration: z.number(),\n})\n\n/**\n * 对话历史入参 Schema。\n * @example\n * ```ts\n * import { AiChatHistoryInputSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatHistoryInputSchema.parse({\n * sessionId: 'example'\n * })\n * void value\n * ```\n */\nexport const AiChatHistoryInputSchema = z.object({\n /** 省略时由服务端绑定认证用户,跨主体访问需显式授权。 */\n objectId: z.string().min(1).optional(),\n sessionId: z.string().min(1),\n limit: z.number().int().min(1).max(200).optional(),\n order: z.enum(['asc', 'desc']).optional(),\n})\n\n/**\n * 对话历史业务数据 Schema。\n * @example\n * ```ts\n * import { AiChatHistoryDataSchema } from '@h-ai/api-contract'\n *\n * const value = AiChatHistoryDataSchema.parse({\n * items: [\n * {\n * id: 'example-1',\n * objectId: 'example',\n * sessionId: 'example',\n * request: {\n * model: 'example',\n * messages: [\n * {\n * role: 'system',\n * content: 'Hello'\n * }\n * ]\n * },\n * response: {\n * content: 'Hello',\n * finishReason: 'example',\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * },\n * createdAt: 0,\n * duration: 0\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport const AiChatHistoryDataSchema = z.object({\n items: z.array(AiChatRecordSchema),\n})\n\n/**\n * 聊天补全请求,含消息、模型和生成参数。\n * @example\n * ```ts\n * import type { AiChatCompletionInput } from '@h-ai/api-contract'\n * import { AiChatCompletionInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiChatCompletionInput = AiChatCompletionInputSchema.parse({\n * messages: [\n * {\n * role: 'user',\n * content: 'Say hello'\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport type AiChatCompletionInput = z.infer<typeof AiChatCompletionInputSchema>\n/**\n * 聊天补全业务数据,含候选消息与用量。\n * @example\n * ```ts\n * import type { AiChatCompletionData } from '@h-ai/api-contract'\n * import { AiChatCompletionDataSchema } from '@h-ai/api-contract'\n *\n * const value: AiChatCompletionData = AiChatCompletionDataSchema.parse({\n * id: 'example-1',\n * object: 'chat.completion',\n * created: 0,\n * model: 'example',\n * choices: [\n * {\n * index: 0,\n * message: {\n * role: 'assistant',\n * content: 'Hello'\n * },\n * finish_reason: 'stop'\n * }\n * ],\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * })\n * void value\n * ```\n */\nexport type AiChatCompletionData = z.infer<typeof AiChatCompletionDataSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 AiChatCompletionOutput 响应。\n * @example\n * ```ts\n * import type { AiChatCompletionOutput } from '@h-ai/api-contract'\n * import { AiChatCompletionDataSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: AiChatCompletionOutput = ok(AiChatCompletionDataSchema.parse({\n * id: 'example-1',\n * object: 'chat.completion',\n * created: 0,\n * model: 'example',\n * choices: [\n * {\n * index: 0,\n * message: {\n * role: 'assistant',\n * content: 'Hello'\n * },\n * finish_reason: 'stop'\n * }\n * ],\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type AiChatCompletionOutput = HaiResult<AiChatCompletionData>\n/**\n * 会话消息发送请求。\n * @example\n * ```ts\n * import type { AiSendMessageInput } from '@h-ai/api-contract'\n * import { AiSendMessageInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiSendMessageInput = AiSendMessageInputSchema.parse({\n * message: 'example'\n * })\n * void value\n * ```\n */\nexport type AiSendMessageInput = z.infer<typeof AiSendMessageInputSchema>\n/**\n * 会话消息写入后的业务数据。\n * @example\n * ```ts\n * import type { AiSendMessageData } from '@h-ai/api-contract'\n * import { AiSendMessageDataSchema } from '@h-ai/api-contract'\n *\n * const value: AiSendMessageData = AiSendMessageDataSchema.parse({\n * content: 'Hello',\n * model: 'example'\n * })\n * void value\n * ```\n */\nexport type AiSendMessageData = z.infer<typeof AiSendMessageDataSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 AiSendMessageOutput 响应。\n * @example\n * ```ts\n * import type { AiSendMessageOutput } from '@h-ai/api-contract'\n * import { AiSendMessageDataSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: AiSendMessageOutput = ok(AiSendMessageDataSchema.parse({\n * content: 'Hello',\n * model: 'example'\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type AiSendMessageOutput = HaiResult<AiSendMessageData>\n/**\n * 按主体和条件检索记忆的请求。\n * @example\n * ```ts\n * import type { AiMemoryRecallInput } from '@h-ai/api-contract'\n * import { AiMemoryRecallInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiMemoryRecallInput = AiMemoryRecallInputSchema.parse({\n * query: 'example'\n * })\n * void value\n * ```\n */\nexport type AiMemoryRecallInput = z.infer<typeof AiMemoryRecallInputSchema>\n/**\n * 按主体查询记忆列表的分页请求。\n * @example\n * ```ts\n * import type { AiMemoryListInput } from '@h-ai/api-contract'\n * import { AiMemoryListInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiMemoryListInput = AiMemoryListInputSchema.parse({})\n * void value\n * ```\n */\nexport type AiMemoryListInput = z.infer<typeof AiMemoryListInputSchema>\n/**\n * 按主体列出会话的分页请求。\n * @example\n * ```ts\n * import type { AiSessionListInput } from '@h-ai/api-contract'\n * import { AiSessionListInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiSessionListInput = AiSessionListInputSchema.parse({})\n * void value\n * ```\n */\nexport type AiSessionListInput = z.infer<typeof AiSessionListInputSchema>\n/**\n * 读取指定会话历史的请求。\n * @example\n * ```ts\n * import type { AiChatHistoryInput } from '@h-ai/api-contract'\n * import { AiChatHistoryInputSchema } from '@h-ai/api-contract'\n *\n * const value: AiChatHistoryInput = AiChatHistoryInputSchema.parse({\n * sessionId: 'example'\n * })\n * void value\n * ```\n */\nexport type AiChatHistoryInput = z.infer<typeof AiChatHistoryInputSchema>\n/**\n * 会话持久化消息记录。\n * @example\n * ```ts\n * import type { AiChatRecord } from '@h-ai/api-contract'\n * import { AiChatRecordSchema } from '@h-ai/api-contract'\n *\n * const value: AiChatRecord = AiChatRecordSchema.parse({\n * id: 'example-1',\n * objectId: 'example',\n * sessionId: 'example',\n * request: {\n * model: 'example',\n * messages: [\n * {\n * role: 'system',\n * content: 'Hello'\n * }\n * ]\n * },\n * response: {\n * content: 'Hello',\n * finishReason: 'example',\n * usage: {\n * prompt_tokens: 0,\n * completion_tokens: 0,\n * total_tokens: 0\n * }\n * },\n * createdAt: 0,\n * duration: 0\n * })\n * void value\n * ```\n */\nexport type AiChatRecord = z.infer<typeof AiChatRecordSchema>\n","/**\n * @h-ai/api-contract — AI 领域 contract\n *\n * 定义 AI 功能相关 API 的接口边界:聊天补全、记忆管理与会话管理。\n * 聊天补全使用 OpenAI 兼容结构(`messages` 数组 + `choices` 数组)。\n * 所有接口均需 Bearer Token 认证(由 `@h-ai/serv` 的 feature 层强制)。\n * 默认绑定认证用户的 objectId;其它主体和会话的访问须经过服务端资源授权。\n * @module ai-contract\n */\n\nimport { haiResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n AiChatCompletionDataSchema,\n AiChatCompletionInputSchema,\n AiChatHistoryDataSchema,\n AiChatHistoryInputSchema,\n AiMemoryListDataSchema,\n AiMemoryListInputSchema,\n AiMemoryRecallDataSchema,\n AiMemoryRecallInputSchema,\n AiSendMessageDataSchema,\n AiSendMessageInputSchema,\n AiSessionListDataSchema,\n AiSessionListInputSchema,\n} from './ai-schemas.js'\n\n/**\n * AI 领域 oRPC contract。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract = apiContract.ai\n * void contract\n * ```\n */\nexport const aiContract = {\n chats: {\n createCompletion: route({ method: 'POST', path: '/ai/chats/completions', operationId: 'ai.chats.createCompletion', summary: 'Create non-streaming chat completion with function tools', tags: ['ai', 'chats'] })\n .input(AiChatCompletionInputSchema)\n .output(haiResultSchema(AiChatCompletionDataSchema)),\n sendMessage: route({ method: 'POST', path: '/ai/chats/messages', operationId: 'ai.chats.sendMessage', summary: 'Send a single chat message', tags: ['ai', 'chats'] })\n .input(AiSendMessageInputSchema)\n .output(haiResultSchema(AiSendMessageDataSchema)),\n listHistory: route({ method: 'POST', path: '/ai/chats/history', operationId: 'ai.chats.listHistory', summary: 'List chat history', tags: ['ai', 'chats'] })\n .input(AiChatHistoryInputSchema)\n .output(haiResultSchema(AiChatHistoryDataSchema)),\n },\n memories: {\n recall: route({ method: 'POST', path: '/ai/memories/recall', operationId: 'ai.memories.recall', summary: 'Recall relevant memories', tags: ['ai', 'memories'] })\n .input(AiMemoryRecallInputSchema)\n .output(haiResultSchema(AiMemoryRecallDataSchema)),\n list: route({ method: 'POST', path: '/ai/memories/list', operationId: 'ai.memories.list', summary: 'List memories', tags: ['ai', 'memories'] })\n .input(AiMemoryListInputSchema)\n .output(haiResultSchema(AiMemoryListDataSchema)),\n },\n sessions: {\n list: route({ method: 'POST', path: '/ai/sessions/list', operationId: 'ai.sessions.list', summary: 'List sessions', tags: ['ai', 'sessions'] })\n .input(AiSessionListInputSchema)\n .output(haiResultSchema(AiSessionListDataSchema)),\n },\n}\n\n/**\n * ai 领域公开 procedure 契约的完整类型。\n * @example\n * ```ts\n * import type { AiContract } from '@h-ai/api-contract'\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract: AiContract = apiContract.ai\n * void contract\n * ```\n */\nexport type AiContract = typeof aiContract\n"]}
@@ -1,4 +1,5 @@
1
- import { haiResultSchema, route, HaiVoidResultSchema } from './chunk-CUU2F6YD.js';
1
+ import { haiResultSchema, route, HaiErrorSchema, HaiVoidResultSchema } from './chunk-JKPLID6E.js';
2
+ import { StorageKeySchema, StoragePresignExpiresInSchema, StoragePrefixSchema, StorageDeleteKeysSchema } from '@h-ai/storage/schemas';
2
3
  import { z } from 'zod';
3
4
 
4
5
  var StorageFileMetadataSchema = z.object({
@@ -9,15 +10,14 @@ var StorageFileMetadataSchema = z.object({
9
10
  etag: z.string().optional(),
10
11
  metadata: z.record(z.string(), z.string()).optional()
11
12
  });
12
- var StoragePresignDownloadInputSchema = z.object({
13
- key: z.string().min(1),
14
- expiresIn: z.number().int().min(1).optional()
13
+ var StoragePresignDownloadInputSchema = z.strictObject({
14
+ key: StorageKeySchema,
15
+ expiresIn: StoragePresignExpiresInSchema.optional()
15
16
  });
16
- var StoragePresignUploadInputSchema = z.object({
17
- key: z.string().min(1),
17
+ var StoragePresignUploadInputSchema = z.strictObject({
18
+ key: StorageKeySchema,
18
19
  contentType: z.string().optional(),
19
- contentLength: z.number().int().min(1).optional(),
20
- expiresIn: z.number().int().min(1).optional()
20
+ expiresIn: StoragePresignExpiresInSchema.optional()
21
21
  });
22
22
  var StoragePresignedUrlSchema = z.object({
23
23
  url: z.string(),
@@ -25,7 +25,7 @@ var StoragePresignedUrlSchema = z.object({
25
25
  expiresAt: z.coerce.date().optional()
26
26
  });
27
27
  var StorageListFilesInputSchema = z.object({
28
- prefix: z.string().optional(),
28
+ prefix: StoragePrefixSchema.optional(),
29
29
  maxKeys: z.coerce.number().int().min(1).max(1e3).optional(),
30
30
  continuationToken: z.string().optional(),
31
31
  delimiter: z.string().optional()
@@ -37,13 +37,20 @@ var StorageListFilesDataSchema = z.object({
37
37
  isTruncated: z.boolean()
38
38
  });
39
39
  var StorageFileKeyInputSchema = z.object({
40
- key: z.string().min(1)
40
+ key: StorageKeySchema
41
41
  });
42
42
  var StorageDeleteFilesInputSchema = z.object({
43
- keys: z.array(z.string().min(1)).min(1)
43
+ keys: StorageDeleteKeysSchema
44
+ });
45
+ var StorageDeleteSummarySchema = z.object({
46
+ deletedKeys: z.array(z.string()),
47
+ failures: z.array(z.object({
48
+ key: z.string(),
49
+ code: z.string(),
50
+ retryable: z.boolean(),
51
+ outcome: z.enum(["failed", "unknown", "notAttempted"])
52
+ }))
44
53
  });
45
-
46
- // src/storage/storage-contract.ts
47
54
  var presignedUrlOutputSchema = haiResultSchema(StoragePresignedUrlSchema);
48
55
  var storageContract = {
49
56
  presignedUrls: {
@@ -54,10 +61,16 @@ var storageContract = {
54
61
  list: route({ method: "GET", path: "/storage/files", operationId: "storage.files.list", summary: "List files", tags: ["storage"] }).input(StorageListFilesInputSchema).output(haiResultSchema(StorageListFilesDataSchema)),
55
62
  getMetadata: route({ method: "POST", path: "/storage/files/metadata", operationId: "storage.files.getMetadata", summary: "Get file metadata", tags: ["storage"] }).input(StorageFileKeyInputSchema).output(haiResultSchema(StorageFileMetadataSchema)),
56
63
  delete: route({ method: "DELETE", path: "/storage/files", operationId: "storage.files.delete", summary: "Delete file", tags: ["storage"] }).input(StorageFileKeyInputSchema).output(HaiVoidResultSchema),
57
- deleteMany: route({ method: "POST", path: "/storage/files/delete-many", operationId: "storage.files.deleteMany", summary: "Delete files", tags: ["storage"] }).input(StorageDeleteFilesInputSchema).output(HaiVoidResultSchema)
64
+ deleteMany: route({ method: "POST", path: "/storage/files/delete-many", operationId: "storage.files.deleteMany", summary: "Delete files", tags: ["storage"] }).input(StorageDeleteFilesInputSchema).output(z.discriminatedUnion("success", [
65
+ z.object({ success: z.literal(true), data: StorageDeleteSummarySchema }),
66
+ z.object({
67
+ success: z.literal(false),
68
+ error: HaiErrorSchema.extend({ ext: z.object({ deleteMany: StorageDeleteSummarySchema.optional() }).catchall(z.unknown()).optional() })
69
+ })
70
+ ]))
58
71
  }
59
72
  };
60
73
 
61
- export { StorageDeleteFilesInputSchema, StorageFileKeyInputSchema, StorageFileMetadataSchema, StorageListFilesDataSchema, StorageListFilesInputSchema, StoragePresignDownloadInputSchema, StoragePresignUploadInputSchema, StoragePresignedUrlSchema, storageContract };
62
- //# sourceMappingURL=chunk-3QSKWVLP.js.map
63
- //# sourceMappingURL=chunk-3QSKWVLP.js.map
74
+ export { StorageDeleteFilesInputSchema, StorageDeleteSummarySchema, StorageFileKeyInputSchema, StorageFileMetadataSchema, StorageListFilesDataSchema, StorageListFilesInputSchema, StoragePresignDownloadInputSchema, StoragePresignUploadInputSchema, StoragePresignedUrlSchema, storageContract };
75
+ //# sourceMappingURL=chunk-IVZVAWEF.js.map
76
+ //# sourceMappingURL=chunk-IVZVAWEF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/storage-schemas.ts","../src/storage/storage-contract.ts"],"names":["z"],"mappings":"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","file":"chunk-IVZVAWEF.js","sourcesContent":["/**\n * @h-ai/api-contract — Storage 领域 Schema\n *\n * 包含文件元数据、预签名 URL、文件列表与删除相关的 input/output Zod Schema。\n * 仅保留跨接口、跨层复用的数据结构;一次性输出包装在 contract 中内联。\n * @module storage-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { StorageDeleteKeysSchema, StorageKeySchema, StoragePrefixSchema, StoragePresignExpiresInSchema } from '@h-ai/storage/schemas'\nimport { z } from 'zod'\n\n/**\n * 文件元数据 Schema。\n * @example\n * ```ts\n * import { StorageFileMetadataSchema } from '@h-ai/api-contract'\n *\n * const value = StorageFileMetadataSchema.parse({\n * key: 'examples/readme.txt',\n * size: 0,\n * contentType: 'example',\n * lastModified: null\n * })\n * void value\n * ```\n */\nexport const StorageFileMetadataSchema = z.object({\n key: z.string(),\n size: z.number(),\n contentType: z.string(),\n lastModified: z.coerce.date(),\n etag: z.string().optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n})\n\n/**\n * 获取下载签名 URL 入参 Schema。\n * @example\n * ```ts\n * import { StoragePresignDownloadInputSchema } from '@h-ai/api-contract'\n *\n * const value = StoragePresignDownloadInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport const StoragePresignDownloadInputSchema = z.strictObject({\n key: StorageKeySchema,\n expiresIn: StoragePresignExpiresInSchema.optional(),\n})\n\n/**\n * 获取上传签名 URL 入参 Schema。\n * @example\n * ```ts\n * import { StoragePresignUploadInputSchema } from '@h-ai/api-contract'\n *\n * const value = StoragePresignUploadInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport const StoragePresignUploadInputSchema = z.strictObject({\n key: StorageKeySchema,\n contentType: z.string().optional(),\n expiresIn: StoragePresignExpiresInSchema.optional(),\n})\n\n/**\n * 签名 URL 业务数据 Schema。\n * @example\n * ```ts\n * import { StoragePresignedUrlSchema } from '@h-ai/api-contract'\n *\n * const value = StoragePresignedUrlSchema.parse({\n * url: 'https://example.com/resource',\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport const StoragePresignedUrlSchema = z.object({\n url: z.string(),\n key: z.string(),\n expiresAt: z.coerce.date().optional(),\n})\n\n/**\n * 文件列表查询入参 Schema。\n * @example\n * ```ts\n * import { StorageListFilesInputSchema } from '@h-ai/api-contract'\n *\n * const value = StorageListFilesInputSchema.parse({})\n * void value\n * ```\n */\nexport const StorageListFilesInputSchema = z.object({\n prefix: StoragePrefixSchema.optional(),\n maxKeys: z.coerce.number().int().min(1).max(1000).optional(),\n continuationToken: z.string().optional(),\n delimiter: z.string().optional(),\n})\n\n/**\n * 文件列表业务数据 Schema。\n * @example\n * ```ts\n * import { StorageListFilesDataSchema } from '@h-ai/api-contract'\n *\n * const value = StorageListFilesDataSchema.parse({\n * files: [\n * {\n * key: 'examples/readme.txt',\n * size: 0,\n * contentType: 'example',\n * lastModified: null\n * }\n * ],\n * commonPrefixes: [\n * 'example'\n * ],\n * isTruncated: true\n * })\n * void value\n * ```\n */\nexport const StorageListFilesDataSchema = z.object({\n files: z.array(StorageFileMetadataSchema),\n commonPrefixes: z.array(z.string()),\n nextContinuationToken: z.string().optional(),\n isTruncated: z.boolean(),\n})\n\n/**\n * 单文件操作入参 Schema。\n * @example\n * ```ts\n * import { StorageFileKeyInputSchema } from '@h-ai/api-contract'\n *\n * const value = StorageFileKeyInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport const StorageFileKeyInputSchema = z.object({\n key: StorageKeySchema,\n})\n\n/**\n * 批量删除文件入参 Schema。\n * @example\n * ```ts\n * import { StorageDeleteFilesInputSchema } from '@h-ai/api-contract'\n *\n * const value = StorageDeleteFilesInputSchema.parse({\n * keys: [\n * 'example'\n * ]\n * })\n * void value\n * ```\n */\nexport const StorageDeleteFilesInputSchema = z.object({\n keys: StorageDeleteKeysSchema,\n})\n\n/**\n * 批量删除的安全进度;响应失败时通过 error.ext.deleteMany 返回同一结构。\n * @example\n * ```ts\n * import { StorageDeleteSummarySchema } from '@h-ai/api-contract'\n *\n * const value = StorageDeleteSummarySchema.parse({\n * deletedKeys: [\n * 'example'\n * ],\n * failures: [\n * {\n * key: 'examples/readme.txt',\n * code: 'example-1',\n * retryable: true,\n * outcome: 'failed'\n * }\n * ]\n * })\n * void value\n * ```\n */\nexport const StorageDeleteSummarySchema = z.object({\n deletedKeys: z.array(z.string()),\n failures: z.array(z.object({\n key: z.string(),\n code: z.string(),\n retryable: z.boolean(),\n outcome: z.enum(['failed', 'unknown', 'notAttempted']),\n })),\n})\n\n/**\n * 为对象生成下载地址的请求。\n * @example\n * ```ts\n * import type { StoragePresignDownloadInput } from '@h-ai/api-contract'\n * import { StoragePresignDownloadInputSchema } from '@h-ai/api-contract'\n *\n * const value: StoragePresignDownloadInput = StoragePresignDownloadInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport type StoragePresignDownloadInput = z.infer<typeof StoragePresignDownloadInputSchema>\n/**\n * 为对象生成上传地址的请求。\n * @example\n * ```ts\n * import type { StoragePresignUploadInput } from '@h-ai/api-contract'\n * import { StoragePresignUploadInputSchema } from '@h-ai/api-contract'\n *\n * const value: StoragePresignUploadInput = StoragePresignUploadInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport type StoragePresignUploadInput = z.infer<typeof StoragePresignUploadInputSchema>\n/**\n * 以 HaiResult 区分成功业务数据和公共错误的 StoragePresignedUrlOutput 响应。\n * @example\n * ```ts\n * import type { StoragePresignedUrlOutput } from '@h-ai/api-contract'\n * import { StoragePresignedUrlSchema } from '@h-ai/api-contract'\n * import { ok } from '@h-ai/core'\n *\n * const response: StoragePresignedUrlOutput = ok(StoragePresignedUrlSchema.parse({\n * url: 'https://example.com/resource',\n * key: 'examples/readme.txt'\n * }))\n * if (response.success) void response.data\n * ```\n */\nexport type StoragePresignedUrlOutput = HaiResult<z.infer<typeof StoragePresignedUrlSchema>>\n/**\n * 按前缀和游标列出对象的请求。\n * @example\n * ```ts\n * import type { StorageListFilesInput } from '@h-ai/api-contract'\n * import { StorageListFilesInputSchema } from '@h-ai/api-contract'\n *\n * const value: StorageListFilesInput = StorageListFilesInputSchema.parse({})\n * void value\n * ```\n */\nexport type StorageListFilesInput = z.infer<typeof StorageListFilesInputSchema>\n/**\n * 以对象 key 定位文件的请求。\n * @example\n * ```ts\n * import type { StorageFileKeyInput } from '@h-ai/api-contract'\n * import { StorageFileKeyInputSchema } from '@h-ai/api-contract'\n *\n * const value: StorageFileKeyInput = StorageFileKeyInputSchema.parse({\n * key: 'examples/readme.txt'\n * })\n * void value\n * ```\n */\nexport type StorageFileKeyInput = z.infer<typeof StorageFileKeyInputSchema>\n/**\n * 批量删除指定对象 key 的请求。\n * @example\n * ```ts\n * import type { StorageDeleteFilesInput } from '@h-ai/api-contract'\n * import { StorageDeleteFilesInputSchema } from '@h-ai/api-contract'\n *\n * const value: StorageDeleteFilesInput = StorageDeleteFilesInputSchema.parse({\n * keys: [\n * 'example'\n * ]\n * })\n * void value\n * ```\n */\nexport type StorageDeleteFilesInput = z.infer<typeof StorageDeleteFilesInputSchema>\n","/**\n * @h-ai/api-contract — Storage 领域 contract\n *\n * 定义文件存储相关 API 的接口边界:预签名 URL 生成与文件管理。\n * 所有接口均需 Bearer Token 认证(由 `@h-ai/serv` 的 feature 层强制)。\n * 资源访问还须通过应用注入的 authorize 策略;认证不等同于拥有任意 key 的访问权。\n * @module storage-contract\n */\n\nimport { z } from 'zod'\nimport { HaiErrorSchema, haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n StorageDeleteFilesInputSchema,\n StorageDeleteSummarySchema,\n StorageFileKeyInputSchema,\n StorageFileMetadataSchema,\n StorageListFilesDataSchema,\n StorageListFilesInputSchema,\n StoragePresignDownloadInputSchema,\n StoragePresignedUrlSchema,\n StoragePresignUploadInputSchema,\n} from './storage-schemas.js'\n\n// 下载与上传接口共享同一响应结构,仅在本 contract 内复用。\nconst presignedUrlOutputSchema = haiResultSchema(StoragePresignedUrlSchema)\n\n/**\n * Storage 领域 oRPC contract。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract = apiContract.storage\n * void contract\n * ```\n */\nexport const storageContract = {\n presignedUrls: {\n createDownload: route({ method: 'POST', path: '/storage/presigned-urls/download', operationId: 'storage.presignedUrls.createDownload', summary: 'Create presigned download URL', tags: ['storage'] })\n .input(StoragePresignDownloadInputSchema)\n .output(presignedUrlOutputSchema),\n createUpload: route({ method: 'POST', path: '/storage/presigned-urls/upload', operationId: 'storage.presignedUrls.createUpload', summary: 'Create presigned upload URL', tags: ['storage'] })\n .input(StoragePresignUploadInputSchema)\n .output(presignedUrlOutputSchema),\n },\n files: {\n list: route({ method: 'GET', path: '/storage/files', operationId: 'storage.files.list', summary: 'List files', tags: ['storage'] })\n .input(StorageListFilesInputSchema)\n .output(haiResultSchema(StorageListFilesDataSchema)),\n getMetadata: route({ method: 'POST', path: '/storage/files/metadata', operationId: 'storage.files.getMetadata', summary: 'Get file metadata', tags: ['storage'] })\n .input(StorageFileKeyInputSchema)\n .output(haiResultSchema(StorageFileMetadataSchema)),\n delete: route({ method: 'DELETE', path: '/storage/files', operationId: 'storage.files.delete', summary: 'Delete file', tags: ['storage'] })\n .input(StorageFileKeyInputSchema)\n .output(HaiVoidResultSchema),\n deleteMany: route({ method: 'POST', path: '/storage/files/delete-many', operationId: 'storage.files.deleteMany', summary: 'Delete files', tags: ['storage'] })\n .input(StorageDeleteFilesInputSchema)\n .output(z.discriminatedUnion('success', [\n z.object({ success: z.literal(true), data: StorageDeleteSummarySchema }),\n z.object({\n success: z.literal(false),\n error: HaiErrorSchema.extend({ ext: z.object({ deleteMany: StorageDeleteSummarySchema.optional() }).catchall(z.unknown()).optional() }),\n }),\n ])),\n },\n}\n\n/**\n * storage 领域公开 procedure 契约的完整类型。\n * @example\n * ```ts\n * import type { StorageContract } from '@h-ai/api-contract'\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const contract: StorageContract = apiContract.storage\n * void contract\n * ```\n */\nexport type StorageContract = typeof storageContract\n"]}
@@ -34,5 +34,5 @@ function pathOf(procedure) {
34
34
  }
35
35
 
36
36
  export { HaiErrorSchema, HaiVoidResultSchema, haiResultSchema, pathOf, route };
37
- //# sourceMappingURL=chunk-CUU2F6YD.js.map
38
- //# sourceMappingURL=chunk-CUU2F6YD.js.map
37
+ //# sourceMappingURL=chunk-JKPLID6E.js.map
38
+ //# sourceMappingURL=chunk-JKPLID6E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/result-schemas.ts","../src/common/route.ts"],"names":[],"mappings":";;;;AA0BO,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAAA,EACrC,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACtC,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,KAAA,EAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC5B,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,GAAA,EAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,QAAA;AACzC,CAAC;AAiBM,SAAS,gBAAqC,UAAA,EAAe;AAClE,EAAA,OAAO,CAAA,CAAE,mBAAmB,SAAA,EAAW;AAAA,IACrC,EAAE,MAAA,CAAO;AAAA,MACP,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,MACvB,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACD,EAAE,MAAA,CAAO;AAAA,MACP,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAAA,MACxB,KAAA,EAAO;AAAA,KACR;AAAA,GACF,CAAA;AACH;AAYO,IAAM,mBAAA,GAAsB,eAAA,CAAgB,CAAA,CAAE,IAAA,EAAM;ACrDpD,IAAM,QAAyB,CAAA,GAAI,IAAA,KAAS,EAAA,CAAG,KAAA,CAAM,GAAG,IAAI;AAkB5D,SAAS,OAAO,SAAA,EAA+C;AACpE,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,OAAO,CAAA,CAAE,KAAA,CAAM,IAAA;AACtC,EAAA,IAAI,CAAC,IAAA;AACH,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAC/D,EAAA,OAAO,IAAA;AACT","file":"chunk-JKPLID6E.js","sourcesContent":["/**\n * @h-ai/api-contract — HaiResult Schema\n *\n * 提供与 `@h-ai/core` HaiResult<T> 结构一致的 Zod Schema 工厂,\n * 用于 oRPC contract 的 output 定义和客户端响应校验。\n * @module result-schemas\n */\n\nimport { z } from 'zod'\n\n/**\n * HaiError 的跨端 JSON Schema。\n *\n * 仅描述公共错误字段,不暴露内部异常对象结构。\n * @example\n * ```ts\n * import { HaiErrorSchema } from '@h-ai/api-contract'\n *\n * const value = HaiErrorSchema.parse({\n * code: 'app:orders:001',\n * message: 'Order not found',\n * httpStatus: 404\n * })\n * void value\n * ```\n */\nexport const HaiErrorSchema = z.object({\n code: z.union([z.string(), z.number()]),\n message: z.string(),\n httpStatus: z.number().optional(),\n system: z.string().optional(),\n module: z.string().optional(),\n cause: z.unknown().optional(),\n suggestion: z.string().optional(),\n ext: z.record(z.string(), z.unknown()).optional(),\n})\n\n/**\n * 创建与 @h-ai/core HaiResult<T> 一致的响应 Schema。\n *\n * @param dataSchema - 成功分支 data 字段 Schema\n * @returns HaiResult<T> 的 Zod Schema\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n * import { z } from 'zod'\n *\n * const result = apiContract.haiResultSchema(z.object({ id: z.string() }))\n * .parse({ success: true, data: { id: 'order_1' } })\n * if (result.success) void result.data.id\n * ```\n */\nexport function haiResultSchema<T extends z.ZodType>(dataSchema: T) {\n return z.discriminatedUnion('success', [\n z.object({\n success: z.literal(true),\n data: dataSchema,\n }),\n z.object({\n success: z.literal(false),\n error: HaiErrorSchema,\n }),\n ])\n}\n\n/**\n * 无内容成功响应 Schema。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const result = apiContract.voidResultSchema.parse({ success: true, data: undefined })\n * if (!result.success) throw new Error(result.error.message)\n * ```\n */\nexport const HaiVoidResultSchema = haiResultSchema(z.void())\n","/**\n * @h-ai/api-contract — route builder\n *\n * 统一封装 oRPC 的 route builder。应用与契约包通过 `apiContract.route(...)`\n * 定义 HTTP 路由元数据,不需要直接依赖 `@orpc/contract` 或 `@h-ai/serv`。\n */\n\nimport type { AnyContractProcedure } from '@orpc/contract'\nimport { oc } from '@orpc/contract'\n\n/**\n * 创建 oRPC contract 路由节点。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n * import { z } from 'zod'\n *\n * const health = apiContract.route({ method: 'GET', path: '/health' })\n * .output(z.object({ healthy: z.boolean() }))\n * void health\n * ```\n */\nexport const route: typeof oc.route = (...args) => oc.route(...args)\n\n/**\n * 读取 contract procedure 中声明的业务路径。\n *\n * 路径只在对应 `*-contract.ts` 的 route 定义中维护;transport、client 与\n * middleware 通过本函数读取,避免再维护一份路由常量。\n *\n * @param procedure - 已声明 HTTP route 的 oRPC contract procedure\n * @returns contract 中的绝对业务路径\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n *\n * const path = apiContract.pathOf(apiContract.iam.auth.login)\n * void path\n * ```\n */\nexport function pathOf(procedure: AnyContractProcedure): `/${string}` {\n const path = procedure['~orpc'].route.path\n if (!path)\n throw new Error('Contract procedure must define an HTTP path')\n return path\n}\n"]}