@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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@h-ai/api-contract",
3
3
  "type": "module",
4
- "version": "0.1.0-alpha.66",
4
+ "version": "0.1.0-alpha.68",
5
5
  "description": "Hai Framework public API contracts powered by oRPC and Zod.",
6
6
  "license": "Apache-2.0",
7
7
  "exports": {
@@ -39,7 +39,8 @@
39
39
  "node": "^22.22.2 || ^24.15.0 || >=26.0.0"
40
40
  },
41
41
  "dependencies": {
42
- "@h-ai/core": "0.1.0-alpha.66",
42
+ "@h-ai/core": "0.1.0-alpha.68",
43
+ "@h-ai/storage": "0.1.0-alpha.68",
43
44
  "@orpc/contract": "^1.15.5",
44
45
  "zod": "^4.6.5"
45
46
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/storage/storage-schemas.ts","../src/storage/storage-contract.ts"],"names":[],"mappings":"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","file":"chunk-3QSKWVLP.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 { z } from 'zod'\n\n/** 文件元数据 Schema。 */\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/** 获取下载签名 URL 入参 Schema。 */\nexport const StoragePresignDownloadInputSchema = z.object({\n key: z.string().min(1),\n expiresIn: z.number().int().min(1).optional(),\n})\n\n/** 获取上传签名 URL 入参 Schema。 */\nexport const StoragePresignUploadInputSchema = z.object({\n key: z.string().min(1),\n contentType: z.string().optional(),\n contentLength: z.number().int().min(1).optional(),\n expiresIn: z.number().int().min(1).optional(),\n})\n\n/** 签名 URL 业务数据 Schema。 */\nexport const StoragePresignedUrlSchema = z.object({\n url: z.string(),\n key: z.string(),\n expiresAt: z.coerce.date().optional(),\n})\n\n/** 文件列表查询入参 Schema。 */\nexport const StorageListFilesInputSchema = z.object({\n prefix: z.string().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/** 文件列表业务数据 Schema。 */\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/** 单文件操作入参 Schema。 */\nexport const StorageFileKeyInputSchema = z.object({\n key: z.string().min(1),\n})\n\n/** 批量删除文件入参 Schema。 */\nexport const StorageDeleteFilesInputSchema = z.object({\n keys: z.array(z.string().min(1)).min(1),\n})\n\nexport type StoragePresignDownloadInput = z.infer<typeof StoragePresignDownloadInputSchema>\nexport type StoragePresignUploadInput = z.infer<typeof StoragePresignUploadInputSchema>\nexport type StoragePresignedUrlOutput = HaiResult<z.infer<typeof StoragePresignedUrlSchema>>\nexport type StorageListFilesInput = z.infer<typeof StorageListFilesInputSchema>\nexport type StorageFileKeyInput = z.infer<typeof StorageFileKeyInputSchema>\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 * @module storage-contract\n */\n\nimport { haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n StorageDeleteFilesInputSchema,\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/** Storage 领域 oRPC contract。 */\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(HaiVoidResultSchema),\n },\n}\n\nexport type StorageContract = typeof storageContract\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/result-schemas.ts","../src/common/route.ts"],"names":[],"mappings":";;;;AAeO,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;AAaM,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;AAGO,IAAM,mBAAA,GAAsB,eAAA,CAAgB,CAAA,CAAE,IAAA,EAAM;ACxCpD,IAAM,QAAyB,CAAA,GAAI,IAAA,KAAS,EAAA,CAAG,KAAA,CAAM,GAAG,IAAI;AAW5D,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-CUU2F6YD.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 */\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 *\n * @example\n * ```ts\n * const OutputSchema = haiResultSchema(z.object({ id: z.string() }))\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/** 无内容成功响应 Schema。 */\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/** 创建 oRPC contract 路由节点。 */\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 */\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/payment/payment-schemas.ts","../src/payment/payment-contract.ts"],"names":["z"],"mappings":";;;AAIO,IAAM,wBAAwB,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAC;AAGnE,IAAM,sBAAA,GAAyB,EAAE,IAAA,CAAK,CAAC,SAAS,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,cAAc,CAAC;AAGtF,IAAM,6BAAA,GAAgC,EAAE,MAAA,CAAO;AAAA,EACpD,QAAA,EAAU,qBAAA;AAAA,EACV,QAAQ,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,IAAI,CAAC,CAAA;AAAA,EAC9B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,SAAA,EAAW,sBAAA;AAAA,EACX,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA;AAC7C,CAAC;AAGM,IAAM,4BAAA,GAA+B,EAAE,MAAA,CAAO;AAAA,EACnD,QAAA,EAAU,qBAAA;AAAA,EACV,SAAA,EAAW,sBAAA;AAAA,EACX,YAAA,EAAc,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,SAAS,CAAA;AAAA,EAC9C,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAGM,IAAM,4BAAA,GAA+B,EAAE,MAAA,CAAO;AAAA,EACnD,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAC3B,CAAC;AAGM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,WAAW,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EAClE,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA;AAAA,EAEjB,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,QAAA,GAAW,QAAA;AAC3B,CAAC;AAGM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,QAAA,EAAU,qBAAA;AAAA,EACV,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,QAAQ,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,IAAI,CAAC,CAAA;AAAA,EAC9B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACrB,CAAC;AAGM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,YAAA,EAAc,SAAA,EAAW,QAAQ,CAAC;AACpD,CAAC;AAGM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAAS,EAAE,MAAA;AACb,CAAC;AAGM,IAAM,6BAAA,GAAgC,EAAE,MAAA,CAAO;AAAA,EACpD,QAAA,EAAU,EAAE,OAAA;AACd,CAAC;ACnDD,IAAM,iBAAA,GAAoBA,EAAE,OAAA,EAAQ;AAEpC,IAAM,yBAAA,GAA4B,gBAAgB,0BAA0B,CAAA;AAGrE,IAAM,eAAA,GAAkB;AAAA,EAC7B,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,iBAAA,EAAmB,WAAA,EAAa,uBAAA,EAAyB,OAAA,EAAS,sBAAA,EAAwB,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ,CAAA,EAAG,CAAA,CAC1J,KAAA,CAAM,6BAA6B,CAAA,CACnC,MAAA,CAAO,eAAA,CAAgB,4BAA4B,CAAC,CAAA;AAAA,IACvD,GAAA,EAAK,KAAA,CAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAM,2BAAA,EAA6B,WAAA,EAAa,oBAAA,EAAsB,OAAA,EAAS,mBAAA,EAAqB,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ,CAAA,EAAG,CAAA,CAC1J,KAAA,CAAM,4BAA4B,CAAA,CAClC,MAAA,CAAO,eAAA,CAAgB,kBAAkB,CAAC,CAAA;AAAA,IAC7C,MAAA,EAAQ,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,mCAAA,EAAqC,WAAA,EAAa,uBAAA,EAAyB,OAAA,EAAS,sBAAA,EAAwB,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ,CAAA,EAAG,CAAA,CAC5K,KAAA,CAAM,wBAAwB,CAAA,CAC9B,MAAA,CAAO,eAAA,CAAgB,uBAAuB,CAAC;AAAA,GACpD;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,+BAAA,EAAiC,WAAA,EAAa,8BAAA,EAAgC,OAAA,EAAS,oCAAA,EAAsC,MAAM,CAAC,SAAA,EAAW,eAAe,CAAA,EAAG,EACpM,KAAA,CAAM,iBAAiB,CAAA,CACvB,MAAA,CAAO,yBAAyB,CAAA;AAAA,IACnC,MAAA,EAAQ,MAAM,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,+BAAA,EAAiC,WAAA,EAAa,8BAAA,EAAgC,OAAA,EAAS,oCAAA,EAAsC,MAAM,CAAC,SAAA,EAAW,eAAe,CAAA,EAAG,EACpM,KAAA,CAAM,iBAAiB,CAAA,CACvB,MAAA,CAAO,yBAAyB,CAAA;AAAA,IACnC,MAAA,EAAQ,KAAA,CAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,+BAAA,EAAiC,WAAA,EAAa,8BAAA,EAAgC,OAAA,EAAS,oCAAA,EAAsC,IAAA,EAAM,CAAC,SAAA,EAAW,eAAe,CAAA,EAAG,CAAA,CACpM,KAAA,CAAM,iBAAiB,CAAA,CACvB,MAAA,CAAO,eAAA,CAAgB,6BAA6B,CAAC;AAAA;AAE5D","file":"chunk-JIQINMLG.js","sourcesContent":["import type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\n\n/** 支付渠道 Schema。 */\nexport const PaymentProviderSchema = z.enum(['wechat', 'alipay', 'stripe'])\n\n/** 支付交易类型 Schema。 */\nexport const PaymentTradeTypeSchema = z.enum(['jsapi', 'h5', 'app', 'native', 'mini_program'])\n\n/** 创建支付订单入参 Schema。 */\nexport const PaymentCreateOrderInputSchema = z.object({\n provider: PaymentProviderSchema,\n amount: z.number().int().min(1),\n description: z.string().min(1),\n tradeType: PaymentTradeTypeSchema,\n userId: z.string().optional(),\n metadata: z.record(z.string(), z.string()).optional(),\n})\n\n/** 创建支付订单业务数据 Schema。 */\nexport const PaymentCreateOrderDataSchema = z.object({\n provider: PaymentProviderSchema,\n tradeType: PaymentTradeTypeSchema,\n clientParams: z.record(z.string(), z.unknown()),\n prepayId: z.string().optional(),\n})\n\n/** 查询支付订单入参 Schema。 */\nexport const PaymentQueryOrderInputSchema = z.object({\n orderNo: z.string().min(1),\n})\n\n/** 支付订单业务数据 Schema。 */\nexport const PaymentOrderSchema = z.object({\n orderNo: z.string(),\n transactionId: z.string().optional(),\n status: z.enum(['pending', 'paid', 'closed', 'refunded', 'failed']),\n amount: z.number(),\n // ISO 8601 时间戳(例如 `2024-01-02T03:04:05.000Z`),由服务端以 `Date#toISOString()` 序列化。\n paidAt: z.iso.datetime().optional(),\n})\n\n/** 退款入参 Schema。 */\nexport const PaymentRefundInputSchema = z.object({\n provider: PaymentProviderSchema,\n orderNo: z.string(),\n refundNo: z.string(),\n amount: z.number().int().min(1),\n reason: z.string().optional(),\n})\n\n/** 退款业务数据 Schema。 */\nexport const PaymentRefundDataSchema = z.object({\n refundNo: z.string(),\n refundId: z.string(),\n status: z.enum(['processing', 'success', 'failed']),\n})\n\n/** 微信/支付宝通知响应 Schema。 */\nexport const PaymentNotifyMessageSchema = z.object({\n code: z.string(),\n message: z.string(),\n})\n\n/** Stripe 通知响应 Schema。 */\nexport const PaymentStripeNotifyDataSchema = z.object({\n received: z.boolean(),\n})\n\nexport type PaymentCreateOrderInput = z.infer<typeof PaymentCreateOrderInputSchema>\nexport type PaymentCreateOrderOutput = HaiResult<z.infer<typeof PaymentCreateOrderDataSchema>>\nexport type PaymentRefundInput = z.infer<typeof PaymentRefundInputSchema>\n","import { z } from 'zod'\nimport { haiResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n PaymentCreateOrderDataSchema,\n PaymentCreateOrderInputSchema,\n PaymentNotifyMessageSchema,\n PaymentOrderSchema,\n PaymentQueryOrderInputSchema,\n PaymentRefundDataSchema,\n PaymentRefundInputSchema,\n PaymentStripeNotifyDataSchema,\n} from './payment-schemas.js'\n\n// Webhook 通知体由各支付渠道决定(且通常需要原始 raw body 校验签名),\n// 因此 contract 层只声明为 unknown,由 procedure 实现负责按渠道解析。\nconst WebhookBodySchema = z.unknown()\n// 微信与支付宝通知共享同一响应结构,仅在本 contract 内复用。\nconst notifyMessageOutputSchema = haiResultSchema(PaymentNotifyMessageSchema)\n\n/** Payment 领域 oRPC contract。 */\nexport const paymentContract = {\n orders: {\n create: route({ method: 'POST', path: '/payment/orders', operationId: 'payment.orders.create', summary: 'Create payment order', tags: ['payment', 'orders'] })\n .input(PaymentCreateOrderInputSchema)\n .output(haiResultSchema(PaymentCreateOrderDataSchema)),\n get: route({ method: 'GET', path: '/payment/orders/{orderNo}', operationId: 'payment.orders.get', summary: 'Get payment order', tags: ['payment', 'orders'] })\n .input(PaymentQueryOrderInputSchema)\n .output(haiResultSchema(PaymentOrderSchema)),\n refund: route({ method: 'POST', path: '/payment/orders/{orderNo}/refunds', operationId: 'payment.orders.refund', summary: 'Refund payment order', tags: ['payment', 'orders'] })\n .input(PaymentRefundInputSchema)\n .output(haiResultSchema(PaymentRefundDataSchema)),\n },\n notifications: {\n wechat: route({ method: 'POST', path: '/payment/notifications/wechat', operationId: 'payment.notifications.wechat', summary: 'Handle WeChat payment notification', tags: ['payment', 'notifications'] })\n .input(WebhookBodySchema)\n .output(notifyMessageOutputSchema),\n alipay: route({ method: 'POST', path: '/payment/notifications/alipay', operationId: 'payment.notifications.alipay', summary: 'Handle Alipay payment notification', tags: ['payment', 'notifications'] })\n .input(WebhookBodySchema)\n .output(notifyMessageOutputSchema),\n stripe: route({ method: 'POST', path: '/payment/notifications/stripe', operationId: 'payment.notifications.stripe', summary: 'Handle Stripe payment notification', tags: ['payment', 'notifications'] })\n .input(WebhookBodySchema)\n .output(haiResultSchema(PaymentStripeNotifyDataSchema)),\n },\n}\n\nexport type PaymentContract = typeof paymentContract\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/pagination-schemas.ts","../src/iam/iam-schemas.ts","../src/iam/iam-contract.ts"],"names":["z"],"mappings":"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","file":"chunk-RVSGP2GF.js","sourcesContent":["/**\n * @h-ai/api-contract — 分页 Schema\n *\n * 提供通用分页查询参数与分页结果封装,供各领域 contract 扩展复用。\n * @module pagination-schemas\n */\n\nimport { z } from 'zod'\n\n/**\n * 通用分页查询参数 Schema。\n *\n * 页码和页大小均为可选,由服务端提供合理默认值(page=1, pageSize=20)。\n * 支持字符串 coerce,适配 GET 请求 query string 场景。\n *\n * @example\n * ```ts\n * // 扩展为领域专属查询参数\n * const IamListUsersInputSchema = PaginationQuerySchema.extend({\n * search: z.string().optional(),\n * })\n * ```\n */\nexport const PaginationQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional(),\n pageSize: z.coerce.number().int().min(1).max(100).optional(),\n})\n\n/**\n * 创建分页结果 Schema。\n *\n * 生成标准分页响应结构 `{ items, total, page, pageSize }`,\n * 与 `@h-ai/reldb` 的 `PageResult<T>` 保持对齐。\n *\n * @param itemSchema - 分页项的 Zod Schema\n * @returns 包含 items/total/page/pageSize 的对象 Schema\n *\n * @example\n * ```ts\n * const listUsers = route({ method: 'GET', path: '/users' })\n * .output(haiResultSchema(paginatedSchema(IamUserSchema)))\n * // 解析结果形如:\n * // { success: true, data: { items: [...], total: 100, page: 1, pageSize: 20 } }\n * ```\n */\nexport function paginatedSchema<T extends z.ZodType>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n}\n","/**\n * @h-ai/api-contract — IAM 领域 Schema\n *\n * 包含用户、Token、角色、权限以及相关 input/data 的 Zod Schema 定义。\n * 一次性输出包装在 contract 中内联,仅保留跨接口、跨层复用的数据结构。\n * @module iam-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\nimport { PaginationQuerySchema } from '../common/pagination-schemas.js'\n\n/** 用户基础信息 Schema。 */\nexport const IamUserSchema = z.object({\n id: z.string(),\n username: z.string(),\n email: z.string().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n enabled: z.boolean(),\n emailVerified: z.boolean().optional(),\n phoneVerified: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** Token 对 Schema。 */\nexport const IamTokenPairSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string().optional(),\n expiresIn: z.number(),\n tokenType: z.literal('Bearer'),\n})\n\n/** 协议展示 Schema。 */\nexport const IamAgreementDisplaySchema = z.object({\n /** 配置中的 Markdown 原文由客户端安全渲染。 */\n userAgreementMarkdown: z.string().min(1).optional(),\n privacyPolicyMarkdown: z.string().min(1).optional(),\n userAgreementUrl: z.string().optional(),\n privacyPolicyUrl: z.string().optional(),\n showOnRegister: z.boolean(),\n showOnLogin: z.boolean(),\n})\n\n/** 登录结果业务数据 Schema。 */\nexport const IamAuthResultSchema = z.object({\n user: IamUserSchema,\n tokens: IamTokenPairSchema,\n roles: z.array(z.string()).default([]),\n permissions: z.array(z.string()).default([]),\n agreements: IamAgreementDisplaySchema.optional(),\n})\n\n/** 当前会话用户信息;包含服务端重新校验后的角色与权限快照。 */\nexport const IamCurrentUserSchema = IamUserSchema.extend({\n roles: z.array(z.string()),\n permissions: z.array(z.string()),\n})\n\n/** 密码登录入参 Schema。 */\nexport const IamLoginInputSchema = z.object({\n identifier: z.string().min(1),\n password: z.string().min(1),\n rememberMe: z.boolean().optional(),\n})\n\n/** LDAP 登录与密码找回入参。 */\nexport const IamLdapLoginInputSchema = z.object({ username: z.string().trim().min(1), password: z.string().min(1) })\nexport const IamRequestPasswordResetInputSchema = z.object({ identifier: z.string().trim().min(1) })\nexport const IamConfirmPasswordResetInputSchema = z.object({ token: z.string().min(1), newPassword: z.string().min(1) })\n\n/** 认证页面公开配置白名单,独立于服务端连接/凭据配置。 */\nexport const IamPublicConfigSchema = z.object({\n password: z.object({ minLength: z.number(), maxLength: z.number(), requireUppercase: z.boolean(), requireLowercase: z.boolean(), requireNumber: z.boolean(), requireSpecialChar: z.boolean(), expirationDays: z.number() }),\n register: z.object({ enabled: z.boolean() }),\n login: z.object({ password: z.boolean(), otp: z.boolean(), ldap: z.boolean(), email: z.boolean(), sms: z.boolean() }),\n passwordReset: z.object({ enabled: z.boolean(), mode: z.enum(['email', 'phone']) }),\n otp: z.object({ length: z.number(), resendInterval: z.number() }),\n agreements: IamAgreementDisplaySchema,\n ui: z.object({ variant: z.enum(['card', 'split']), title: z.string().optional(), subtitle: z.string().optional(), brandTitle: z.string().optional(), brandText: z.string().optional(), logoUrl: z.string().optional(), illustrationUrl: z.string().optional() }),\n session: z.object({ maxAge: z.number() }),\n})\n\n/** OTP 登录入参 Schema。 */\nexport const IamOtpLoginInputSchema = z.object({\n identifier: z.string().min(1),\n code: z.string().min(1),\n})\n\n/** 登出入参 Schema。 */\nexport const IamLogoutInputSchema = z.object({\n accessToken: z.string().min(1).optional(),\n})\n\n/** 发送 OTP 入参 Schema。 */\nexport const IamSendOtpInputSchema = z.object({\n identifier: z.string().min(1),\n})\n\n/** 发送 OTP 业务数据 Schema。 */\nexport const IamSendOtpDataSchema = z.object({\n expiresAt: z.coerce.date(),\n})\n\n/** Token 刷新入参 Schema。 */\nexport const IamRefreshTokenInputSchema = z.object({\n refreshToken: z.string().min(1),\n})\n\n/** Token 刷新业务数据 Schema。 */\nexport const IamRefreshTokenDataSchema = z.object({\n tokens: IamTokenPairSchema,\n})\n\n/** 注册入参 Schema。 */\nexport const IamRegisterInputSchema = z.object({\n username: z.string().min(1),\n password: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 修改密码入参 Schema。 */\nexport const IamChangePasswordInputSchema = z.object({\n oldPassword: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/** 当前用户更新入参 Schema。 */\nexport const IamUpdateCurrentUserInputSchema = z.object({\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n phone: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n})\n\n/** 用户列表查询入参 Schema。 */\nexport const IamListUsersInputSchema = PaginationQuerySchema.extend({\n 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/** Admin 创建用户入参 Schema。 */\nexport const IamAdminCreateUserInputSchema = z.object({\n username: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n password: z.string().min(1),\n displayName: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n roleIds: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n})\n\n/** Admin 更新用户入参 Schema。 */\nexport const IamAdminUpdateUserInputSchema = z.object({\n id: z.string().min(1),\n username: z.string().min(1).optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n displayName: z.string().optional(),\n avatarUrl: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n enabled: z.boolean().optional(),\n roleIds: z.array(z.string()).optional(),\n})\n\n/** Admin 删除用户入参 Schema。 */\nexport const IamUserIdInputSchema = z.object({\n id: z.string().min(1),\n})\n\n/** Admin 重置密码入参 Schema。 */\nexport const IamAdminResetPasswordInputSchema = z.object({\n id: z.string().min(1),\n newPassword: z.string().min(1),\n})\n\n/** 角色基础信息 Schema。 */\nexport const IamRoleSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 创建角色入参 Schema。 */\nexport const IamCreateRoleInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n isSystem: z.boolean().optional(),\n})\n\n/** 更新角色入参 Schema。 */\nexport const IamUpdateRoleInputSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1).optional(),\n description: z.string().optional(),\n})\n\n/** 权限类型 Schema。 */\nexport const IamPermissionTypeSchema = z.enum(['menu', 'api', 'button'])\n\n/** 权限基础信息 Schema。 */\nexport const IamPermissionSchema = z.object({\n id: z.string(),\n code: z.string(),\n name: z.string(),\n description: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n})\n\n/** 权限列表查询入参 Schema。 */\nexport const IamListPermissionsInputSchema = PaginationQuerySchema.extend({\n search: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\n/** 创建权限入参 Schema。 */\nexport const IamCreatePermissionInputSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n resource: z.string().optional(),\n action: z.string().optional(),\n type: IamPermissionTypeSchema.optional(),\n})\n\nexport type IamLoginInput = z.infer<typeof IamLoginInputSchema>\nexport type IamLdapLoginInput = z.infer<typeof IamLdapLoginInputSchema>\nexport type IamPublicConfig = z.infer<typeof IamPublicConfigSchema>\nexport type IamOtpLoginInput = z.infer<typeof IamOtpLoginInputSchema>\nexport type IamLogoutInput = z.infer<typeof IamLogoutInputSchema>\nexport type IamSendOtpInput = z.infer<typeof IamSendOtpInputSchema>\nexport type IamAuthResultOutput = HaiResult<z.infer<typeof IamAuthResultSchema>>\nexport type IamCurrentUser = z.infer<typeof IamCurrentUserSchema>\nexport type IamCurrentUserOutput = HaiResult<IamCurrentUser>\nexport type IamRefreshTokenInput = z.infer<typeof IamRefreshTokenInputSchema>\nexport type IamRefreshTokenOutput = HaiResult<z.infer<typeof IamRefreshTokenDataSchema>>\nexport type IamRegisterInput = z.infer<typeof IamRegisterInputSchema>\nexport type IamChangePasswordInput = z.infer<typeof IamChangePasswordInputSchema>\nexport type IamUpdateCurrentUserInput = z.infer<typeof IamUpdateCurrentUserInputSchema>\nexport type IamListUsersInput = z.infer<typeof IamListUsersInputSchema>\nexport type IamAdminCreateUserInput = z.infer<typeof IamAdminCreateUserInputSchema>\nexport type IamAdminUpdateUserInput = z.infer<typeof IamAdminUpdateUserInputSchema>\nexport type IamUserIdInput = z.infer<typeof IamUserIdInputSchema>\nexport type IamAdminResetPasswordInput = z.infer<typeof IamAdminResetPasswordInputSchema>\nexport type IamCreateRoleInput = z.infer<typeof IamCreateRoleInputSchema>\nexport type IamUpdateRoleInput = z.infer<typeof IamUpdateRoleInputSchema>\nexport type IamListPermissionsInput = z.infer<typeof IamListPermissionsInputSchema>\nexport type IamCreatePermissionInput = z.infer<typeof IamCreatePermissionInputSchema>\n","/**\n * @h-ai/api-contract — IAM 领域 contract\n *\n * 定义身份认证与权限管理相关 API 的接口边界:\n * - auth:登录、登出、OTP、刷新 Token、注册、修改密码\n * - users:Admin 管理用户(CRUD + 重置密码)\n * - roles:Admin 管理角色(CRUD)\n * - permissions:Admin 管理权限(CRUD)\n *\n * auth.* 入口址前缀为 `/auth`;users/roles/permissions 前缀为 `/iam`。\n * @module iam-contract\n */\n\nimport { paginatedSchema } from '../common/pagination-schemas.js'\nimport { haiResultSchema, HaiVoidResultSchema } from '../common/result-schemas.js'\nimport { route } from '../common/route.js'\nimport {\n IamAdminCreateUserInputSchema,\n IamAdminResetPasswordInputSchema,\n IamAdminUpdateUserInputSchema,\n IamAuthResultSchema,\n IamChangePasswordInputSchema,\n IamConfirmPasswordResetInputSchema,\n IamCreatePermissionInputSchema,\n IamCreateRoleInputSchema,\n IamCurrentUserSchema,\n IamLdapLoginInputSchema,\n IamListPermissionsInputSchema,\n IamListUsersInputSchema,\n IamLoginInputSchema,\n IamLogoutInputSchema,\n IamOtpLoginInputSchema,\n IamPermissionSchema,\n IamPublicConfigSchema,\n IamRefreshTokenDataSchema,\n IamRefreshTokenInputSchema,\n IamRegisterInputSchema,\n IamRequestPasswordResetInputSchema,\n IamRoleSchema,\n IamSendOtpDataSchema,\n IamSendOtpInputSchema,\n IamUpdateCurrentUserInputSchema,\n IamUpdateRoleInputSchema,\n IamUserIdInputSchema,\n IamUserSchema,\n} from './iam-schemas.js'\n\n// 同一 contract 内被多个接口复用的输出结构保持私有,避免扩大公共 Schema 面。\nconst authResultOutputSchema = haiResultSchema(IamAuthResultSchema)\nconst userOutputSchema = haiResultSchema(IamUserSchema)\nconst roleOutputSchema = haiResultSchema(IamRoleSchema)\n\n/** IAM 领域 oRPC contract。 */\nexport const iamContract = {\n auth: {\n publicConfig: route({ method: 'GET', path: '/auth/config', operationId: 'iam.auth.publicConfig', summary: 'Public authentication configuration', tags: ['iam', 'auth'] })\n .output(haiResultSchema(IamPublicConfigSchema.nullable())),\n loginWithLdap: route({ method: 'POST', path: '/auth/login/ldap', operationId: 'iam.auth.loginWithLdap', summary: 'LDAP login', tags: ['iam', 'auth'] })\n .input(IamLdapLoginInputSchema)\n .output(authResultOutputSchema),\n requestPasswordReset: route({ method: 'POST', path: '/auth/password-reset/request', operationId: 'iam.auth.requestPasswordReset', summary: 'Request password reset', tags: ['iam', 'auth'] })\n .input(IamRequestPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n confirmPasswordReset: route({ method: 'POST', path: '/auth/password-reset/confirm', operationId: 'iam.auth.confirmPasswordReset', summary: 'Confirm password reset', tags: ['iam', 'auth'] })\n .input(IamConfirmPasswordResetInputSchema)\n .output(HaiVoidResultSchema),\n login: route({ method: 'POST', path: '/auth/login', operationId: 'iam.auth.login', summary: 'Password login', tags: ['iam', 'auth'] })\n .input(IamLoginInputSchema)\n .output(authResultOutputSchema),\n loginWithOtp: route({ method: 'POST', path: '/auth/login/otp', operationId: 'iam.auth.loginWithOtp', summary: 'OTP login', tags: ['iam', 'auth'] })\n .input(IamOtpLoginInputSchema)\n .output(authResultOutputSchema),\n logout: route({ method: 'POST', path: '/auth/logout', operationId: 'iam.auth.logout', summary: 'Logout', tags: ['iam', 'auth'] })\n .input(IamLogoutInputSchema)\n .output(HaiVoidResultSchema),\n currentUser: route({ method: 'GET', path: '/auth/me', operationId: 'iam.auth.currentUser', summary: 'Get current user and access scope', tags: ['iam', 'auth'] })\n .output(haiResultSchema(IamCurrentUserSchema)),\n refresh: route({ method: 'POST', path: '/auth/refresh', operationId: 'iam.auth.refresh', summary: 'Refresh access token', tags: ['iam', 'auth'] })\n .input(IamRefreshTokenInputSchema)\n .output(haiResultSchema(IamRefreshTokenDataSchema)),\n sendOtp: route({ method: 'POST', path: '/auth/otp/send', operationId: 'iam.auth.sendOtp', summary: 'Send OTP', tags: ['iam', 'auth'] })\n .input(IamSendOtpInputSchema)\n .output(haiResultSchema(IamSendOtpDataSchema)),\n register: route({ method: 'POST', path: '/auth/register', operationId: 'iam.auth.register', summary: 'Register and login', tags: ['iam', 'auth'] })\n .input(IamRegisterInputSchema)\n .output(authResultOutputSchema),\n changePassword: route({ method: 'POST', path: '/auth/change-password', operationId: 'iam.auth.changePassword', summary: 'Change current user password', tags: ['iam', 'auth'] })\n .input(IamChangePasswordInputSchema)\n .output(HaiVoidResultSchema),\n updateCurrentUser: route({ method: 'PUT', path: '/auth/me', operationId: 'iam.auth.updateCurrentUser', summary: 'Update current user', tags: ['iam', 'auth'] })\n .input(IamUpdateCurrentUserInputSchema)\n .output(userOutputSchema),\n },\n users: {\n list: route({ method: 'GET', path: '/iam/users', operationId: 'iam.users.list', summary: 'List users', tags: ['iam', 'users'] })\n .input(IamListUsersInputSchema)\n .output(haiResultSchema(paginatedSchema(IamUserSchema))),\n get: route({ method: 'GET', path: '/iam/users/{id}', operationId: 'iam.users.get', summary: 'Get user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamUserSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/users', operationId: 'iam.users.create', summary: 'Create user', tags: ['iam', 'users'] })\n .input(IamAdminCreateUserInputSchema)\n .output(userOutputSchema),\n update: route({ method: 'PUT', path: '/iam/users/{id}', operationId: 'iam.users.update', summary: 'Update user', tags: ['iam', 'users'] })\n .input(IamAdminUpdateUserInputSchema)\n .output(userOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/users/{id}', operationId: 'iam.users.delete', summary: 'Delete user', tags: ['iam', 'users'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n resetPassword: route({ method: 'POST', path: '/iam/users/{id}/reset-password', operationId: 'iam.users.resetPassword', summary: 'Reset user password', tags: ['iam', 'users'] })\n .input(IamAdminResetPasswordInputSchema)\n .output(HaiVoidResultSchema),\n },\n roles: {\n list: route({ method: 'GET', path: '/iam/roles', operationId: 'iam.roles.list', summary: 'List roles', tags: ['iam', 'roles'] })\n .output(haiResultSchema(paginatedSchema(IamRoleSchema))),\n get: route({ method: 'GET', path: '/iam/roles/{id}', operationId: 'iam.roles.get', summary: 'Get role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamRoleSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/roles', operationId: 'iam.roles.create', summary: 'Create role', tags: ['iam', 'roles'] })\n .input(IamCreateRoleInputSchema)\n .output(roleOutputSchema),\n update: route({ method: 'PUT', path: '/iam/roles/{id}', operationId: 'iam.roles.update', summary: 'Update role', tags: ['iam', 'roles'] })\n .input(IamUpdateRoleInputSchema)\n .output(roleOutputSchema),\n delete: route({ method: 'DELETE', path: '/iam/roles/{id}', operationId: 'iam.roles.delete', summary: 'Delete role', tags: ['iam', 'roles'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n permissions: {\n list: route({ method: 'GET', path: '/iam/permissions', operationId: 'iam.permissions.list', summary: 'List permissions', tags: ['iam', 'permissions'] })\n .input(IamListPermissionsInputSchema)\n .output(haiResultSchema(paginatedSchema(IamPermissionSchema))),\n get: route({ method: 'GET', path: '/iam/permissions/{id}', operationId: 'iam.permissions.get', summary: 'Get permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(haiResultSchema(IamPermissionSchema.nullable())),\n create: route({ method: 'POST', path: '/iam/permissions', operationId: 'iam.permissions.create', summary: 'Create permission', tags: ['iam', 'permissions'] })\n .input(IamCreatePermissionInputSchema)\n .output(haiResultSchema(IamPermissionSchema)),\n delete: route({ method: 'DELETE', path: '/iam/permissions/{id}', operationId: 'iam.permissions.delete', summary: 'Delete permission', tags: ['iam', 'permissions'] })\n .input(IamUserIdInputSchema)\n .output(HaiVoidResultSchema),\n },\n}\n\nexport type IamContract = typeof iamContract\n"]}
@@ -1 +0,0 @@
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-VSPYX4DD.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/** 统一语音入口的默认路径(相对 API 前缀)。 */\nexport const AUDIO_WS_PATH = '/ai/audio'\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/** 会话起始帧 Schema。 */\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/** 文本输入帧 Schema。 */\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/** 输入结束帧 Schema。 */\nexport const AudioWsDoneMessageSchema = z.object({\n type: z.literal('done'),\n})\n\n/** 客户端 JSON 控制消息 Schema。 */\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 * 聊天补全结构对齐 OpenAI Chat Completions API,支持 tool calling。\n * 仅保留跨接口、跨层复用的数据结构;一次性输出包装在 contract 中内联。\n * @module ai-schemas\n */\n\nimport type { HaiResult } from '@h-ai/core'\nimport { z } from 'zod'\n\n/** 消息角色 Schema。 */\nexport const AiMessageRoleSchema = z.enum(['system', 'user', 'assistant', 'tool'])\n\n/** 文本内容 Schema。 */\nexport const AiTextContentSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n})\n\n/** 图片内容 Schema。 */\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 }),\n})\n\n/** 消息内容 Schema。 */\nexport const AiMessageContentSchema = z.union([\n z.string(),\n z.array(z.union([AiTextContentSchema, AiImageContentSchema])),\n])\n\n/** 工具调用 Schema。 */\nexport const AiToolCallSchema = z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n})\n\n/** 聊天消息 Schema。 */\nexport const AiChatMessageSchema = z.object({\n role: AiMessageRoleSchema,\n content: AiMessageContentSchema.optional(),\n name: z.string().optional(),\n tool_calls: z.array(AiToolCallSchema).optional(),\n tool_call_id: z.string().optional(),\n})\n\n/** 工具参数 Schema。 */\nexport const AiToolParameterSchema = z.object({\n type: z.string(),\n description: z.string().optional(),\n enum: z.array(z.string()).optional(),\n})\n\n/** 工具定义 Schema。 */\nexport const AiToolDefinitionSchema = z.object({\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.object({\n type: z.literal('object'),\n properties: z.record(z.string(), AiToolParameterSchema).optional(),\n required: z.array(z.string()).optional(),\n }).optional(),\n }),\n})\n\n/** 聊天完成入参 Schema。 */\nexport const AiChatCompletionInputSchema = z.object({\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 stream: z.boolean().optional(),\n tools: z.array(AiToolDefinitionSchema).optional(),\n tool_choice: z.union([\n z.literal('auto'),\n z.literal('none'),\n z.object({ type: z.literal('function'), function: z.object({ name: z.string() }) }),\n ]).optional(),\n})\n\n/** Token 使用统计 Schema。 */\nexport const AiTokenUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n})\n\n/** 助手消息 Schema。 */\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/** 聊天完成选择 Schema。 */\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/** 聊天完成业务数据 Schema。 */\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/** 简单消息入参 Schema。 */\nexport const AiSendMessageInputSchema = z.object({\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/** 简单消息业务数据 Schema。 */\nexport const AiSendMessageDataSchema = z.object({\n content: z.string(),\n model: z.string(),\n usage: AiTokenUsageSchema.optional(),\n})\n\n/** 记忆类型 Schema。 */\nexport const AiMemoryTypeSchema = z.enum(['fact', 'preference', 'event', 'entity', 'instruction'])\n\n/** 记忆条目 Schema。 */\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/** 记忆检索入参 Schema。 */\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().optional(),\n})\n\n/** 记忆检索业务数据 Schema。 */\nexport const AiMemoryRecallDataSchema = z.object({\n items: z.array(AiMemoryEntrySchema),\n})\n\n/** 记忆列表入参 Schema。 */\nexport const AiMemoryListInputSchema = z.object({\n types: z.array(AiMemoryTypeSchema).optional(),\n objectId: z.string().optional(),\n offset: z.number().int().min(0).optional(),\n limit: z.number().int().min(1).max(100).optional(),\n})\n\n/** 记忆列表业务数据 Schema。 */\nexport const AiMemoryListDataSchema = z.object({\n items: z.array(AiMemoryEntrySchema),\n total: z.number(),\n})\n\n/** 会话信息 Schema。 */\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/** 会话列表入参 Schema。 */\nexport const AiSessionListInputSchema = z.object({\n objectId: z.string().min(1),\n})\n\n/** 会话列表业务数据 Schema。 */\nexport const AiSessionListDataSchema = z.object({\n items: z.array(AiSessionInfoSchema),\n})\n\n/** 对话记录 Schema。 */\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/** 对话历史入参 Schema。 */\nexport const AiChatHistoryInputSchema = z.object({\n objectId: z.string().min(1),\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/** 对话历史业务数据 Schema。 */\nexport const AiChatHistoryDataSchema = z.object({\n items: z.array(AiChatRecordSchema),\n})\n\nexport type AiChatCompletionInput = z.infer<typeof AiChatCompletionInputSchema>\nexport type AiChatCompletionData = z.infer<typeof AiChatCompletionDataSchema>\nexport type AiChatCompletionOutput = HaiResult<AiChatCompletionData>\nexport type AiSendMessageInput = z.infer<typeof AiSendMessageInputSchema>\nexport type AiSendMessageData = z.infer<typeof AiSendMessageDataSchema>\nexport type AiSendMessageOutput = HaiResult<AiSendMessageData>\nexport type AiMemoryRecallInput = z.infer<typeof AiMemoryRecallInputSchema>\nexport type AiMemoryListInput = z.infer<typeof AiMemoryListInputSchema>\nexport type AiSessionListInput = z.infer<typeof AiSessionListInputSchema>\nexport type AiChatHistoryInput = z.infer<typeof AiChatHistoryInputSchema>\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 * @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/** AI 领域 oRPC contract。 */\nexport const aiContract = {\n chats: {\n createCompletion: route({ method: 'POST', path: '/ai/chats/completions', operationId: 'ai.chats.createCompletion', summary: 'Create chat completion', 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\nexport type AiContract = typeof aiContract\n"]}