@h-ai/api-contract 1.0.0-beta.18 → 1.0.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +9 -2
- package/README.ja.md +9 -2
- package/README.md +9 -2
- package/dist/ai/index.d.ts +5 -4
- package/dist/ai/index.js +2 -2
- package/dist/{chunk-5UEDYQLG.js → chunk-5LBEMLDK.js} +6 -3
- package/dist/chunk-5LBEMLDK.js.map +1 -0
- package/dist/{chunk-ZM7KM6V3.js → chunk-BAEWPPKY.js} +54 -11
- package/dist/chunk-BAEWPPKY.js.map +1 -0
- package/dist/{chunk-LD5PSL4C.js → chunk-NMTOSEVA.js} +84 -18
- package/dist/chunk-NMTOSEVA.js.map +1 -0
- package/dist/chunk-PS3OHILQ.js +571 -0
- package/dist/chunk-PS3OHILQ.js.map +1 -0
- package/dist/chunk-VEUL2AEK.js +330 -0
- package/dist/chunk-VEUL2AEK.js.map +1 -0
- package/dist/chunk-XFW626TI.js +115 -0
- package/dist/chunk-XFW626TI.js.map +1 -0
- package/dist/feedback/index.d.ts +30 -29
- package/dist/feedback/index.js +2 -2
- package/dist/iam/index.d.ts +4 -3
- package/dist/iam/index.js +2 -2
- package/dist/index.d.ts +22 -21
- package/dist/index.js +12 -12
- package/dist/payment/index.d.ts +6 -5
- package/dist/payment/index.js +2 -2
- package/dist/storage/index.d.ts +2 -1
- package/dist/storage/index.js +2 -2
- package/package.json +9 -9
- package/dist/chunk-5UEDYQLG.js.map +0 -1
- package/dist/chunk-CXOK55BY.js +0 -274
- package/dist/chunk-CXOK55BY.js.map +0 -1
- package/dist/chunk-FGB5O4VA.js +0 -164
- package/dist/chunk-FGB5O4VA.js.map +0 -1
- package/dist/chunk-LD5PSL4C.js.map +0 -1
- package/dist/chunk-M4DEKGOP.js +0 -67
- package/dist/chunk-M4DEKGOP.js.map +0 -1
- package/dist/chunk-ZM7KM6V3.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/iam/iam-schemas.ts","../src/iam/iam-contract.ts"],"names":[],"mappings":"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","file":"chunk-PS3OHILQ.js","sourcesContent":["/**\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\nconst captchaProofSchema = z.string().min(1).max(4096).optional()\n\n/**\n * 交互挑战生成入参,证明只能用于指定入口。\n * @example\n * ```ts\n * import { IamCreateCaptchaInputSchema } from '@h-ai/api-contract'\n * const input = IamCreateCaptchaInputSchema.parse({ operation: 'login' })\n * ```\n */\nexport const IamCreateCaptchaInputSchema = z.object({\n operation: z.enum([\n 'login',\n 'register',\n 'sendOtp',\n 'passwordReset',\n 'renewPassword',\n ]),\n})\n\n/**\n * 自托管 ALTCHA 可公开挑战;不会返回签名秘密。\n * @example\n * ```ts\n * import { IamCaptchaChallengeSchema } from '@h-ai/api-contract'\n * function parseResponse(value: unknown) { return IamCaptchaChallengeSchema.parse(value) }\n * ```\n */\nexport const IamCaptchaChallengeSchema = z.object({\n id: z.string().regex(/^[a-f0-9]{64}$/),\n challenge: z.object({\n signature: z.string().max(256).optional(),\n parameters: z.object({\n algorithm: z.string().refine(value => value === 'PBKDF2/SHA-256'),\n nonce: z.string().min(1).max(256),\n salt: z.string().min(1).max(256),\n cost: z.number().int().min(100).max(50000),\n keyLength: z.number().int().min(16).max(64),\n keyPrefix: z.string().min(1).max(128),\n keySignature: z.string().max(256).optional(),\n data: z.record(z.string(), z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n ])).optional(),\n }),\n }),\n})\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 * accountStatus: 'active',\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 accountType: z.enum(['permanent', 'temporary']).optional(),\n accountStatus: z.enum(['active', 'dormant', 'closed']),\n accountExpiresAt: z.coerce.date().nullable().optional(),\n lastLoginAt: z.coerce.date().nullable().optional(),\n mustChangePassword: z.boolean().optional(),\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 * accountStatus: 'active',\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 * accountStatus: 'active',\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 expectedUserId: z.string().min(1).max(200).optional(),\n captcha: captchaProofSchema,\n identifier: z.string().min(1),\n password: z.string().min(1),\n})\n\n/**\n * 可以尝试刷新或恢复登录的IAM会话错误码;密码错误、初始/过期改密与操作二次认证不属于会话恢复。\n * @example\n * ```ts\n * import { IamSessionErrorCodeSchema } from '@h-ai/api-contract'\n * const expired = IamSessionErrorCodeSchema.safeParse('hai:iam:103').success\n * ```\n */\nexport const IamSessionErrorCodeSchema = z.enum([\n 'hai:iam:101',\n 'hai:iam:102',\n 'hai:iam:103',\n 'hai:iam:105',\n 'hai:iam:106',\n 'hai:iam:107',\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({\n username: z.string().trim().min(1),\n password: z.string().min(1),\n captcha: captchaProofSchema,\n expectedUserId: z.string().min(1).max(200).optional(),\n})\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({\n identifier: z.string().trim().min(1),\n captcha: captchaProofSchema,\n})\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({\n token: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/**\n * 无普通会话的首次或过期改密;必须重新验证原密码。\n * @example\n * ```ts\n * import { IamRenewPasswordInputSchema } from '@h-ai/api-contract'\n * const input = IamRenewPasswordInputSchema.parse({ identifier: 'alice', password: 'Initial123!', newPassword: 'Chosen456!' })\n * ```\n */\nexport const IamRenewPasswordInputSchema = z.object({\n identifier: z.string().trim().min(1),\n password: z.string().min(1),\n newPassword: z.string().min(1),\n captcha: captchaProofSchema,\n})\n\n/**\n * 对当前会话的指定操作重新鉴别;操作本身仍需独立授权。\n * @example\n * ```ts\n * import { IamReauthenticateInputSchema } from '@h-ai/api-contract'\n * const input = IamReauthenticateInputSchema.parse({ password: 'ChosenPassword123!', operation: 'iam.users.delete' })\n * ```\n */\nexport const IamReauthenticateInputSchema = z.object({\n password: z.string().min(1),\n operation: z.string().trim().min(1).max(128),\n})\n\n/**\n * 短期、用途绑定的单次操作证明,不能持久化到浏览器存储。\n * @example\n * ```ts\n * import { IamReauthenticationProofSchema } from '@h-ai/api-contract'\n * const proof = IamReauthenticationProofSchema.parse({ ticket: 'example-only-ticket', expiresAt: Date.now() + 300000 })\n * ```\n */\nexport const IamReauthenticationProofSchema = z.object({\n ticket: z.string().min(1),\n expiresAt: z.number(),\n})\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 captcha: z.object({\n enabled: z.boolean(),\n }).default({ enabled: false }),\n reauthentication: z.object({\n enabled: z.boolean(),\n operations: z.array(z.string()),\n }).optional(),\n initialCredentials: z.object({\n enabled: z.boolean(),\n }).optional(),\n password: z.object({\n minLength: z.number(),\n maxLength: z.number(),\n requireUppercase: z.boolean(),\n requireLowercase: z.boolean(),\n requireNumber: z.boolean(),\n requireSpecialChar: z.boolean(),\n expirationDays: z.number(),\n minCharacterClasses: z.number().optional(),\n preventSamePassword: z.boolean().optional(),\n requireInitialChange: z.boolean().optional(),\n }),\n register: z.object({\n enabled: z.boolean(),\n }),\n login: z.object({\n password: z.boolean(),\n otp: z.boolean(),\n ldap: z.boolean(),\n email: z.boolean(),\n sms: z.boolean(),\n }),\n passwordReset: z.object({\n enabled: z.boolean(),\n mode: z.enum(['email', 'phone']),\n }),\n otp: z.object({\n length: z.number(),\n resendInterval: z.number(),\n }),\n agreements: IamAgreementDisplaySchema,\n ui: z.object({\n variant: z.enum(['card', 'split']),\n title: z.string().optional(),\n subtitle: z.string().optional(),\n brandTitle: z.string().optional(),\n brandText: z.string().optional(),\n logoUrl: z.string().optional(),\n illustrationUrl: z.string().optional(),\n }),\n session: z.object({\n maxAge: z.number(),\n endOnPageHide: z.boolean().default(false),\n }),\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 expectedUserId: z.string().min(1).max(200).optional(),\n captcha: captchaProofSchema,\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 captcha: captchaProofSchema,\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 captcha: captchaProofSchema,\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 sortBy: z.enum([\n 'username',\n 'email',\n 'displayName',\n 'accountStatus',\n 'createdAt',\n ]).optional(),\n sortDirection: z.enum(['asc', 'desc']).optional(),\n roleCode: z.string().trim().min(1).max(100).optional(),\n search: z.string().optional(),\n accountStatus: z.enum(['active', 'dormant', 'closed']).optional(),\n}).strict()\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.strictObject({\n accountType: z.enum(['permanent', 'temporary']).optional(),\n accountStatus: z.enum(['active', 'dormant', 'closed']).optional(),\n accountExpiresAt: z.coerce.date().optional(),\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})\n\n/**\n * 管理端单次邀请不接收共享初始密码;初始账号必须处于激活状态。\n * @example\n * ```ts\n * import { IamInviteUserInputSchema } from '@h-ai/api-contract'\n * const input = IamInviteUserInputSchema.parse({ username: 'alice', email: 'alice@example.com' })\n * ```\n */\nexport const IamInviteUserInputSchema = IamAdminCreateUserInputSchema.omit({ password: true }).extend({\n accountStatus: z.literal('active').optional(),\n})\n\n/**\n * 单次邀请的管理端输入。\n * @example\n * ```ts\n * import type { IamInviteUserInput } from '@h-ai/api-contract'\n * const input: IamInviteUserInput = { username: 'alice', email: 'alice@example.com' }\n * ```\n */\nexport type IamInviteUserInput = z.infer<typeof IamInviteUserInputSchema>\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.strictObject({\n accountType: z.enum(['permanent', 'temporary']).optional(),\n accountStatus: z.enum(['active', 'dormant', 'closed']).optional(),\n accountExpiresAt: z.coerce.date().nullable().optional(),\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 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 sensitiveOperations: z.array(z.string().trim().min(1).max(128)).max(1000).nullish().transform(value => value ?? []),\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 sensitiveOperations: z.array(z.string().trim().min(1).max(128)).max(1000).default([]),\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 IamCaptchaChallengeSchema,\n IamChangePasswordInputSchema,\n IamConfirmPasswordResetInputSchema,\n IamCreateCaptchaInputSchema,\n IamCreatePermissionInputSchema,\n IamCreateRoleInputSchema,\n IamCurrentUserSchema,\n IamInviteUserInputSchema,\n IamLdapLoginInputSchema,\n IamListPermissionsInputSchema,\n IamListUsersInputSchema,\n IamLoginInputSchema,\n IamLogoutInputSchema,\n IamOtpLoginInputSchema,\n IamPermissionSchema,\n IamPublicConfigSchema,\n IamReauthenticateInputSchema,\n IamReauthenticationProofSchema,\n IamRefreshTokenDataSchema,\n IamRefreshTokenInputSchema,\n IamRegisterInputSchema,\n IamRenewPasswordInputSchema,\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 createCaptcha: route({\n method: 'POST',\n path: '/auth/captcha',\n operationId: 'iam.auth.createCaptcha',\n summary: 'Create self-hosted security challenge',\n tags: ['iam', 'auth'],\n })\n .input(IamCreateCaptchaInputSchema)\n .output(haiResultSchema(IamCaptchaChallengeSchema)),\n reauthenticate: route({\n method: 'POST',\n path: '/auth/reauthenticate',\n operationId: 'iam.auth.reauthenticate',\n summary: 'Verify current password for one sensitive operation',\n tags: ['iam', 'auth'],\n })\n .input(IamReauthenticateInputSchema)\n .output(haiResultSchema(IamReauthenticationProofSchema)),\n publicConfig: route({\n method: 'GET',\n path: '/auth/config',\n operationId: 'iam.auth.publicConfig',\n summary: 'Public authentication configuration',\n tags: ['iam', 'auth'],\n })\n .output(haiResultSchema(IamPublicConfigSchema.nullable())),\n renewPassword: route({\n method: 'POST',\n path: '/auth/password/renew',\n operationId: 'iam.auth.renewPassword',\n summary: 'Change initial or expired password',\n tags: ['iam', 'auth'],\n })\n .input(IamRenewPasswordInputSchema)\n .output(HaiVoidResultSchema),\n loginWithLdap: route({\n method: 'POST',\n path: '/auth/login/ldap',\n operationId: 'iam.auth.loginWithLdap',\n summary: 'LDAP login',\n tags: ['iam', 'auth'],\n })\n .input(IamLdapLoginInputSchema)\n .output(authResultOutputSchema),\n requestPasswordReset: route({\n method: 'POST',\n path: '/auth/password-reset/request',\n operationId: 'iam.auth.requestPasswordReset',\n summary: 'Request password reset',\n tags: ['iam', 'auth'],\n })\n .input(IamRequestPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n confirmPasswordReset: route({\n method: 'POST',\n path: '/auth/password-reset/confirm',\n operationId: 'iam.auth.confirmPasswordReset',\n summary: 'Confirm password reset',\n tags: ['iam', 'auth'],\n })\n .input(IamConfirmPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n login: route({\n method: 'POST',\n path: '/auth/login',\n operationId: 'iam.auth.login',\n summary: 'Password login',\n tags: ['iam', 'auth'],\n })\n .input(IamLoginInputSchema)\n .output(authResultOutputSchema),\n loginWithOtp: route({\n method: 'POST',\n path: '/auth/login/otp',\n operationId: 'iam.auth.loginWithOtp',\n summary: 'OTP login',\n tags: ['iam', 'auth'],\n })\n .input(IamOtpLoginInputSchema)\n .output(authResultOutputSchema),\n logout: route({\n method: 'POST',\n path: '/auth/logout',\n operationId: 'iam.auth.logout',\n summary: 'Logout',\n tags: ['iam', 'auth'],\n })\n .input(IamLogoutInputSchema)\n .output(HaiVoidResultSchema),\n closeSession: route({\n method: 'POST',\n path: '/auth/session/close',\n operationId: 'iam.auth.closeSession',\n summary: 'Revoke departing client session without clearing newer cookies',\n tags: ['iam', 'auth'],\n })\n .input(IamLogoutInputSchema)\n .output(HaiVoidResultSchema),\n currentUser: route({\n method: 'GET',\n path: '/auth/me',\n operationId: 'iam.auth.currentUser',\n summary: 'Get current user and access scope',\n tags: ['iam', 'auth'],\n })\n .output(haiResultSchema(IamCurrentUserSchema)),\n refresh: route({\n method: 'POST',\n path: '/auth/refresh',\n operationId: 'iam.auth.refresh',\n summary: 'Refresh access token',\n tags: ['iam', 'auth'],\n })\n .input(IamRefreshTokenInputSchema)\n .output(haiResultSchema(IamRefreshTokenDataSchema)),\n sendOtp: route({\n method: 'POST',\n path: '/auth/otp/send',\n operationId: 'iam.auth.sendOtp',\n summary: 'Send OTP',\n tags: ['iam', 'auth'],\n })\n .input(IamSendOtpInputSchema)\n .output(haiResultSchema(IamSendOtpDataSchema)),\n register: route({\n method: 'POST',\n path: '/auth/register',\n operationId: 'iam.auth.register',\n summary: 'Register and login',\n tags: ['iam', 'auth'],\n })\n .input(IamRegisterInputSchema)\n .output(authResultOutputSchema),\n changePassword: route({\n method: 'POST',\n path: '/auth/change-password',\n operationId: 'iam.auth.changePassword',\n summary: 'Change current user password',\n tags: ['iam', 'auth'],\n })\n .input(IamChangePasswordInputSchema)\n .output(HaiVoidResultSchema),\n updateCurrentUser: route({\n method: 'PUT',\n path: '/auth/me',\n operationId: 'iam.auth.updateCurrentUser',\n summary: 'Update current user',\n tags: ['iam', 'auth'],\n })\n .input(IamUpdateCurrentUserInputSchema)\n .output(userOutputSchema),\n },\n users: {\n invite: route({\n method: 'POST',\n path: '/iam/users/invite',\n operationId: 'iam.users.invite',\n summary: 'Create account with one-time setup invitation',\n tags: ['iam', 'users'],\n })\n .input(IamInviteUserInputSchema)\n .output(userOutputSchema),\n list: route({\n method: 'GET',\n path: '/iam/users',\n operationId: 'iam.users.list',\n summary: 'List users',\n tags: ['iam', 'users'],\n })\n .input(IamListUsersInputSchema)\n .output(haiResultSchema(paginatedSchema(IamUserSchema))),\n get: route({\n method: 'GET',\n path: '/iam/users/{id}',\n operationId: 'iam.users.get',\n summary: 'Get user',\n tags: ['iam', 'users'],\n })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamUserSchema.nullable())),\n create: route({\n method: 'POST',\n path: '/iam/users',\n operationId: 'iam.users.create',\n summary: 'Create user',\n tags: ['iam', 'users'],\n })\n .input(IamAdminCreateUserInputSchema)\n .output(userOutputSchema),\n update: route({\n method: 'PUT',\n path: '/iam/users/{id}',\n operationId: 'iam.users.update',\n summary: 'Update user',\n tags: ['iam', 'users'],\n })\n .input(IamAdminUpdateUserInputSchema)\n .output(userOutputSchema),\n delete: route({\n method: 'DELETE',\n path: '/iam/users/{id}',\n operationId: 'iam.users.delete',\n summary: 'Delete user',\n tags: ['iam', 'users'],\n })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n resetPassword: route({\n method: 'POST',\n path: '/iam/users/{id}/reset-password',\n operationId: 'iam.users.resetPassword',\n summary: 'Reset user password',\n tags: ['iam', 'users'],\n })\n .input(IamAdminResetPasswordInputSchema)\n .output(HaiVoidResultSchema),\n },\n roles: {\n list: route({\n method: 'GET',\n path: '/iam/roles',\n operationId: 'iam.roles.list',\n summary: 'List roles',\n tags: ['iam', 'roles'],\n })\n .output(haiResultSchema(paginatedSchema(IamRoleSchema))),\n get: route({\n method: 'GET',\n path: '/iam/roles/{id}',\n operationId: 'iam.roles.get',\n summary: 'Get role',\n tags: ['iam', 'roles'],\n })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamRoleSchema.nullable())),\n create: route({\n method: 'POST',\n path: '/iam/roles',\n operationId: 'iam.roles.create',\n summary: 'Create role',\n tags: ['iam', 'roles'],\n })\n .input(IamCreateRoleInputSchema)\n .output(roleOutputSchema),\n update: route({\n method: 'PUT',\n path: '/iam/roles/{id}',\n operationId: 'iam.roles.update',\n summary: 'Update role',\n tags: ['iam', 'roles'],\n })\n .input(IamUpdateRoleInputSchema)\n .output(roleOutputSchema),\n delete: route({\n method: 'DELETE',\n path: '/iam/roles/{id}',\n operationId: 'iam.roles.delete',\n summary: 'Delete role',\n tags: ['iam', 'roles'],\n })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n permissions: {\n setSensitiveOperations: route({\n method: 'PUT',\n path: '/iam/permissions/{id}/sensitive-operations',\n operationId: 'iam.permissions.sensitiveOperations',\n summary: 'Set permission sensitive operations',\n tags: ['iam', 'permissions'],\n })\n .input(IamPermissionSchema.pick({ id: true, sensitiveOperations: true }))\n .output(HaiVoidResultSchema),\n list: route({\n method: 'GET',\n path: '/iam/permissions',\n operationId: 'iam.permissions.list',\n summary: 'List permissions',\n tags: ['iam', 'permissions'],\n })\n .input(IamListPermissionsInputSchema)\n .output(haiResultSchema(paginatedSchema(IamPermissionSchema))),\n get: route({\n method: 'GET',\n path: '/iam/permissions/{id}',\n operationId: 'iam.permissions.get',\n summary: 'Get permission',\n tags: ['iam', 'permissions'],\n })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamPermissionSchema.nullable())),\n create: route({\n method: 'POST',\n path: '/iam/permissions',\n operationId: 'iam.permissions.create',\n summary: 'Create permission',\n tags: ['iam', 'permissions'],\n })\n .input(IamCreatePermissionInputSchema)\n .output(haiResultSchema(IamPermissionSchema)),\n delete: route({\n method: 'DELETE',\n path: '/iam/permissions/{id}',\n operationId: 'iam.permissions.delete',\n summary: 'Delete permission',\n tags: ['iam', 'permissions'],\n })\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"]}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { PaginationQuerySchema, paginatedSchema } from './chunk-CCCPHO6X.js';
|
|
2
|
+
import { route, haiResultSchema, HaiVoidResultSchema } from './chunk-5LBEMLDK.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
|
|
5
|
+
var MiB = 1024 * 1024;
|
|
6
|
+
var FeedbackBudgetSchema = z.object({
|
|
7
|
+
maxTotalBytes: z.number().int().min(4 * MiB).max(40 * MiB),
|
|
8
|
+
maxAttachmentBytes: z.number().int().positive().max(5 * MiB),
|
|
9
|
+
maxAttachmentsBytes: z.number().int().positive(),
|
|
10
|
+
maxAttachmentCount: z.number().int().min(1).max(20),
|
|
11
|
+
maxEvidenceBytes: z.number().int().positive().max(4 * MiB),
|
|
12
|
+
maxEvidenceCount: z.number().int().min(1).max(2e3),
|
|
13
|
+
maxTransportBytes: z.number().int().positive().max(64 * MiB)
|
|
14
|
+
});
|
|
15
|
+
function resolveFeedbackBudget(input = {}) {
|
|
16
|
+
const maxTotalBytes = input.maxTotalBytes ?? 32 * MiB;
|
|
17
|
+
const maxEvidenceBytes = Math.min(input.maxEvidenceBytes ?? 4 * MiB, Math.floor(maxTotalBytes / 8));
|
|
18
|
+
const maxAttachmentsBytes = maxTotalBytes - 2 * maxEvidenceBytes - 2 * MiB;
|
|
19
|
+
return FeedbackBudgetSchema.parse({
|
|
20
|
+
maxTotalBytes,
|
|
21
|
+
maxEvidenceBytes,
|
|
22
|
+
maxAttachmentsBytes,
|
|
23
|
+
maxAttachmentBytes: Math.min(input.maxAttachmentBytes ?? 5 * MiB, maxAttachmentsBytes),
|
|
24
|
+
maxAttachmentCount: 20,
|
|
25
|
+
maxEvidenceCount: Math.min(input.maxEvidenceCount ?? 2e3, 2e3),
|
|
26
|
+
// 包下载也经过双向加密;不是仅按单个上传附件推导。
|
|
27
|
+
maxTransportBytes: 4 * Math.ceil(maxTotalBytes / 3) + 65536
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
var id = z.string().min(1).max(128);
|
|
31
|
+
var attachmentId = id.regex(/^[^\uD800-\uDFFF]*$/u);
|
|
32
|
+
var timestamp = z.number().int().nonnegative().safe();
|
|
33
|
+
var jsonObject = z.record(z.string(), z.json());
|
|
34
|
+
var FeedbackStatusSchema = z.enum(["pending", "handled"]);
|
|
35
|
+
var FeedbackCollectionStatusSchema = z.enum([
|
|
36
|
+
"collecting",
|
|
37
|
+
"complete",
|
|
38
|
+
"partial",
|
|
39
|
+
"failed"
|
|
40
|
+
]);
|
|
41
|
+
var FeedbackNotificationStatusSchema = z.enum([
|
|
42
|
+
"disabled",
|
|
43
|
+
"pending",
|
|
44
|
+
"sending",
|
|
45
|
+
"sent",
|
|
46
|
+
"deferred",
|
|
47
|
+
"failed"
|
|
48
|
+
]);
|
|
49
|
+
var FeedbackEvidenceInputSchema = z.strictObject({
|
|
50
|
+
id,
|
|
51
|
+
source: z.string().min(1).max(128),
|
|
52
|
+
sequence: z.number().int().nonnegative().safe(),
|
|
53
|
+
kind: z.enum([
|
|
54
|
+
"log",
|
|
55
|
+
"error",
|
|
56
|
+
"request",
|
|
57
|
+
"interaction",
|
|
58
|
+
"environment",
|
|
59
|
+
"snapshot",
|
|
60
|
+
"replay",
|
|
61
|
+
"business",
|
|
62
|
+
"missing"
|
|
63
|
+
]),
|
|
64
|
+
timestamp,
|
|
65
|
+
requestId: id.optional(),
|
|
66
|
+
errorId: id.optional(),
|
|
67
|
+
data: jsonObject,
|
|
68
|
+
missingReason: z.string().max(2e3).optional()
|
|
69
|
+
});
|
|
70
|
+
var FeedbackEvidenceSchema = FeedbackEvidenceInputSchema.extend({
|
|
71
|
+
feedbackId: id,
|
|
72
|
+
revision: z.number().int().min(1)
|
|
73
|
+
});
|
|
74
|
+
var FeedbackAttachmentInputSchema = z.strictObject({
|
|
75
|
+
id: attachmentId,
|
|
76
|
+
name: z.string().min(1).max(255),
|
|
77
|
+
contentType: z.string().min(1).max(128),
|
|
78
|
+
size: z.number().int().min(0).max(5 * 1024 * 1024),
|
|
79
|
+
checksum: z.string().regex(/^[a-f0-9]{64}$/)
|
|
80
|
+
});
|
|
81
|
+
var FeedbackAttachmentSchema = FeedbackAttachmentInputSchema.extend({
|
|
82
|
+
feedbackId: id,
|
|
83
|
+
status: z.enum(["pending", "available", "failed"]),
|
|
84
|
+
missingReason: z.string().max(2e3).optional()
|
|
85
|
+
});
|
|
86
|
+
var FeedbackSubmitInputSchema = z.strictObject({
|
|
87
|
+
submissionId: id,
|
|
88
|
+
appId: id,
|
|
89
|
+
description: z.string().max(1e4).optional(),
|
|
90
|
+
category: z.string().max(64).optional(),
|
|
91
|
+
contact: z.string().max(320).optional(),
|
|
92
|
+
url: z.string().max(2048).optional(),
|
|
93
|
+
appVersion: z.string().max(128).optional(),
|
|
94
|
+
buildId: z.string().max(128).optional(),
|
|
95
|
+
commit: z.string().max(128).optional(),
|
|
96
|
+
anchor: z.strictObject({
|
|
97
|
+
kind: z.enum(["error", "feedback"]),
|
|
98
|
+
timestamp,
|
|
99
|
+
errorId: id.optional()
|
|
100
|
+
}).optional(),
|
|
101
|
+
evidence: z.array(FeedbackEvidenceInputSchema).max(1e3).optional(),
|
|
102
|
+
attachments: z.array(FeedbackAttachmentInputSchema).max(20).optional()
|
|
103
|
+
});
|
|
104
|
+
var FeedbackReportSchema = z.object({
|
|
105
|
+
id,
|
|
106
|
+
number: z.string(),
|
|
107
|
+
appId: id,
|
|
108
|
+
scopeId: id,
|
|
109
|
+
userId: id,
|
|
110
|
+
status: FeedbackStatusSchema,
|
|
111
|
+
collectionStatus: FeedbackCollectionStatusSchema,
|
|
112
|
+
notificationStatus: FeedbackNotificationStatusSchema,
|
|
113
|
+
description: z.string().optional(),
|
|
114
|
+
summary: z.string().optional(),
|
|
115
|
+
category: z.string().optional(),
|
|
116
|
+
contact: z.string().optional(),
|
|
117
|
+
url: z.string().optional(),
|
|
118
|
+
appVersion: z.string().optional(),
|
|
119
|
+
buildId: z.string().optional(),
|
|
120
|
+
commit: z.string().optional(),
|
|
121
|
+
createdAt: timestamp,
|
|
122
|
+
updatedAt: timestamp,
|
|
123
|
+
version: z.number().int().min(1),
|
|
124
|
+
evidenceRevision: z.number().int().min(1)
|
|
125
|
+
});
|
|
126
|
+
var FeedbackListInputSchema = PaginationQuerySchema.extend({
|
|
127
|
+
sortDirection: z.enum(["asc", "desc"]).optional(),
|
|
128
|
+
status: FeedbackStatusSchema.optional(),
|
|
129
|
+
collectionStatus: FeedbackCollectionStatusSchema.optional(),
|
|
130
|
+
notificationStatus: FeedbackNotificationStatusSchema.optional(),
|
|
131
|
+
appId: id.optional(),
|
|
132
|
+
appVersion: z.string().max(128).optional(),
|
|
133
|
+
search: z.string().max(200).optional(),
|
|
134
|
+
from: z.coerce.number().int().nonnegative().safe().optional(),
|
|
135
|
+
to: z.coerce.number().int().nonnegative().safe().optional()
|
|
136
|
+
}).strict();
|
|
137
|
+
var FeedbackIdInputSchema = z.strictObject({ id });
|
|
138
|
+
var FeedbackEvidenceQuerySchema = PaginationQuerySchema.extend({
|
|
139
|
+
id,
|
|
140
|
+
source: z.string().max(128).optional(),
|
|
141
|
+
kind: FeedbackEvidenceInputSchema.shape.kind.optional(),
|
|
142
|
+
requestId: id.optional(),
|
|
143
|
+
errorId: id.optional(),
|
|
144
|
+
from: z.coerce.number().int().nonnegative().safe().optional(),
|
|
145
|
+
to: z.coerce.number().int().nonnegative().safe().optional()
|
|
146
|
+
}).strict();
|
|
147
|
+
var FeedbackSetStatusInputSchema = z.strictObject({
|
|
148
|
+
id,
|
|
149
|
+
status: FeedbackStatusSchema,
|
|
150
|
+
expectedVersion: z.number().int().min(1),
|
|
151
|
+
note: z.string().max(1e4).optional()
|
|
152
|
+
});
|
|
153
|
+
var FeedbackAppendEvidenceInputSchema = z.strictObject({
|
|
154
|
+
id,
|
|
155
|
+
evidence: z.array(FeedbackEvidenceInputSchema).max(1e3)
|
|
156
|
+
});
|
|
157
|
+
var FeedbackEvidenceAckSchema = z.object({
|
|
158
|
+
acknowledged: z.array(id),
|
|
159
|
+
evidenceRevision: z.number().int().min(1)
|
|
160
|
+
});
|
|
161
|
+
var FeedbackCompleteInputSchema = z.strictObject({
|
|
162
|
+
id,
|
|
163
|
+
missing: z.array(z.string().max(2e3)).max(100).optional()
|
|
164
|
+
});
|
|
165
|
+
var FeedbackRetryInputSchema = z.strictObject({
|
|
166
|
+
id,
|
|
167
|
+
target: z.enum([
|
|
168
|
+
"collect",
|
|
169
|
+
"notify",
|
|
170
|
+
"webhook",
|
|
171
|
+
"export",
|
|
172
|
+
"attachment"
|
|
173
|
+
]),
|
|
174
|
+
targetId: z.string().max(128).optional()
|
|
175
|
+
});
|
|
176
|
+
var FeedbackExportInputSchema = z.strictObject({
|
|
177
|
+
id,
|
|
178
|
+
evidenceRevision: z.number().int().min(1).optional()
|
|
179
|
+
});
|
|
180
|
+
var FeedbackExportQuerySchema = z.strictObject({ id, jobId: id });
|
|
181
|
+
var FeedbackJobSchema = z.object({
|
|
182
|
+
id,
|
|
183
|
+
feedbackId: id,
|
|
184
|
+
type: z.enum([
|
|
185
|
+
"collect",
|
|
186
|
+
"notify",
|
|
187
|
+
"webhook",
|
|
188
|
+
"export",
|
|
189
|
+
"cleanup"
|
|
190
|
+
]),
|
|
191
|
+
status: z.enum([
|
|
192
|
+
"pending",
|
|
193
|
+
"running",
|
|
194
|
+
"succeeded",
|
|
195
|
+
"failed"
|
|
196
|
+
]),
|
|
197
|
+
attempts: z.number().int().nonnegative(),
|
|
198
|
+
createdAt: timestamp,
|
|
199
|
+
updatedAt: timestamp,
|
|
200
|
+
nextRunAt: timestamp.optional(),
|
|
201
|
+
lastError: z.string().optional(),
|
|
202
|
+
result: jsonObject.optional()
|
|
203
|
+
});
|
|
204
|
+
var FeedbackHistorySchema = z.object({
|
|
205
|
+
id,
|
|
206
|
+
feedbackId: id,
|
|
207
|
+
userId: id,
|
|
208
|
+
from: FeedbackStatusSchema,
|
|
209
|
+
to: FeedbackStatusSchema,
|
|
210
|
+
timestamp,
|
|
211
|
+
note: z.string().optional()
|
|
212
|
+
});
|
|
213
|
+
var FeedbackDetailSchema = z.object({
|
|
214
|
+
report: FeedbackReportSchema,
|
|
215
|
+
attachments: z.array(FeedbackAttachmentSchema),
|
|
216
|
+
history: z.array(FeedbackHistorySchema),
|
|
217
|
+
jobs: z.array(FeedbackJobSchema)
|
|
218
|
+
});
|
|
219
|
+
var FeedbackUploadInputSchema = z.strictObject({
|
|
220
|
+
id,
|
|
221
|
+
attachmentId,
|
|
222
|
+
dataBase64: z.string().max(4 * Math.ceil(5 * 1024 * 1024 / 3)).refine((value) => value.length % 4 === 0 && /^[A-Z0-9+/]*={0,2}$/i.test(value))
|
|
223
|
+
});
|
|
224
|
+
var FeedbackAttachmentQuerySchema = z.strictObject({ id, attachmentId });
|
|
225
|
+
var FeedbackAttachmentDataSchema = z.object({
|
|
226
|
+
name: z.string(),
|
|
227
|
+
contentType: z.string(),
|
|
228
|
+
dataBase64: z.string()
|
|
229
|
+
});
|
|
230
|
+
var feedbackContract = {
|
|
231
|
+
reports: {
|
|
232
|
+
policy: route({
|
|
233
|
+
method: "GET",
|
|
234
|
+
path: "/feedback/policy",
|
|
235
|
+
operationId: "feedback.reports.policy",
|
|
236
|
+
summary: "Effective feedback capacity",
|
|
237
|
+
tags: ["feedback"]
|
|
238
|
+
}).input(z.object({})).output(haiResultSchema(FeedbackBudgetSchema)),
|
|
239
|
+
submit: route({
|
|
240
|
+
method: "POST",
|
|
241
|
+
path: "/feedback/reports",
|
|
242
|
+
operationId: "feedback.reports.submit",
|
|
243
|
+
summary: "submit feedback",
|
|
244
|
+
tags: ["feedback"]
|
|
245
|
+
}).input(FeedbackSubmitInputSchema).output(haiResultSchema(FeedbackReportSchema)),
|
|
246
|
+
list: route({
|
|
247
|
+
method: "GET",
|
|
248
|
+
path: "/feedback/reports",
|
|
249
|
+
operationId: "feedback.reports.list",
|
|
250
|
+
summary: "list feedback",
|
|
251
|
+
tags: ["feedback"]
|
|
252
|
+
}).input(FeedbackListInputSchema).output(haiResultSchema(paginatedSchema(FeedbackReportSchema))),
|
|
253
|
+
get: route({
|
|
254
|
+
method: "GET",
|
|
255
|
+
path: "/feedback/reports/{id}",
|
|
256
|
+
operationId: "feedback.reports.get",
|
|
257
|
+
summary: "get feedback",
|
|
258
|
+
tags: ["feedback"]
|
|
259
|
+
}).input(FeedbackIdInputSchema).output(haiResultSchema(FeedbackDetailSchema)),
|
|
260
|
+
getEvidence: route({
|
|
261
|
+
method: "GET",
|
|
262
|
+
path: "/feedback/reports/{id}/evidence",
|
|
263
|
+
operationId: "feedback.reports.getEvidence",
|
|
264
|
+
summary: "getEvidence feedback",
|
|
265
|
+
tags: ["feedback"]
|
|
266
|
+
}).input(FeedbackEvidenceQuerySchema).output(haiResultSchema(paginatedSchema(FeedbackEvidenceSchema))),
|
|
267
|
+
setStatus: route({
|
|
268
|
+
method: "PATCH",
|
|
269
|
+
path: "/feedback/reports/{id}/status",
|
|
270
|
+
operationId: "feedback.reports.setStatus",
|
|
271
|
+
summary: "setStatus feedback",
|
|
272
|
+
tags: ["feedback"]
|
|
273
|
+
}).input(FeedbackSetStatusInputSchema).output(haiResultSchema(FeedbackReportSchema)),
|
|
274
|
+
retry: route({
|
|
275
|
+
method: "POST",
|
|
276
|
+
path: "/feedback/reports/{id}/retry",
|
|
277
|
+
operationId: "feedback.reports.retry",
|
|
278
|
+
summary: "retry feedback",
|
|
279
|
+
tags: ["feedback"]
|
|
280
|
+
}).input(FeedbackRetryInputSchema).output(HaiVoidResultSchema),
|
|
281
|
+
export: route({
|
|
282
|
+
method: "POST",
|
|
283
|
+
path: "/feedback/reports/{id}/exports",
|
|
284
|
+
operationId: "feedback.reports.export",
|
|
285
|
+
summary: "export feedback",
|
|
286
|
+
tags: ["feedback"]
|
|
287
|
+
}).input(FeedbackExportInputSchema).output(haiResultSchema(FeedbackJobSchema)),
|
|
288
|
+
appendEvidence: route({
|
|
289
|
+
method: "POST",
|
|
290
|
+
path: "/feedback/reports/{id}/evidence",
|
|
291
|
+
operationId: "feedback.reports.appendEvidence",
|
|
292
|
+
summary: "appendEvidence feedback",
|
|
293
|
+
tags: ["feedback"]
|
|
294
|
+
}).input(FeedbackAppendEvidenceInputSchema).output(haiResultSchema(FeedbackEvidenceAckSchema)),
|
|
295
|
+
getExport: route({
|
|
296
|
+
method: "GET",
|
|
297
|
+
path: "/feedback/reports/{id}/exports/{jobId}",
|
|
298
|
+
operationId: "feedback.reports.getExport",
|
|
299
|
+
summary: "Download feedback export",
|
|
300
|
+
tags: ["feedback"]
|
|
301
|
+
}).input(FeedbackExportQuerySchema).output(haiResultSchema(FeedbackAttachmentDataSchema)),
|
|
302
|
+
completeCollection: route({
|
|
303
|
+
method: "POST",
|
|
304
|
+
path: "/feedback/reports/{id}/complete",
|
|
305
|
+
operationId: "feedback.reports.completeCollection",
|
|
306
|
+
summary: "completeCollection feedback",
|
|
307
|
+
tags: ["feedback"]
|
|
308
|
+
}).input(FeedbackCompleteInputSchema).output(haiResultSchema(FeedbackReportSchema))
|
|
309
|
+
},
|
|
310
|
+
attachments: {
|
|
311
|
+
upload: route({
|
|
312
|
+
method: "POST",
|
|
313
|
+
path: "/feedback/reports/{id}/attachments/{attachmentId}",
|
|
314
|
+
operationId: "feedback.attachments.upload",
|
|
315
|
+
summary: "Upload feedback attachment",
|
|
316
|
+
tags: ["feedback"]
|
|
317
|
+
}).input(FeedbackUploadInputSchema).output(haiResultSchema(FeedbackAttachmentSchema)),
|
|
318
|
+
get: route({
|
|
319
|
+
method: "GET",
|
|
320
|
+
path: "/feedback/reports/{id}/attachments/{attachmentId}",
|
|
321
|
+
operationId: "feedback.attachments.get",
|
|
322
|
+
summary: "Read feedback attachment",
|
|
323
|
+
tags: ["feedback"]
|
|
324
|
+
}).input(FeedbackAttachmentQuerySchema).output(haiResultSchema(FeedbackAttachmentDataSchema))
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
export { FeedbackAppendEvidenceInputSchema, FeedbackAttachmentDataSchema, FeedbackAttachmentInputSchema, FeedbackAttachmentQuerySchema, FeedbackAttachmentSchema, FeedbackBudgetSchema, FeedbackCollectionStatusSchema, FeedbackCompleteInputSchema, FeedbackDetailSchema, FeedbackEvidenceAckSchema, FeedbackEvidenceInputSchema, FeedbackEvidenceQuerySchema, FeedbackEvidenceSchema, FeedbackExportInputSchema, FeedbackExportQuerySchema, FeedbackHistorySchema, FeedbackIdInputSchema, FeedbackJobSchema, FeedbackListInputSchema, FeedbackNotificationStatusSchema, FeedbackReportSchema, FeedbackRetryInputSchema, FeedbackSetStatusInputSchema, FeedbackStatusSchema, FeedbackSubmitInputSchema, FeedbackUploadInputSchema, feedbackContract, resolveFeedbackBudget };
|
|
329
|
+
//# sourceMappingURL=chunk-VEUL2AEK.js.map
|
|
330
|
+
//# sourceMappingURL=chunk-VEUL2AEK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/feedback/feedback-budget.ts","../src/feedback/feedback-schemas.ts","../src/feedback/feedback-contract.ts"],"names":["z"],"mappings":"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","file":"chunk-VEUL2AEK.js","sourcesContent":["/** 反馈在采集、HTTP 和离线包之间共用的字节预算;总量按未压缩字节计算。 */\nimport { z } from 'zod'\n\nconst MiB = 1024 * 1024\n\n/**\n * 有效容量策略;只含公开上限,不暴露存储或通知配置。\n * @example\n * ```ts\n * import { FeedbackBudgetSchema, resolveFeedbackBudget } from '@h-ai/api-contract/feedback'\n * const budget = FeedbackBudgetSchema.parse(resolveFeedbackBudget())\n * ```\n */\nexport const FeedbackBudgetSchema = z.object({\n maxTotalBytes: z.number().int().min(4 * MiB).max(40 * MiB),\n maxAttachmentBytes: z.number().int().positive().max(5 * MiB),\n maxAttachmentsBytes: z.number().int().positive(),\n maxAttachmentCount: z.number().int().min(1).max(20),\n maxEvidenceBytes: z.number().int().positive().max(4 * MiB),\n maxEvidenceCount: z.number().int().min(1).max(2000),\n maxTransportBytes: z.number().int().positive().max(64 * MiB),\n})\n\n/**\n * 由服务端公开的有效预算。\n * @example\n * ```ts\n * import { type FeedbackBudget, resolveFeedbackBudget } from '@h-ai/api-contract/feedback'\n * const budget: FeedbackBudget = resolveFeedbackBudget()\n * ```\n */\nexport type FeedbackBudget = z.infer<typeof FeedbackBudgetSchema>\n\n/**\n * 配置一次总容量,派生附件、双份证据和 JSON/Base64 传输上限;更小的旧单项限制仍生效。\n * @example\n * ```ts\n * import { resolveFeedbackBudget } from '@h-ai/api-contract/feedback'\n * const budget = resolveFeedbackBudget({ maxTotalBytes: 16 * 1024 * 1024 })\n * ```\n */\nexport function resolveFeedbackBudget(input: { maxTotalBytes?: number, maxAttachmentBytes?: number, maxEvidenceBytes?: number, maxEvidenceCount?: number } = {}): FeedbackBudget {\n const maxTotalBytes = input.maxTotalBytes ?? 32 * MiB\n const maxEvidenceBytes = Math.min(input.maxEvidenceBytes ?? 4 * MiB, Math.floor(maxTotalBytes / 8))\n // ZIP 中同时保存 timeline 和 records;另为修订字段、历史、摘要、查看器和目录预留 2 MiB。\n const maxAttachmentsBytes = maxTotalBytes - 2 * maxEvidenceBytes - 2 * MiB\n return FeedbackBudgetSchema.parse({\n maxTotalBytes,\n maxEvidenceBytes,\n maxAttachmentsBytes,\n maxAttachmentBytes: Math.min(input.maxAttachmentBytes ?? 5 * MiB, maxAttachmentsBytes),\n maxAttachmentCount: 20,\n maxEvidenceCount: Math.min(input.maxEvidenceCount ?? 2000, 2000),\n // 包下载也经过双向加密;不是仅按单个上传附件推导。\n maxTransportBytes: 4 * Math.ceil(maxTotalBytes / 3) + 65536,\n })\n}\n","/**\n * @h-ai/api-contract — 反馈的跨端数据契约。\n * 身份、租户、存储 key 和通知收件人只由可信服务端确定,不接受客户端覆盖。\n */\nimport { z } from 'zod'\nimport { PaginationQuerySchema } from '../common/pagination-schemas.js'\n\nconst id = z.string().min(1).max(128)\n// 附件标识须可无损编码为 Unicode;正常代理对(如 emoji)不受限。\nconst attachmentId = id.regex(/^[^\\uD800-\\uDFFF]*$/u)\nconst timestamp = z.number().int().nonnegative().safe()\nconst jsonObject = z.record(z.string(), z.json())\n\n/**\n * 反馈处理状态。\n * @example\n * ```ts\n * import { FeedbackStatusSchema } from '@h-ai/api-contract'\n * FeedbackStatusSchema.parse('pending')\n * ```\n */\nexport const FeedbackStatusSchema = z.enum(['pending', 'handled'])\n/**\n * 材料状态。\n * @example\n * ```ts\n * import { FeedbackCollectionStatusSchema } from '@h-ai/api-contract'\n * FeedbackCollectionStatusSchema.parse('collecting')\n * ```\n */\nexport const FeedbackCollectionStatusSchema = z.enum([\n 'collecting',\n 'complete',\n 'partial',\n 'failed',\n])\n/**\n * 通知状态,sent 仅表示邮件服务受理。\n * @example\n * ```ts\n * import { FeedbackNotificationStatusSchema } from '@h-ai/api-contract'\n * FeedbackNotificationStatusSchema.parse('pending')\n * ```\n */\nexport const FeedbackNotificationStatusSchema = z.enum([\n 'disabled',\n 'pending',\n 'sending',\n 'sent',\n 'deferred',\n 'failed',\n])\n\n/**\n * 单条有界、JSON 可序列化的诊断证据。\n * @example\n * ```ts\n * import { FeedbackEvidenceInputSchema } from '@h-ai/api-contract'\n * FeedbackEvidenceInputSchema.parse({ id: 'event-1', source: 'browser', sequence: 1, kind: 'log', timestamp: 1, data: { message: 'Failed' } })\n * ```\n */\nexport const FeedbackEvidenceInputSchema = z.strictObject({\n id,\n source: z.string().min(1).max(128),\n sequence: z.number().int().nonnegative().safe(),\n kind: z.enum([\n 'log',\n 'error',\n 'request',\n 'interaction',\n 'environment',\n 'snapshot',\n 'replay',\n 'business',\n 'missing',\n ]),\n timestamp,\n requestId: id.optional(),\n errorId: id.optional(),\n data: jsonObject,\n missingReason: z.string().max(2000).optional(),\n})\n/**\n * 已保存证据及所属修订。\n * @example\n * ```ts\n * import { FeedbackEvidenceSchema } from '@h-ai/api-contract'\n * FeedbackEvidenceSchema.parse({ id: 'event-1', feedbackId: 'report-1', revision: 1, source: 'browser', sequence: 1, kind: 'log', timestamp: 1, data: {} })\n * ```\n */\nexport const FeedbackEvidenceSchema = FeedbackEvidenceInputSchema.extend({\n feedbackId: id,\n revision: z.number().int().min(1),\n})\n\n/**\n * 附件声明,不含可指定的 S3 key。\n * @example\n * ```ts\n * import { FeedbackAttachmentInputSchema } from '@h-ai/api-contract'\n * FeedbackAttachmentInputSchema.parse({ id: 'image-1', name: 'screen.png', contentType: 'image/png', size: 4, checksum: '0'.repeat(64) })\n * ```\n */\nexport const FeedbackAttachmentInputSchema = z.strictObject({\n id: attachmentId,\n name: z.string().min(1).max(255),\n contentType: z.string().min(1).max(128),\n size: z.number().int().min(0).max(5 * 1024 * 1024),\n checksum: z.string().regex(/^[a-f0-9]{64}$/),\n})\n/**\n * 附件的受权元数据。\n * @example\n * ```ts\n * import { FeedbackAttachmentSchema } from '@h-ai/api-contract'\n * FeedbackAttachmentSchema.parse({ id: 'image-1', feedbackId: 'report-1', name: 'screen.png', contentType: 'image/png', size: 4, checksum: '0'.repeat(64), status: 'pending' })\n * ```\n */\nexport const FeedbackAttachmentSchema = FeedbackAttachmentInputSchema.extend({\n feedbackId: id,\n status: z.enum(['pending', 'available', 'failed']),\n missingReason: z.string().max(2000).optional(),\n})\n\n/**\n * 幂等反馈提交;所有补充输入均可选。\n * @example\n * ```ts\n * import { FeedbackSubmitInputSchema } from '@h-ai/api-contract'\n * FeedbackSubmitInputSchema.parse({ submissionId: 'submit-1', appId: 'orders' })\n * ```\n */\nexport const FeedbackSubmitInputSchema = z.strictObject({\n submissionId: id,\n appId: id,\n description: z.string().max(10000).optional(),\n category: z.string().max(64).optional(),\n contact: z.string().max(320).optional(),\n url: z.string().max(2048).optional(),\n appVersion: z.string().max(128).optional(),\n buildId: z.string().max(128).optional(),\n commit: z.string().max(128).optional(),\n anchor: z.strictObject({\n kind: z.enum(['error', 'feedback']),\n timestamp,\n errorId: id.optional(),\n }).optional(),\n evidence: z.array(FeedbackEvidenceInputSchema).max(1000).optional(),\n attachments: z.array(FeedbackAttachmentInputSchema).max(20).optional(),\n})\n\n/**\n * 反馈摘要,应用版本与乐观锁 version 分开。\n * @example\n * ```ts\n * import { FeedbackReportSchema } from '@h-ai/api-contract'\n * FeedbackReportSchema.parse({ id: 'report-1', number: 'FB-1', appId: 'orders', scopeId: 'tenant-1', userId: 'user-1', status: 'pending', collectionStatus: 'collecting', notificationStatus: 'pending', createdAt: 1, updatedAt: 1, version: 1, evidenceRevision: 1 })\n * ```\n */\nexport const FeedbackReportSchema = z.object({\n id,\n number: z.string(),\n appId: id,\n scopeId: id,\n userId: id,\n status: FeedbackStatusSchema,\n collectionStatus: FeedbackCollectionStatusSchema,\n notificationStatus: FeedbackNotificationStatusSchema,\n description: z.string().optional(),\n summary: z.string().optional(),\n category: z.string().optional(),\n contact: z.string().optional(),\n url: z.string().optional(),\n appVersion: z.string().optional(),\n buildId: z.string().optional(),\n commit: z.string().optional(),\n createdAt: timestamp,\n updatedAt: timestamp,\n version: z.number().int().min(1),\n evidenceRevision: z.number().int().min(1),\n})\n\n/**\n * 列表筛选和受限分页。\n * @example\n * ```ts\n * import { FeedbackListInputSchema } from '@h-ai/api-contract'\n * FeedbackListInputSchema.parse({ page: 1, pageSize: 20 })\n * ```\n */\nexport const FeedbackListInputSchema = PaginationQuerySchema.extend({\n sortDirection: z.enum(['asc', 'desc']).optional(),\n status: FeedbackStatusSchema.optional(),\n collectionStatus: FeedbackCollectionStatusSchema.optional(),\n notificationStatus: FeedbackNotificationStatusSchema.optional(),\n appId: id.optional(),\n appVersion: z.string().max(128).optional(),\n search: z.string().max(200).optional(),\n from: z.coerce.number().int().nonnegative().safe().optional(),\n to: z.coerce.number().int().nonnegative().safe().optional(),\n}).strict()\n/**\n * 受权记录定位。\n * @example\n * ```ts\n * import { FeedbackIdInputSchema } from '@h-ai/api-contract'\n * FeedbackIdInputSchema.parse({ id: 'report-1' })\n * ```\n */\nexport const FeedbackIdInputSchema = z.strictObject({ id })\n/**\n * 证据索引查询。\n * @example\n * ```ts\n * import { FeedbackEvidenceQuerySchema } from '@h-ai/api-contract'\n * FeedbackEvidenceQuerySchema.parse({ id: 'report-1', pageSize: 20 })\n * ```\n */\nexport const FeedbackEvidenceQuerySchema = PaginationQuerySchema.extend({\n id,\n source: z.string().max(128).optional(),\n kind: FeedbackEvidenceInputSchema.shape.kind.optional(),\n requestId: id.optional(),\n errorId: id.optional(),\n from: z.coerce.number().int().nonnegative().safe().optional(),\n to: z.coerce.number().int().nonnegative().safe().optional(),\n}).strict()\n/**\n * 状态更新必须携带已读版本。\n * @example\n * ```ts\n * import { FeedbackSetStatusInputSchema } from '@h-ai/api-contract'\n * FeedbackSetStatusInputSchema.parse({ id: 'report-1', status: 'handled', expectedVersion: 1 })\n * ```\n */\nexport const FeedbackSetStatusInputSchema = z.strictObject({\n id,\n status: FeedbackStatusSchema,\n expectedVersion: z.number().int().min(1),\n note: z.string().max(10000).optional(),\n})\n/**\n * 提交后补采分块,服务端按来源序号幂等确认。\n * @example\n * ```ts\n * import { FeedbackAppendEvidenceInputSchema } from '@h-ai/api-contract'\n * FeedbackAppendEvidenceInputSchema.parse({ id: 'report-1', evidence: [] })\n * ```\n */\nexport const FeedbackAppendEvidenceInputSchema = z.strictObject({\n id,\n evidence: z.array(FeedbackEvidenceInputSchema).max(1000),\n})\n/**\n * 已可靠入库的证据确认。\n * @example\n * ```ts\n * import { FeedbackEvidenceAckSchema } from '@h-ai/api-contract'\n * FeedbackEvidenceAckSchema.parse({ acknowledged: ['event-1'], evidenceRevision: 1 })\n * ```\n */\nexport const FeedbackEvidenceAckSchema = z.object({\n acknowledged: z.array(id),\n evidenceRevision: z.number().int().min(1),\n})\n/**\n * 采集结束或部分缺失。\n * @example\n * ```ts\n * import { FeedbackCompleteInputSchema } from '@h-ai/api-contract'\n * FeedbackCompleteInputSchema.parse({ id: 'report-1', missing: [] })\n * ```\n */\nexport const FeedbackCompleteInputSchema = z.strictObject({\n id,\n missing: z.array(z.string().max(2000)).max(100).optional(),\n})\n/**\n * 按任务类别重试。\n * @example\n * ```ts\n * import { FeedbackRetryInputSchema } from '@h-ai/api-contract'\n * FeedbackRetryInputSchema.parse({ id: 'report-1', target: 'notify' })\n * ```\n */\nexport const FeedbackRetryInputSchema = z.strictObject({\n id,\n target: z.enum([\n 'collect',\n 'notify',\n 'webhook',\n 'export',\n 'attachment',\n ]),\n targetId: z.string().max(128).optional(),\n})\n/**\n * 固定证据修订的导出请求。\n * @example\n * ```ts\n * import { FeedbackExportInputSchema } from '@h-ai/api-contract'\n * FeedbackExportInputSchema.parse({ id: 'report-1' })\n * ```\n */\nexport const FeedbackExportInputSchema = z.strictObject({\n id,\n evidenceRevision: z.number().int().min(1).optional(),\n})\n/**\n * 已生成问题包的受权下载定位。\n * @example\n * ```ts\n * import { FeedbackExportQuerySchema } from '@h-ai/api-contract'\n * FeedbackExportQuerySchema.parse({ id: 'report-1', jobId: 'job-1' })\n * ```\n */\nexport const FeedbackExportQuerySchema = z.strictObject({ id, jobId: id })\n\n/**\n * 后台任务的安全状态,不暴露邮件正文、租约和存储 key。\n * @example\n * ```ts\n * import { FeedbackJobSchema } from '@h-ai/api-contract'\n * FeedbackJobSchema.parse({ id: 'job-1', feedbackId: 'report-1', type: 'export', status: 'pending', attempts: 0, createdAt: 1, updatedAt: 1 })\n * ```\n */\nexport const FeedbackJobSchema = z.object({\n id,\n feedbackId: id,\n type: z.enum([\n 'collect',\n 'notify',\n 'webhook',\n 'export',\n 'cleanup',\n ]),\n status: z.enum([\n 'pending',\n 'running',\n 'succeeded',\n 'failed',\n ]),\n attempts: z.number().int().nonnegative(),\n createdAt: timestamp,\n updatedAt: timestamp,\n nextRunAt: timestamp.optional(),\n lastError: z.string().optional(),\n result: jsonObject.optional(),\n})\n/**\n * 处理变更历史。\n * @example\n * ```ts\n * import { FeedbackHistorySchema } from '@h-ai/api-contract'\n * FeedbackHistorySchema.parse({ id: 'history-1', feedbackId: 'report-1', userId: 'user-1', from: 'pending', to: 'handled', timestamp: 1 })\n * ```\n */\nexport const FeedbackHistorySchema = z.object({\n id,\n feedbackId: id,\n userId: id,\n from: FeedbackStatusSchema,\n to: FeedbackStatusSchema,\n timestamp,\n note: z.string().optional(),\n})\n/**\n * 详情按需加载,完整日志通过单独分页接口查询。\n * @example\n * ```ts\n * import type { FeedbackDetail } from '@h-ai/api-contract'\n * function numberOfAttachments(detail: FeedbackDetail) { return detail.attachments.length }\n * ```\n */\nexport const FeedbackDetailSchema = z.object({\n report: FeedbackReportSchema,\n attachments: z.array(FeedbackAttachmentSchema),\n history: z.array(FeedbackHistorySchema),\n jobs: z.array(FeedbackJobSchema),\n})\n/**\n * 有界附件上传,解码前后均须检查长度和 checksum。\n * @example\n * ```ts\n * import { FeedbackUploadInputSchema } from '@h-ai/api-contract'\n * FeedbackUploadInputSchema.parse({ id: 'report-1', attachmentId: 'image-1', dataBase64: 'iVBORw==' })\n * ```\n */\nexport const FeedbackUploadInputSchema = z.strictObject({\n id,\n attachmentId,\n dataBase64: z.string().max(4 * Math.ceil(5 * 1024 * 1024 / 3)).refine(value => value.length % 4 === 0 && /^[A-Z0-9+/]*={0,2}$/i.test(value)),\n})\n/**\n * 附件受权读取定位。\n * @example\n * ```ts\n * import { FeedbackAttachmentQuerySchema } from '@h-ai/api-contract'\n * FeedbackAttachmentQuerySchema.parse({ id: 'report-1', attachmentId: 'image-1' })\n * ```\n */\nexport const FeedbackAttachmentQuerySchema = z.strictObject({ id, attachmentId })\n/**\n * 受权附件内容,不暴露 S3 凭据或公网链接。\n * @example\n * ```ts\n * import { FeedbackAttachmentDataSchema } from '@h-ai/api-contract'\n * FeedbackAttachmentDataSchema.parse({ name: 'screen.png', contentType: 'image/png', dataBase64: 'iVBORw==' })\n * ```\n */\nexport const FeedbackAttachmentDataSchema = z.object({\n name: z.string(),\n contentType: z.string(),\n dataBase64: z.string(),\n})\n\n/**\n * FeedbackStatus 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackStatus } from '@h-ai/api-contract'\n * const value: FeedbackStatus = 'pending'\n * ```\n */\nexport type FeedbackStatus = z.infer<typeof FeedbackStatusSchema>\n/**\n * FeedbackCollectionStatus 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackCollectionStatus } from '@h-ai/api-contract'\n * const value: FeedbackCollectionStatus = 'collecting'\n * ```\n */\nexport type FeedbackCollectionStatus = z.infer<typeof FeedbackCollectionStatusSchema>\n/**\n * FeedbackNotificationStatus 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackNotificationStatus } from '@h-ai/api-contract'\n * const value: FeedbackNotificationStatus = 'pending'\n * ```\n */\nexport type FeedbackNotificationStatus = z.infer<typeof FeedbackNotificationStatusSchema>\n/**\n * FeedbackEvidenceInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackEvidenceInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackEvidenceInput) { return value.id }\n * ```\n */\nexport type FeedbackEvidenceInput = z.infer<typeof FeedbackEvidenceInputSchema>\n/**\n * FeedbackEvidence 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackEvidence } from '@h-ai/api-contract'\n * function inspect(value: FeedbackEvidence) { return value.id }\n * ```\n */\nexport type FeedbackEvidence = z.infer<typeof FeedbackEvidenceSchema>\n/**\n * FeedbackAttachmentInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackAttachmentInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackAttachmentInput) { return value.id }\n * ```\n */\nexport type FeedbackAttachmentInput = z.infer<typeof FeedbackAttachmentInputSchema>\n/**\n * FeedbackAttachment 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackAttachment } from '@h-ai/api-contract'\n * function inspect(value: FeedbackAttachment) { return value.id }\n * ```\n */\nexport type FeedbackAttachment = z.infer<typeof FeedbackAttachmentSchema>\n/**\n * FeedbackSubmitInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackSubmitInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackSubmitInput) { return value.submissionId }\n * ```\n */\nexport type FeedbackSubmitInput = z.infer<typeof FeedbackSubmitInputSchema>\n/**\n * FeedbackReport 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackReport } from '@h-ai/api-contract'\n * function inspect(value: FeedbackReport) { return value.id }\n * ```\n */\nexport type FeedbackReport = z.infer<typeof FeedbackReportSchema>\n/**\n * FeedbackListInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackListInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackListInput) { return value.pageSize }\n * ```\n */\nexport type FeedbackListInput = z.infer<typeof FeedbackListInputSchema>\n/**\n * FeedbackEvidenceQuery 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackEvidenceQuery } from '@h-ai/api-contract'\n * function inspect(value: FeedbackEvidenceQuery) { return value.id }\n * ```\n */\nexport type FeedbackEvidenceQuery = z.infer<typeof FeedbackEvidenceQuerySchema>\n/**\n * FeedbackSetStatusInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackSetStatusInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackSetStatusInput) { return value.id }\n * ```\n */\nexport type FeedbackSetStatusInput = z.infer<typeof FeedbackSetStatusInputSchema>\n/**\n * FeedbackAppendEvidenceInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackAppendEvidenceInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackAppendEvidenceInput) { return value.id }\n * ```\n */\nexport type FeedbackAppendEvidenceInput = z.infer<typeof FeedbackAppendEvidenceInputSchema>\n/**\n * FeedbackEvidenceAck 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackEvidenceAck } from '@h-ai/api-contract'\n * function inspect(value: FeedbackEvidenceAck) { return value.acknowledged.length }\n * ```\n */\nexport type FeedbackEvidenceAck = z.infer<typeof FeedbackEvidenceAckSchema>\n/**\n * FeedbackCompleteInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackCompleteInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackCompleteInput) { return value.id }\n * ```\n */\nexport type FeedbackCompleteInput = z.infer<typeof FeedbackCompleteInputSchema>\n/**\n * FeedbackRetryInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackRetryInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackRetryInput) { return value.id }\n * ```\n */\nexport type FeedbackRetryInput = z.infer<typeof FeedbackRetryInputSchema>\n/**\n * FeedbackExportInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackExportInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackExportInput) { return value.id }\n * ```\n */\nexport type FeedbackExportInput = z.infer<typeof FeedbackExportInputSchema>\n/**\n * FeedbackJob 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackJob } from '@h-ai/api-contract'\n * function inspect(value: FeedbackJob) { return value.id }\n * ```\n */\nexport type FeedbackJob = z.infer<typeof FeedbackJobSchema>\n/**\n * FeedbackHistory 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackHistory } from '@h-ai/api-contract'\n * function inspect(value: FeedbackHistory) { return value.id }\n * ```\n */\nexport type FeedbackHistory = z.infer<typeof FeedbackHistorySchema>\n/**\n * FeedbackDetail 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackDetail } from '@h-ai/api-contract'\n * function inspect(value: FeedbackDetail) { return value.report.number }\n * ```\n */\nexport type FeedbackDetail = z.infer<typeof FeedbackDetailSchema>\n/**\n * FeedbackUploadInput 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackUploadInput } from '@h-ai/api-contract'\n * function inspect(value: FeedbackUploadInput) { return value.id }\n * ```\n */\nexport type FeedbackUploadInput = z.infer<typeof FeedbackUploadInputSchema>\n/**\n * FeedbackAttachmentData 的共享类型,由对应 schema 推导。\n * @example\n * ```ts\n * import type { FeedbackAttachmentData } from '@h-ai/api-contract'\n * function inspect(value: FeedbackAttachmentData) { return value.contentType }\n * ```\n */\nexport type FeedbackAttachmentData = z.infer<typeof FeedbackAttachmentDataSchema>\n","import { z } from 'zod'\n/** @h-ai/api-contract — 反馈的受权 HTTP 契约。 */\nimport { paginatedSchema } from '../common/pagination-schemas.js'\nimport { haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport { FeedbackBudgetSchema } from './feedback-budget.js'\nimport {\n FeedbackAppendEvidenceInputSchema,\n FeedbackAttachmentDataSchema,\n FeedbackAttachmentQuerySchema,\n FeedbackAttachmentSchema,\n FeedbackCompleteInputSchema,\n FeedbackDetailSchema,\n FeedbackEvidenceAckSchema,\n FeedbackEvidenceQuerySchema,\n FeedbackEvidenceSchema,\n FeedbackExportInputSchema,\n FeedbackExportQuerySchema,\n FeedbackIdInputSchema,\n FeedbackJobSchema,\n FeedbackListInputSchema,\n FeedbackReportSchema,\n FeedbackRetryInputSchema,\n FeedbackSetStatusInputSchema,\n FeedbackSubmitInputSchema,\n FeedbackUploadInputSchema,\n} from './feedback-schemas.js'\n\n/**\n * 反馈契约,宿主自行决定是否挂载。\n * @example\n * ```ts\n * import { apiContract } from '@h-ai/api-contract'\n * const contract = apiContract.create({ feedback: apiContract.feedback })\n * const path = apiContract.pathOf(contract.feedback.reports.submit)\n * ```\n */\nexport const feedbackContract = {\n reports: {\n policy: route({\n method: 'GET',\n path: '/feedback/policy',\n operationId: 'feedback.reports.policy',\n summary: 'Effective feedback capacity',\n tags: ['feedback'],\n })\n .input(z.object({}))\n .output(haiResultSchema(FeedbackBudgetSchema)),\n submit: route({\n method: 'POST',\n path: '/feedback/reports',\n operationId: 'feedback.reports.submit',\n summary: 'submit feedback',\n tags: ['feedback'],\n })\n .input(FeedbackSubmitInputSchema)\n .output(haiResultSchema(FeedbackReportSchema)),\n list: route({\n method: 'GET',\n path: '/feedback/reports',\n operationId: 'feedback.reports.list',\n summary: 'list feedback',\n tags: ['feedback'],\n })\n .input(FeedbackListInputSchema)\n .output(haiResultSchema(paginatedSchema(FeedbackReportSchema))),\n get: route({\n method: 'GET',\n path: '/feedback/reports/{id}',\n operationId: 'feedback.reports.get',\n summary: 'get feedback',\n tags: ['feedback'],\n })\n .input(FeedbackIdInputSchema)\n .output(haiResultSchema(FeedbackDetailSchema)),\n getEvidence: route({\n method: 'GET',\n path: '/feedback/reports/{id}/evidence',\n operationId: 'feedback.reports.getEvidence',\n summary: 'getEvidence feedback',\n tags: ['feedback'],\n })\n .input(FeedbackEvidenceQuerySchema)\n .output(haiResultSchema(paginatedSchema(FeedbackEvidenceSchema))),\n setStatus: route({\n method: 'PATCH',\n path: '/feedback/reports/{id}/status',\n operationId: 'feedback.reports.setStatus',\n summary: 'setStatus feedback',\n tags: ['feedback'],\n })\n .input(FeedbackSetStatusInputSchema)\n .output(haiResultSchema(FeedbackReportSchema)),\n retry: route({\n method: 'POST',\n path: '/feedback/reports/{id}/retry',\n operationId: 'feedback.reports.retry',\n summary: 'retry feedback',\n tags: ['feedback'],\n })\n .input(FeedbackRetryInputSchema)\n .output(HaiVoidResultSchema),\n export: route({\n method: 'POST',\n path: '/feedback/reports/{id}/exports',\n operationId: 'feedback.reports.export',\n summary: 'export feedback',\n tags: ['feedback'],\n })\n .input(FeedbackExportInputSchema)\n .output(haiResultSchema(FeedbackJobSchema)),\n appendEvidence: route({\n method: 'POST',\n path: '/feedback/reports/{id}/evidence',\n operationId: 'feedback.reports.appendEvidence',\n summary: 'appendEvidence feedback',\n tags: ['feedback'],\n })\n .input(FeedbackAppendEvidenceInputSchema)\n .output(haiResultSchema(FeedbackEvidenceAckSchema)),\n getExport: route({\n method: 'GET',\n path: '/feedback/reports/{id}/exports/{jobId}',\n operationId: 'feedback.reports.getExport',\n summary: 'Download feedback export',\n tags: ['feedback'],\n })\n .input(FeedbackExportQuerySchema)\n .output(haiResultSchema(FeedbackAttachmentDataSchema)),\n completeCollection: route({\n method: 'POST',\n path: '/feedback/reports/{id}/complete',\n operationId: 'feedback.reports.completeCollection',\n summary: 'completeCollection feedback',\n tags: ['feedback'],\n })\n .input(FeedbackCompleteInputSchema)\n .output(haiResultSchema(FeedbackReportSchema)),\n },\n attachments: {\n upload: route({\n method: 'POST',\n path: '/feedback/reports/{id}/attachments/{attachmentId}',\n operationId: 'feedback.attachments.upload',\n summary: 'Upload feedback attachment',\n tags: ['feedback'],\n })\n .input(FeedbackUploadInputSchema)\n .output(haiResultSchema(FeedbackAttachmentSchema)),\n get: route({\n method: 'GET',\n path: '/feedback/reports/{id}/attachments/{attachmentId}',\n operationId: 'feedback.attachments.get',\n summary: 'Read feedback attachment',\n tags: ['feedback'],\n })\n .input(FeedbackAttachmentQuerySchema)\n .output(haiResultSchema(FeedbackAttachmentDataSchema)),\n },\n}\n\n/**\n * 反馈 typed client 的契约类型。\n * @example\n * ```ts\n * import type { FeedbackContract } from '@h-ai/api-contract'\n * import { apiContract } from '@h-ai/api-contract'\n * const contract: FeedbackContract = apiContract.feedback\n * ```\n */\nexport type FeedbackContract = typeof feedbackContract\n"]}
|