@h-ai/serv 0.1.0-alpha.46 → 0.1.0-alpha.47

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.
@@ -1,9 +1,8 @@
1
- import * as _orpc_contract from '@orpc/contract';
1
+ import * as _orpc_server from '@orpc/server';
2
2
  import * as zod_v4_core from 'zod/v4/core';
3
3
  import * as zod from 'zod';
4
- import * as _orpc_server from '@orpc/server';
5
4
  import { AIFunctions } from '@h-ai/ai';
6
- import { a as ServContext } from '../serv-context-BUrtWoFC.js';
5
+ import { a as ServContext } from '../serv-context-jc3rZxbj.js';
7
6
  import '@h-ai/core';
8
7
 
9
8
  /** AI 默认 procedures 依赖。 */
@@ -12,8 +11,8 @@ interface AiProcedureDeps {
12
11
  }
13
12
  /** 创建 AI 默认 procedures。 */
14
13
  declare function createAiProcedures(deps: AiProcedureDeps): {
15
- chats: {
16
- createCompletion: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
14
+ chats: _orpc_server.Lazyable<{
15
+ createCompletion: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
17
16
  model: zod.ZodOptional<zod.ZodString>;
18
17
  messages: zod.ZodArray<zod.ZodObject<{
19
18
  role: zod.ZodEnum<{
@@ -119,8 +118,8 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
119
118
  suggestion: zod.ZodOptional<zod.ZodString>;
120
119
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
121
120
  }, zod_v4_core.$strip>;
122
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
123
- sendMessage: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
121
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
122
+ sendMessage: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
124
123
  message: zod.ZodString;
125
124
  systemPrompt: zod.ZodOptional<zod.ZodString>;
126
125
  model: zod.ZodOptional<zod.ZodString>;
@@ -148,8 +147,8 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
148
147
  suggestion: zod.ZodOptional<zod.ZodString>;
149
148
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
150
149
  }, zod_v4_core.$strip>;
151
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
152
- listHistory: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
150
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
151
+ listHistory: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
153
152
  objectId: zod.ZodString;
154
153
  sessionId: zod.ZodString;
155
154
  limit: zod.ZodOptional<zod.ZodNumber>;
@@ -232,10 +231,10 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
232
231
  suggestion: zod.ZodOptional<zod.ZodString>;
233
232
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
234
233
  }, zod_v4_core.$strip>;
235
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
236
- };
237
- memories: {
238
- recall: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
234
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
235
+ }>;
236
+ memories: _orpc_server.Lazyable<{
237
+ recall: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
239
238
  query: zod.ZodString;
240
239
  topK: zod.ZodOptional<zod.ZodNumber>;
241
240
  types: zod.ZodOptional<zod.ZodArray<zod.ZodEnum<{
@@ -280,8 +279,8 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
280
279
  suggestion: zod.ZodOptional<zod.ZodString>;
281
280
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
282
281
  }, zod_v4_core.$strip>;
283
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
284
- list: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
282
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
283
+ list: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
285
284
  types: zod.ZodOptional<zod.ZodArray<zod.ZodEnum<{
286
285
  instruction: "instruction";
287
286
  fact: "fact";
@@ -326,10 +325,10 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
326
325
  suggestion: zod.ZodOptional<zod.ZodString>;
327
326
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
328
327
  }, zod_v4_core.$strip>;
329
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
330
- };
331
- sessions: {
332
- list: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
328
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
329
+ }>;
330
+ sessions: _orpc_server.Lazyable<{
331
+ list: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
333
332
  objectId: zod.ZodString;
334
333
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
335
334
  success: zod.ZodLiteral<true>;
@@ -354,8 +353,8 @@ declare function createAiProcedures(deps: AiProcedureDeps): {
354
353
  suggestion: zod.ZodOptional<zod.ZodString>;
355
354
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
356
355
  }, zod_v4_core.$strip>;
357
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
358
- };
356
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
357
+ }>;
359
358
  };
360
359
 
361
360
  export { type AiProcedureDeps, createAiProcedures };
@@ -1,40 +1,23 @@
1
1
  import { wrapItemsResult } from '../chunk-27PCPE37.js';
2
- import { requireAuth } from '../chunk-4QBF4PUG.js';
2
+ import { implement } from '../chunk-KIWHKWLD.js';
3
3
  import { apiContract } from '@h-ai/api-contract';
4
4
  import { ok } from '@h-ai/core';
5
- import { implement } from '@orpc/server';
6
5
 
7
6
  var aiContract = apiContract.ai;
8
7
  function createAiProcedures(deps) {
9
- const p = implement(aiContract).$context();
10
- return p.router({
11
- chats: {
12
- createCompletion: p.chats.createCompletion.handler(requireAuth(async ({ input }) => {
13
- return mapChatCompletionResult(await deps.ai.llm.chat(toChatCompletionRequest(input)));
14
- })),
15
- sendMessage: p.chats.sendMessage.handler(requireAuth(async ({ input }) => {
16
- return sendMessage(deps, input);
17
- })),
18
- listHistory: p.chats.listHistory.handler(requireAuth(async ({ input }) => {
19
- const { objectId, sessionId, limit, order } = input;
20
- return mapChatRecordsResult(await deps.ai.llm.getHistory({ objectId, sessionId }, { limit, order }));
21
- }))
22
- },
23
- memories: {
24
- recall: p.memories.recall.handler(requireAuth(async ({ input }) => {
25
- const { query, ...options } = input;
26
- return wrapItemsResult(await deps.ai.memory.recall(query, options));
27
- })),
28
- list: p.memories.list.handler(requireAuth(async ({ input }) => {
29
- return deps.ai.memory.listPage(input);
30
- }))
31
- },
32
- sessions: {
33
- list: p.sessions.list.handler(requireAuth(async ({ input }) => {
34
- return wrapItemsResult(await deps.ai.llm.listSessions(input.objectId));
35
- }))
36
- }
37
- });
8
+ return implement(aiContract).context().route("chats.createCompletion").auth().handle(async ({ input }) => {
9
+ return mapChatCompletionResult(await deps.ai.llm.chat(toChatCompletionRequest(input)));
10
+ }).route("chats.sendMessage").auth().handle(({ input }) => sendMessage(deps, input)).route("chats.listHistory").auth().handle(async ({ input }) => {
11
+ const { objectId, sessionId, limit, order } = input;
12
+ return mapChatRecordsResult(
13
+ await deps.ai.llm.getHistory({ objectId, sessionId }, { limit, order })
14
+ );
15
+ }).route("memories.recall").auth().handle(async ({ input }) => {
16
+ const { query, ...options } = input;
17
+ return wrapItemsResult(await deps.ai.memory.recall(query, options));
18
+ }).route("memories.list").auth().handle(({ input }) => deps.ai.memory.listPage(input)).route("sessions.list").auth().handle(async ({ input }) => {
19
+ return wrapItemsResult(await deps.ai.llm.listSessions(input.objectId));
20
+ }).build();
38
21
  }
39
22
  function toChatCompletionRequest(input) {
40
23
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/serv-feature-ai.ts"],"names":[],"mappings":"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","file":"ai.js","sourcesContent":["/**\n * @h-ai/serv — AI 默认 procedures\n *\n * 基于 `@h-ai/ai` 提供开箱即用的 AI procedures 实现:对话补全、消息发送、聊天历史、记忆管理、会话列表。\n * 通过 `createAiProcedures(deps)` 组装后直接挂载到 oRPC router。\n * @module features/serv-feature-ai\n */\n\nimport type {\n AIFunctions,\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatMessage,\n MemoryEntry,\n SessionInfo,\n ToolCall,\n} from '@h-ai/ai'\nimport type {\n AiChatCompletionData,\n AiChatCompletionInput,\n AiChatHistoryInput,\n AiChatRecord,\n AiMemoryListInput,\n AiMemoryRecallInput,\n AiSendMessageInput,\n AiSessionListInput,\n} from '@h-ai/api-contract'\nimport type { HaiResult } from '@h-ai/core'\nimport type { ServContext } from '../serv-context.js'\nimport { apiContract } from '@h-ai/api-contract'\nimport { ok } from '@h-ai/core'\nimport { implement } from '@orpc/server'\nimport { requireAuth } from '../pipelines/serv-pipeline-require-auth.js'\nimport { wrapItemsResult } from './serv-feature-helpers.js'\n\nconst aiContract = apiContract.ai\n\n/** AI 默认 procedures 依赖。 */\nexport interface AiProcedureDeps {\n readonly ai: AIFunctions\n}\n\n/** 创建 AI 默认 procedures。 */\nexport function createAiProcedures(deps: AiProcedureDeps) {\n const p = implement(aiContract).$context<ServContext>()\n\n return p.router({\n chats: {\n createCompletion: p.chats.createCompletion.handler(requireAuth<AiChatCompletionInput, AiChatCompletionData>(async ({ input }) => {\n return mapChatCompletionResult(await deps.ai.llm.chat(toChatCompletionRequest(input)))\n })),\n sendMessage: p.chats.sendMessage.handler(requireAuth<AiSendMessageInput, { content: string, model: string }>(async ({ input }) => {\n return sendMessage(deps, input)\n })),\n listHistory: p.chats.listHistory.handler(requireAuth<AiChatHistoryInput, { items: AiChatRecord[] }>(async ({ input }) => {\n const { objectId, sessionId, limit, order } = input\n return mapChatRecordsResult(await deps.ai.llm.getHistory({ objectId, sessionId }, { limit, order }))\n })),\n },\n memories: {\n recall: p.memories.recall.handler(requireAuth<AiMemoryRecallInput, { items: MemoryEntry[] }>(async ({ input }) => {\n const { query, ...options } = input\n return wrapItemsResult(await deps.ai.memory.recall(query, options))\n })),\n list: p.memories.list.handler(requireAuth<AiMemoryListInput, { items: MemoryEntry[], total: number }>(async ({ input }) => {\n return deps.ai.memory.listPage(input)\n })),\n },\n sessions: {\n list: p.sessions.list.handler(requireAuth<AiSessionListInput, { items: SessionInfo[] }>(async ({ input }) => {\n return wrapItemsResult(await deps.ai.llm.listSessions(input.objectId))\n })),\n },\n })\n}\n\nfunction toChatCompletionRequest(input: AiChatCompletionInput): ChatCompletionRequest {\n return {\n messages: input.messages.map(toChatMessage),\n model: input.model,\n temperature: input.temperature,\n top_p: input.top_p,\n max_tokens: input.max_tokens,\n }\n}\n\nfunction toChatMessage(message: AiChatCompletionInput['messages'][number]): ChatMessage {\n if (message.role === 'system') {\n return { role: 'system', content: toMessageText(message.content) }\n }\n\n if (message.role === 'user') {\n return { role: 'user', content: message.content ?? '' }\n }\n\n if (message.role === 'tool') {\n return { role: 'tool', content: toMessageText(message.content), tool_call_id: message.tool_call_id ?? '' }\n }\n\n return {\n role: 'assistant',\n content: toAssistantContent(message.content),\n tool_calls: message.tool_calls,\n }\n}\n\nfunction toMessageText(content: AiChatCompletionInput['messages'][number]['content']): string {\n if (typeof content === 'string') {\n return content\n }\n\n return content?.map(part => part.type === 'text' ? part.text : part.image_url.url).join('\\n') ?? ''\n}\n\nfunction toAssistantContent(content: AiChatCompletionInput['messages'][number]['content']): string | null {\n if (typeof content === 'string') {\n return content\n }\n\n return content ? toMessageText(content) : null\n}\n\nfunction mapChatCompletionResult(result: HaiResult<ChatCompletionResponse>): HaiResult<AiChatCompletionData> {\n if (!result.success) {\n return result\n }\n\n return ok({\n id: result.data.id,\n object: 'chat.completion',\n created: result.data.created,\n model: result.data.model,\n choices: result.data.choices.map(choice => ({\n index: choice.index,\n message: {\n role: 'assistant',\n content: choice.message.content ?? null,\n tool_calls: mapFunctionToolCalls(choice.message.tool_calls),\n },\n finish_reason: toApiFinishReason(choice.finish_reason),\n })),\n usage: {\n prompt_tokens: result.data.usage?.prompt_tokens ?? 0,\n completion_tokens: result.data.usage?.completion_tokens ?? 0,\n total_tokens: result.data.usage?.total_tokens ?? 0,\n },\n })\n}\n\nfunction toApiFinishReason(reason: string | null): AiChatCompletionData['choices'][number]['finish_reason'] {\n if (reason === 'length' || reason === 'tool_calls' || reason === 'content_filter') {\n return reason\n }\n\n return 'stop'\n}\n\nfunction mapChatRecordsResult(result: HaiResult<Array<import('@h-ai/ai').ChatRecord>>): HaiResult<{ items: AiChatRecord[] }> {\n if (!result.success) {\n return result\n }\n\n return ok({ items: result.data.map(toApiChatRecord) })\n}\n\nfunction toApiChatRecord(record: import('@h-ai/ai').ChatRecord): AiChatRecord {\n return {\n id: record.id,\n objectId: record.objectId,\n sessionId: record.sessionId,\n request: {\n model: record.request.model,\n messages: record.request.messages.map(toApiChatMessage),\n },\n response: {\n content: record.response.content,\n toolCalls: mapFunctionToolCalls(record.response.toolCalls),\n finishReason: record.response.finishReason,\n usage: {\n prompt_tokens: record.response.usage.prompt_tokens,\n completion_tokens: record.response.usage.completion_tokens,\n total_tokens: record.response.usage.total_tokens,\n },\n },\n createdAt: record.createdAt,\n duration: record.duration,\n }\n}\n\nfunction toApiChatMessage(message: ChatMessage): AiChatCompletionInput['messages'][number] {\n if (message.role === 'tool') {\n return { role: 'tool', content: toContentText(message.content), tool_call_id: message.tool_call_id }\n }\n\n if (message.role === 'assistant') {\n return {\n role: 'assistant',\n content: toContentText(message.content),\n tool_calls: mapFunctionToolCalls(message.tool_calls),\n }\n }\n\n if (message.role === 'user') {\n return { role: 'user', content: toContentText(message.content) }\n }\n\n return { role: 'system', content: toContentText(message.content) }\n}\n\nfunction toContentText(content: unknown): string {\n if (typeof content === 'string') {\n return content\n }\n\n if (!Array.isArray(content)) {\n return ''\n }\n\n return content.map((part) => {\n if (typeof part !== 'object' || part === null) {\n return ''\n }\n\n const record = part as Record<string, unknown>\n if (typeof record.text === 'string') {\n return record.text\n }\n\n if (typeof record.image_url === 'object' && record.image_url !== null) {\n const image = record.image_url as Record<string, unknown>\n return typeof image.url === 'string' ? image.url : ''\n }\n\n return ''\n }).filter(Boolean).join('\\n')\n}\n\nfunction mapFunctionToolCalls(toolCalls: ToolCall[] | undefined) {\n return toolCalls?.flatMap((toolCall) => {\n if (toolCall.type !== 'function' || !('function' in toolCall)) {\n return []\n }\n\n return [{\n id: toolCall.id,\n type: 'function' as const,\n function: {\n name: toolCall.function.name,\n arguments: toolCall.function.arguments,\n },\n }]\n })\n}\n\nasync function sendMessage(deps: AiProcedureDeps, input: AiSendMessageInput): Promise<HaiResult<{ content: string, model: string }>> {\n const result = await deps.ai.llm.ask(input.message, {\n systemPrompt: input.systemPrompt,\n model: input.model,\n temperature: input.temperature,\n })\n\n if (!result.success) {\n return result\n }\n\n return ok({\n content: result.data,\n model: input.model ?? deps.ai.config?.llm.model ?? 'default',\n })\n}\n"]}
1
+ {"version":3,"sources":["../../src/features/serv-feature-ai.ts"],"names":[],"mappings":"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","file":"ai.js","sourcesContent":["/**\n * @h-ai/serv — AI 默认 procedures\n *\n * 基于 `@h-ai/ai` 提供开箱即用的 AI procedures 实现:对话补全、消息发送、聊天历史、记忆管理、会话列表。\n * @module features/serv-feature-ai\n */\n\nimport type {\n AIFunctions,\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatMessage,\n ToolCall,\n} from '@h-ai/ai'\nimport type {\n AiChatCompletionData,\n AiChatCompletionInput,\n AiChatRecord,\n AiSendMessageInput,\n} from '@h-ai/api-contract'\nimport type { HaiResult } from '@h-ai/core'\nimport type { ServContext } from '../serv-context.js'\nimport { apiContract } from '@h-ai/api-contract'\nimport { ok } from '@h-ai/core'\nimport { implement } from '../serv-router.js'\nimport { wrapItemsResult } from './serv-feature-helpers.js'\n\nconst aiContract = apiContract.ai\n\n/** AI 默认 procedures 依赖。 */\nexport interface AiProcedureDeps {\n readonly ai: AIFunctions\n}\n\n/** 创建 AI 默认 procedures。 */\nexport function createAiProcedures(deps: AiProcedureDeps) {\n return implement(aiContract)\n .context<ServContext>()\n\n .route('chats.createCompletion')\n .auth()\n .handle(async ({ input }) => {\n return mapChatCompletionResult(await deps.ai.llm.chat(toChatCompletionRequest(input)))\n })\n\n .route('chats.sendMessage')\n .auth()\n .handle(({ input }) => sendMessage(deps, input))\n\n .route('chats.listHistory')\n .auth()\n .handle(async ({ input }) => {\n const { objectId, sessionId, limit, order } = input\n return mapChatRecordsResult(\n await deps.ai.llm.getHistory({ objectId, sessionId }, { limit, order }),\n )\n })\n\n .route('memories.recall')\n .auth()\n .handle(async ({ input }) => {\n const { query, ...options } = input\n return wrapItemsResult(await deps.ai.memory.recall(query, options))\n })\n\n .route('memories.list')\n .auth()\n .handle(({ input }) => deps.ai.memory.listPage(input))\n\n .route('sessions.list')\n .auth()\n .handle(async ({ input }) => {\n return wrapItemsResult(await deps.ai.llm.listSessions(input.objectId))\n })\n\n .build()\n}\n\nfunction toChatCompletionRequest(input: AiChatCompletionInput): ChatCompletionRequest {\n return {\n messages: input.messages.map(toChatMessage),\n model: input.model,\n temperature: input.temperature,\n top_p: input.top_p,\n max_tokens: input.max_tokens,\n }\n}\n\nfunction toChatMessage(message: AiChatCompletionInput['messages'][number]): ChatMessage {\n if (message.role === 'system') {\n return { role: 'system', content: toMessageText(message.content) }\n }\n\n if (message.role === 'user') {\n return { role: 'user', content: message.content ?? '' }\n }\n\n if (message.role === 'tool') {\n return { role: 'tool', content: toMessageText(message.content), tool_call_id: message.tool_call_id ?? '' }\n }\n\n return {\n role: 'assistant',\n content: toAssistantContent(message.content),\n tool_calls: message.tool_calls,\n }\n}\n\nfunction toMessageText(content: AiChatCompletionInput['messages'][number]['content']): string {\n if (typeof content === 'string') {\n return content\n }\n\n return content?.map(part => part.type === 'text' ? part.text : part.image_url.url).join('\\n') ?? ''\n}\n\nfunction toAssistantContent(content: AiChatCompletionInput['messages'][number]['content']): string | null {\n if (typeof content === 'string') {\n return content\n }\n\n return content ? toMessageText(content) : null\n}\n\nfunction mapChatCompletionResult(result: HaiResult<ChatCompletionResponse>): HaiResult<AiChatCompletionData> {\n if (!result.success) {\n return result\n }\n\n return ok({\n id: result.data.id,\n object: 'chat.completion',\n created: result.data.created,\n model: result.data.model,\n choices: result.data.choices.map(choice => ({\n index: choice.index,\n message: {\n role: 'assistant',\n content: choice.message.content ?? null,\n tool_calls: mapFunctionToolCalls(choice.message.tool_calls),\n },\n finish_reason: toApiFinishReason(choice.finish_reason),\n })),\n usage: {\n prompt_tokens: result.data.usage?.prompt_tokens ?? 0,\n completion_tokens: result.data.usage?.completion_tokens ?? 0,\n total_tokens: result.data.usage?.total_tokens ?? 0,\n },\n })\n}\n\nfunction toApiFinishReason(reason: string | null): AiChatCompletionData['choices'][number]['finish_reason'] {\n if (reason === 'length' || reason === 'tool_calls' || reason === 'content_filter') {\n return reason\n }\n\n return 'stop'\n}\n\nfunction mapChatRecordsResult(result: HaiResult<Array<import('@h-ai/ai').ChatRecord>>): HaiResult<{ items: AiChatRecord[] }> {\n if (!result.success) {\n return result\n }\n\n return ok({ items: result.data.map(toApiChatRecord) })\n}\n\nfunction toApiChatRecord(record: import('@h-ai/ai').ChatRecord): AiChatRecord {\n return {\n id: record.id,\n objectId: record.objectId,\n sessionId: record.sessionId,\n request: {\n model: record.request.model,\n messages: record.request.messages.map(toApiChatMessage),\n },\n response: {\n content: record.response.content,\n toolCalls: mapFunctionToolCalls(record.response.toolCalls),\n finishReason: record.response.finishReason,\n usage: {\n prompt_tokens: record.response.usage.prompt_tokens,\n completion_tokens: record.response.usage.completion_tokens,\n total_tokens: record.response.usage.total_tokens,\n },\n },\n createdAt: record.createdAt,\n duration: record.duration,\n }\n}\n\nfunction toApiChatMessage(message: ChatMessage): AiChatCompletionInput['messages'][number] {\n if (message.role === 'tool') {\n return { role: 'tool', content: toContentText(message.content), tool_call_id: message.tool_call_id }\n }\n\n if (message.role === 'assistant') {\n return {\n role: 'assistant',\n content: toContentText(message.content),\n tool_calls: mapFunctionToolCalls(message.tool_calls),\n }\n }\n\n if (message.role === 'user') {\n return { role: 'user', content: toContentText(message.content) }\n }\n\n return { role: 'system', content: toContentText(message.content) }\n}\n\nfunction toContentText(content: unknown): string {\n if (typeof content === 'string') {\n return content\n }\n\n if (!Array.isArray(content)) {\n return ''\n }\n\n return content.map((part) => {\n if (typeof part !== 'object' || part === null) {\n return ''\n }\n\n const record = part as Record<string, unknown>\n if (typeof record.text === 'string') {\n return record.text\n }\n\n if (typeof record.image_url === 'object' && record.image_url !== null) {\n const image = record.image_url as Record<string, unknown>\n return typeof image.url === 'string' ? image.url : ''\n }\n\n return ''\n }).filter(Boolean).join('\\n')\n}\n\nfunction mapFunctionToolCalls(toolCalls: ToolCall[] | undefined) {\n return toolCalls?.flatMap((toolCall) => {\n if (toolCall.type !== 'function' || !('function' in toolCall)) {\n return []\n }\n\n return [{\n id: toolCall.id,\n type: 'function' as const,\n function: {\n name: toolCall.function.name,\n arguments: toolCall.function.arguments,\n },\n }]\n })\n}\n\nasync function sendMessage(\n deps: AiProcedureDeps,\n input: AiSendMessageInput,\n): Promise<HaiResult<{ content: string, model: string }>> {\n const result = await deps.ai.llm.ask(input.message, {\n systemPrompt: input.systemPrompt,\n model: input.model,\n temperature: input.temperature,\n })\n\n if (!result.success) {\n return result\n }\n\n return ok({\n content: result.data,\n model: input.model ?? deps.ai.config?.llm.model ?? 'default',\n })\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import * as _orpc_contract from '@orpc/contract';
2
+ import * as _orpc_server from '@orpc/server';
2
3
  import * as zod_v4_core from 'zod/v4/core';
3
4
  import * as zod from 'zod';
4
- import * as _orpc_server from '@orpc/server';
5
5
  import { IamFunctions } from '@h-ai/iam';
6
6
  export { TokenPair } from '@h-ai/iam';
7
- import { a as ServContext } from '../serv-context-BUrtWoFC.js';
7
+ import { a as ServContext } from '../serv-context-jc3rZxbj.js';
8
8
  import '@h-ai/core';
9
9
 
10
10
  /** IAM 默认 procedures 依赖。 */
@@ -13,8 +13,8 @@ interface IamProcedureDeps {
13
13
  }
14
14
  /** 创建 IAM 默认 procedures。 */
15
15
  declare function createIamProcedures(deps: IamProcedureDeps): {
16
- auth: {
17
- login: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
16
+ auth: _orpc_server.Lazyable<{
17
+ login: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
18
18
  identifier: zod.ZodString;
19
19
  password: zod.ZodString;
20
20
  rememberMe: zod.ZodOptional<zod.ZodBoolean>;
@@ -62,8 +62,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
62
62
  suggestion: zod.ZodOptional<zod.ZodString>;
63
63
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
64
64
  }, zod_v4_core.$strip>;
65
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
66
- loginWithOtp: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
65
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
66
+ loginWithOtp: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
67
67
  identifier: zod.ZodString;
68
68
  code: zod.ZodString;
69
69
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
@@ -110,8 +110,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
110
110
  suggestion: zod.ZodOptional<zod.ZodString>;
111
111
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
112
112
  }, zod_v4_core.$strip>;
113
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
114
- logout: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
113
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
114
+ logout: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
115
115
  accessToken: zod.ZodOptional<zod.ZodString>;
116
116
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
117
117
  success: zod.ZodLiteral<true>;
@@ -128,8 +128,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
128
128
  suggestion: zod.ZodOptional<zod.ZodString>;
129
129
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
130
130
  }, zod_v4_core.$strip>;
131
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
132
- currentUser: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, _orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
131
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
132
+ currentUser: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, _orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
133
133
  success: zod.ZodLiteral<true>;
134
134
  data: zod.ZodObject<{
135
135
  id: zod.ZodString;
@@ -159,8 +159,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
159
159
  suggestion: zod.ZodOptional<zod.ZodString>;
160
160
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
161
161
  }, zod_v4_core.$strip>;
162
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
163
- refresh: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
162
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
163
+ refresh: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
164
164
  refreshToken: zod.ZodString;
165
165
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
166
166
  success: zod.ZodLiteral<true>;
@@ -184,8 +184,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
184
184
  suggestion: zod.ZodOptional<zod.ZodString>;
185
185
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
186
186
  }, zod_v4_core.$strip>;
187
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
188
- sendOtp: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
187
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
188
+ sendOtp: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
189
189
  identifier: zod.ZodString;
190
190
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
191
191
  success: zod.ZodLiteral<true>;
@@ -204,8 +204,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
204
204
  suggestion: zod.ZodOptional<zod.ZodString>;
205
205
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
206
206
  }, zod_v4_core.$strip>;
207
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
208
- register: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
207
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
208
+ register: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
209
209
  username: zod.ZodString;
210
210
  password: zod.ZodString;
211
211
  email: zod.ZodOptional<zod.ZodString>;
@@ -256,8 +256,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
256
256
  suggestion: zod.ZodOptional<zod.ZodString>;
257
257
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
258
258
  }, zod_v4_core.$strip>;
259
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
260
- changePassword: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
259
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
260
+ changePassword: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
261
261
  oldPassword: zod.ZodString;
262
262
  newPassword: zod.ZodString;
263
263
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
@@ -275,8 +275,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
275
275
  suggestion: zod.ZodOptional<zod.ZodString>;
276
276
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
277
277
  }, zod_v4_core.$strip>;
278
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
279
- updateCurrentUser: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
278
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
279
+ updateCurrentUser: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
280
280
  username: zod.ZodOptional<zod.ZodString>;
281
281
  email: zod.ZodOptional<zod.ZodString>;
282
282
  displayName: zod.ZodOptional<zod.ZodString>;
@@ -311,10 +311,10 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
311
311
  suggestion: zod.ZodOptional<zod.ZodString>;
312
312
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
313
313
  }, zod_v4_core.$strip>;
314
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
315
- };
316
- users: {
317
- list: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
314
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
315
+ }>;
316
+ users: _orpc_server.Lazyable<{
317
+ list: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
318
318
  page: zod.ZodOptional<zod.ZodCoercedNumber<unknown>>;
319
319
  pageSize: zod.ZodOptional<zod.ZodCoercedNumber<unknown>>;
320
320
  search: zod.ZodOptional<zod.ZodString>;
@@ -355,8 +355,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
355
355
  suggestion: zod.ZodOptional<zod.ZodString>;
356
356
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
357
357
  }, zod_v4_core.$strip>;
358
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
359
- get: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
358
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
359
+ get: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
360
360
  id: zod.ZodString;
361
361
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
362
362
  success: zod.ZodLiteral<true>;
@@ -386,8 +386,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
386
386
  suggestion: zod.ZodOptional<zod.ZodString>;
387
387
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
388
388
  }, zod_v4_core.$strip>;
389
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
390
- create: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
389
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
390
+ create: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
391
391
  username: zod.ZodString;
392
392
  email: zod.ZodOptional<zod.ZodString>;
393
393
  phone: zod.ZodOptional<zod.ZodString>;
@@ -424,8 +424,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
424
424
  suggestion: zod.ZodOptional<zod.ZodString>;
425
425
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
426
426
  }, zod_v4_core.$strip>;
427
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
428
- update: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
427
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
428
+ update: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
429
429
  id: zod.ZodString;
430
430
  username: zod.ZodOptional<zod.ZodString>;
431
431
  email: zod.ZodOptional<zod.ZodString>;
@@ -463,8 +463,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
463
463
  suggestion: zod.ZodOptional<zod.ZodString>;
464
464
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
465
465
  }, zod_v4_core.$strip>;
466
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
467
- delete: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
466
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
467
+ delete: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
468
468
  id: zod.ZodString;
469
469
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
470
470
  success: zod.ZodLiteral<true>;
@@ -481,8 +481,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
481
481
  suggestion: zod.ZodOptional<zod.ZodString>;
482
482
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
483
483
  }, zod_v4_core.$strip>;
484
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
485
- resetPassword: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
484
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
485
+ resetPassword: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
486
486
  id: zod.ZodString;
487
487
  newPassword: zod.ZodString;
488
488
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
@@ -500,10 +500,10 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
500
500
  suggestion: zod.ZodOptional<zod.ZodString>;
501
501
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
502
502
  }, zod_v4_core.$strip>;
503
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
504
- };
505
- roles: {
506
- list: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, _orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
503
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
504
+ }>;
505
+ roles: _orpc_server.Lazyable<{
506
+ list: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, _orpc_contract.Schema<unknown, unknown>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
507
507
  success: zod.ZodLiteral<true>;
508
508
  data: zod.ZodObject<{
509
509
  items: zod.ZodArray<zod.ZodObject<{
@@ -531,8 +531,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
531
531
  suggestion: zod.ZodOptional<zod.ZodString>;
532
532
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
533
533
  }, zod_v4_core.$strip>;
534
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
535
- get: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
534
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
535
+ get: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
536
536
  id: zod.ZodString;
537
537
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
538
538
  success: zod.ZodLiteral<true>;
@@ -557,8 +557,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
557
557
  suggestion: zod.ZodOptional<zod.ZodString>;
558
558
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
559
559
  }, zod_v4_core.$strip>;
560
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
561
- create: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
560
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
561
+ create: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
562
562
  code: zod.ZodString;
563
563
  name: zod.ZodString;
564
564
  description: zod.ZodOptional<zod.ZodString>;
@@ -586,8 +586,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
586
586
  suggestion: zod.ZodOptional<zod.ZodString>;
587
587
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
588
588
  }, zod_v4_core.$strip>;
589
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
590
- update: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
589
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
590
+ update: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
591
591
  id: zod.ZodString;
592
592
  name: zod.ZodOptional<zod.ZodString>;
593
593
  description: zod.ZodOptional<zod.ZodString>;
@@ -614,8 +614,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
614
614
  suggestion: zod.ZodOptional<zod.ZodString>;
615
615
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
616
616
  }, zod_v4_core.$strip>;
617
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
618
- delete: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
617
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
618
+ delete: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
619
619
  id: zod.ZodString;
620
620
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
621
621
  success: zod.ZodLiteral<true>;
@@ -632,10 +632,10 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
632
632
  suggestion: zod.ZodOptional<zod.ZodString>;
633
633
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
634
634
  }, zod_v4_core.$strip>;
635
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
636
- };
637
- permissions: {
638
- list: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
635
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
636
+ }>;
637
+ permissions: _orpc_server.Lazyable<{
638
+ list: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
639
639
  page: zod.ZodOptional<zod.ZodCoercedNumber<unknown>>;
640
640
  pageSize: zod.ZodOptional<zod.ZodCoercedNumber<unknown>>;
641
641
  search: zod.ZodOptional<zod.ZodString>;
@@ -678,8 +678,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
678
678
  suggestion: zod.ZodOptional<zod.ZodString>;
679
679
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
680
680
  }, zod_v4_core.$strip>;
681
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
682
- get: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
681
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
682
+ get: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
683
683
  id: zod.ZodString;
684
684
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
685
685
  success: zod.ZodLiteral<true>;
@@ -710,8 +710,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
710
710
  suggestion: zod.ZodOptional<zod.ZodString>;
711
711
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
712
712
  }, zod_v4_core.$strip>;
713
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
714
- create: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
713
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
714
+ create: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
715
715
  code: zod.ZodString;
716
716
  name: zod.ZodString;
717
717
  description: zod.ZodOptional<zod.ZodString>;
@@ -751,8 +751,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
751
751
  suggestion: zod.ZodOptional<zod.ZodString>;
752
752
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
753
753
  }, zod_v4_core.$strip>;
754
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
755
- delete: _orpc_server.Procedure<_orpc_server.MergedInitialContext<ServContext & Record<never, never>, ServContext & Record<never, never>, ServContext>, ServContext, zod.ZodObject<{
754
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
755
+ delete: _orpc_server.Lazyable<_orpc_server.Procedure<ServContext & {}, any, zod.ZodObject<{
756
756
  id: zod.ZodString;
757
757
  }, zod_v4_core.$strip>, zod.ZodDiscriminatedUnion<[zod.ZodObject<{
758
758
  success: zod.ZodLiteral<true>;
@@ -769,8 +769,8 @@ declare function createIamProcedures(deps: IamProcedureDeps): {
769
769
  suggestion: zod.ZodOptional<zod.ZodString>;
770
770
  ext: zod.ZodOptional<zod.ZodRecord<zod.ZodString, zod.ZodUnknown>>;
771
771
  }, zod_v4_core.$strip>;
772
- }, zod_v4_core.$strip>], "success">, _orpc_contract.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
773
- };
772
+ }, zod_v4_core.$strip>], "success">, Record<never, never>, Record<never, never>>>;
773
+ }>;
774
774
  };
775
775
 
776
776
  export { type IamProcedureDeps, createIamProcedures };