@voltagent/serverless-hono 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,6 +4,9 @@ import { Hono } from "hono";
4
4
  import { cors } from "hono/cors";
5
5
 
6
6
  // src/routes.ts
7
+ import {
8
+ SERVERLESS_ENV_CONTEXT_KEY
9
+ } from "@voltagent/core";
7
10
  import { safeStringify } from "@voltagent/internal";
8
11
  import {
9
12
  getLogsBySpanIdHandler,
@@ -85,6 +88,47 @@ function extractHeaders(headers) {
85
88
  });
86
89
  return result;
87
90
  }
91
+ function getServerlessEnv(c) {
92
+ const env = c?.env;
93
+ if (!env || typeof env !== "object" || Array.isArray(env)) {
94
+ return void 0;
95
+ }
96
+ return env;
97
+ }
98
+ function mergeContextWithServerlessEnv(context, env) {
99
+ if (!env) {
100
+ return context instanceof Map ? context : void 0;
101
+ }
102
+ const contextMap = context instanceof Map ? context : context && typeof context === "object" && !Array.isArray(context) ? new Map(Object.entries(context)) : /* @__PURE__ */ new Map();
103
+ if (!contextMap.has(SERVERLESS_ENV_CONTEXT_KEY)) {
104
+ contextMap.set(SERVERLESS_ENV_CONTEXT_KEY, env);
105
+ }
106
+ return contextMap;
107
+ }
108
+ function withServerlessEnvInOptions(body, env) {
109
+ if (!env || !body || typeof body !== "object") {
110
+ return body;
111
+ }
112
+ const options = body.options && typeof body.options === "object" && !Array.isArray(body.options) ? body.options : {};
113
+ const context = mergeContextWithServerlessEnv(options.context, env);
114
+ return {
115
+ ...body,
116
+ options: {
117
+ ...options,
118
+ context: context ?? options.context
119
+ }
120
+ };
121
+ }
122
+ function withServerlessEnvInContext(body, env) {
123
+ if (!env || !body || typeof body !== "object") {
124
+ return body;
125
+ }
126
+ const context = mergeContextWithServerlessEnv(body.context, env);
127
+ return {
128
+ ...body,
129
+ context: context ?? body.context
130
+ };
131
+ }
88
132
  function parseContextCandidate(candidate) {
89
133
  if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
90
134
  return void 0;
@@ -138,7 +182,14 @@ function registerAgentRoutes(app, deps, logger) {
138
182
  return c.json({ success: false, error: "Invalid JSON body" }, 400);
139
183
  }
140
184
  const signal = c.req.raw.signal;
141
- const response = await handleGenerateText(agentId, body, deps, logger, signal);
185
+ const runtimeEnv = getServerlessEnv(c);
186
+ const response = await handleGenerateText(
187
+ agentId,
188
+ withServerlessEnvInOptions(body, runtimeEnv),
189
+ deps,
190
+ logger,
191
+ signal
192
+ );
142
193
  return c.json(response, response.success ? 200 : 500);
143
194
  });
144
195
  app.post(AGENT_ROUTES.streamText.path, async (c) => {
@@ -148,7 +199,14 @@ function registerAgentRoutes(app, deps, logger) {
148
199
  return c.json({ error: "Invalid JSON body" }, 400);
149
200
  }
150
201
  const signal = c.req.raw.signal;
151
- const response = await handleStreamText(agentId, body, deps, logger, signal);
202
+ const runtimeEnv = getServerlessEnv(c);
203
+ const response = await handleStreamText(
204
+ agentId,
205
+ withServerlessEnvInOptions(body, runtimeEnv),
206
+ deps,
207
+ logger,
208
+ signal
209
+ );
152
210
  return response;
153
211
  });
154
212
  app.post(AGENT_ROUTES.chatStream.path, async (c) => {
@@ -158,7 +216,14 @@ function registerAgentRoutes(app, deps, logger) {
158
216
  return c.json({ error: "Invalid JSON body" }, 400);
159
217
  }
160
218
  const signal = c.req.raw.signal;
161
- return handleChatStream(agentId, body, deps, logger, signal);
219
+ const runtimeEnv = getServerlessEnv(c);
220
+ return handleChatStream(
221
+ agentId,
222
+ withServerlessEnvInOptions(body, runtimeEnv),
223
+ deps,
224
+ logger,
225
+ signal
226
+ );
162
227
  });
163
228
  app.post(AGENT_ROUTES.generateObject.path, async (c) => {
164
229
  const agentId = c.req.param("id");
@@ -167,7 +232,14 @@ function registerAgentRoutes(app, deps, logger) {
167
232
  return c.json({ success: false, error: "Invalid JSON body" }, 400);
168
233
  }
169
234
  const signal = c.req.raw.signal;
170
- const response = await handleGenerateObject(agentId, body, deps, logger, signal);
235
+ const runtimeEnv = getServerlessEnv(c);
236
+ const response = await handleGenerateObject(
237
+ agentId,
238
+ withServerlessEnvInOptions(body, runtimeEnv),
239
+ deps,
240
+ logger,
241
+ signal
242
+ );
171
243
  return c.json(response, response.success ? 200 : 500);
172
244
  });
173
245
  app.post(AGENT_ROUTES.streamObject.path, async (c) => {
@@ -177,7 +249,14 @@ function registerAgentRoutes(app, deps, logger) {
177
249
  return c.json({ error: "Invalid JSON body" }, 400);
178
250
  }
179
251
  const signal = c.req.raw.signal;
180
- return handleStreamObject(agentId, body, deps, logger, signal);
252
+ const runtimeEnv = getServerlessEnv(c);
253
+ return handleStreamObject(
254
+ agentId,
255
+ withServerlessEnvInOptions(body, runtimeEnv),
256
+ deps,
257
+ logger,
258
+ signal
259
+ );
181
260
  });
182
261
  app.get(AGENT_ROUTES.getAgentHistory.path, async (c) => {
183
262
  const agentId = c.req.param("id");
@@ -203,7 +282,13 @@ function registerWorkflowRoutes(app, deps, logger) {
203
282
  if (!body) {
204
283
  return c.json({ success: false, error: "Invalid JSON body" }, 400);
205
284
  }
206
- const response = await handleExecuteWorkflow(workflowId, body, deps, logger);
285
+ const runtimeEnv = getServerlessEnv(c);
286
+ const response = await handleExecuteWorkflow(
287
+ workflowId,
288
+ withServerlessEnvInOptions(body, runtimeEnv),
289
+ deps,
290
+ logger
291
+ );
207
292
  return c.json(response, response.success ? 200 : 500);
208
293
  });
209
294
  app.post(WORKFLOW_ROUTES.streamWorkflow.path, async (c) => {
@@ -212,7 +297,13 @@ function registerWorkflowRoutes(app, deps, logger) {
212
297
  if (!body) {
213
298
  return c.json({ error: "Invalid JSON body" }, 400);
214
299
  }
215
- const response = await handleStreamWorkflow(workflowId, body, deps, logger);
300
+ const runtimeEnv = getServerlessEnv(c);
301
+ const response = await handleStreamWorkflow(
302
+ workflowId,
303
+ withServerlessEnvInOptions(body, runtimeEnv),
304
+ deps,
305
+ logger
306
+ );
216
307
  if (isErrorResponse(response)) {
217
308
  return c.json(response, 500);
218
309
  }
@@ -267,7 +358,13 @@ function registerToolRoutes(app, deps, logger) {
267
358
  if (!body) {
268
359
  return c.json({ success: false, error: "Invalid JSON body" }, 400);
269
360
  }
270
- const response = await handleExecuteTool(toolName, body, deps, logger);
361
+ const runtimeEnv = getServerlessEnv(c);
362
+ const response = await handleExecuteTool(
363
+ toolName,
364
+ withServerlessEnvInContext(body, runtimeEnv),
365
+ deps,
366
+ logger
367
+ );
271
368
  const status = response.success ? 200 : response.httpStatus || 500;
272
369
  return c.json(response, status);
273
370
  });
@@ -627,7 +724,12 @@ function resolveCorsConfig(config) {
627
724
  "DELETE",
628
725
  "OPTIONS"
629
726
  ];
630
- const allowHeaders = config?.corsAllowHeaders ?? ["Content-Type", "Authorization"];
727
+ const allowHeaders = config?.corsAllowHeaders ?? [
728
+ "Content-Type",
729
+ "Authorization",
730
+ "x-voltagent-dev",
731
+ "x-console-access-key"
732
+ ];
631
733
  return {
632
734
  origin,
633
735
  allowMethods,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/app-factory.ts","../src/routes.ts","../src/utils/runtime-detection.ts","../src/utils/wait-until-wrapper.ts","../src/serverless-provider.ts","../src/netlify-function.ts","../src/index.ts"],"sourcesContent":["import type { ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { getOrCreateLogger } from \"@voltagent/server-core\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport {\n registerA2ARoutes,\n registerAgentRoutes,\n registerLogRoutes,\n registerObservabilityRoutes,\n registerToolRoutes,\n registerTriggerRoutes,\n registerUpdateRoutes,\n registerWorkflowRoutes,\n} from \"./routes\";\nimport type { ServerlessConfig } from \"./types\";\n\nfunction resolveCorsConfig(config?: ServerlessConfig) {\n const origin = config?.corsOrigin ?? \"*\";\n const allowMethods = config?.corsAllowMethods ?? [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n ];\n const allowHeaders = config?.corsAllowHeaders ?? [\"Content-Type\", \"Authorization\"];\n\n return {\n origin,\n allowMethods,\n allowHeaders,\n };\n}\n\nexport async function createServerlessApp(deps: ServerProviderDeps, config?: ServerlessConfig) {\n const app = new Hono();\n const logger: Logger = getOrCreateLogger(deps, \"serverless\");\n\n const corsConfig = resolveCorsConfig(config);\n app.use(\"*\", cors(corsConfig));\n\n app.get(\"/\", (c) =>\n c.json({\n name: \"VoltAgent Serverless\",\n message: \"VoltAgent serverless runtime is running\",\n }),\n );\n\n // Provide a friendly response for WebSocket probes (Console UI polls /ws)\n app.get(\"/ws\", (c) =>\n c.json(\n {\n success: false,\n error:\n \"WebSocket streaming is not implemented in the serverless runtime yet. Falling back to HTTP polling.\",\n },\n 200,\n ),\n );\n\n registerAgentRoutes(app, deps, logger);\n registerWorkflowRoutes(app, deps, logger);\n registerToolRoutes(app, deps, logger);\n registerLogRoutes(app, deps, logger);\n registerUpdateRoutes(app, deps, logger);\n registerObservabilityRoutes(app, deps, logger);\n registerTriggerRoutes(app, deps, logger);\n registerA2ARoutes(app, deps, logger);\n\n if (config?.configureApp) {\n await config.configureApp(app, deps);\n }\n\n return app;\n}\n","import type { A2AServerRegistry, ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { safeStringify } from \"@voltagent/internal\";\nimport {\n getLogsBySpanIdHandler,\n getLogsByTraceIdHandler,\n getObservabilityStatusHandler,\n getSpanByIdHandler,\n getTraceByIdHandler,\n getTracesHandler,\n getWorkingMemoryHandler,\n listMemoryConversationsHandler,\n listMemoryUsersHandler,\n queryLogsHandler,\n} from \"@voltagent/server-core\";\nimport type {\n A2AServerLikeWithHandlers,\n JsonRpcRequest,\n JsonRpcResponse,\n} from \"@voltagent/server-core\";\nimport {\n type A2ARequestContext,\n A2A_ROUTES,\n AGENT_ROUTES,\n OBSERVABILITY_MEMORY_ROUTES,\n OBSERVABILITY_ROUTES,\n TOOL_ROUTES,\n type TriggerHttpRequestContext,\n UPDATE_ROUTES,\n WORKFLOW_ROUTES,\n executeA2ARequest,\n executeTriggerHandler,\n getConversationMessagesHandler,\n getConversationStepsHandler,\n handleChatStream,\n handleCheckUpdates,\n handleExecuteTool,\n handleExecuteWorkflow,\n handleGenerateObject,\n handleGenerateText,\n handleGetAgent,\n handleGetAgentHistory,\n handleGetAgents,\n handleGetLogs,\n handleGetWorkflow,\n handleGetWorkflowState,\n handleGetWorkflows,\n handleInstallUpdates,\n handleListTools,\n handleListWorkflowRuns,\n handleResumeWorkflow,\n handleStreamObject,\n handleStreamText,\n handleStreamWorkflow,\n handleSuspendWorkflow,\n isErrorResponse,\n mapLogResponse,\n parseJsonRpcRequest,\n resolveAgentCard,\n} from \"@voltagent/server-core\";\nimport type { Hono } from \"hono\";\n\nfunction parseJsonSafe<T>(raw: string, logger: Logger): T | undefined {\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n logger.warn(\"Failed to parse JSON payload\", { error });\n return undefined;\n }\n}\n\nasync function readJsonBody<T>(c: any, logger: Logger): Promise<T | undefined> {\n try {\n return (await c.req.json()) as T;\n } catch (error) {\n logger.warn(\"Invalid JSON body received\", { error, path: c.req.path });\n return undefined;\n }\n}\n\nfunction extractHeaders(\n headers: Headers | NodeJS.Dict<string | string[] | undefined>,\n): Record<string, string> {\n if (headers instanceof Headers) {\n return Object.fromEntries(headers.entries());\n }\n\n const result: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (typeof value === \"string\") {\n result[key] = value;\n } else if (Array.isArray(value)) {\n result[key] = value.join(\", \");\n }\n });\n return result;\n}\n\nfunction parseContextCandidate(candidate: unknown): A2ARequestContext | undefined {\n if (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n return undefined;\n }\n\n const { userId, sessionId, metadata } = candidate as Record<string, unknown>;\n const context: A2ARequestContext = {};\n\n if (typeof userId === \"string\") {\n context.userId = userId;\n }\n\n if (typeof sessionId === \"string\") {\n context.sessionId = sessionId;\n }\n\n if (metadata && typeof metadata === \"object\" && !Array.isArray(metadata)) {\n context.metadata = metadata as Record<string, unknown>;\n }\n\n return Object.keys(context).length > 0 ? context : undefined;\n}\n\nfunction mergeContexts(\n base: A2ARequestContext | undefined,\n next: A2ARequestContext | undefined,\n): A2ARequestContext | undefined {\n if (!base) {\n return next;\n }\n if (!next) {\n return base;\n }\n\n const merged: A2ARequestContext = {\n ...base,\n ...next,\n };\n\n if (base.metadata || next.metadata) {\n merged.metadata = {\n ...(base.metadata ?? {}),\n ...(next.metadata ?? {}),\n };\n }\n\n return merged;\n}\n\nexport function registerAgentRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(AGENT_ROUTES.listAgents.path, async (c) => {\n const response = await handleGetAgents(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(AGENT_ROUTES.getAgent.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const response = await handleGetAgent(agentId, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.generateText.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const response = await handleGenerateText(agentId, body, deps, logger, signal);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.streamText.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const response = await handleStreamText(agentId, body, deps, logger, signal);\n return response;\n });\n\n app.post(AGENT_ROUTES.chatStream.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n return handleChatStream(agentId, body, deps, logger, signal);\n });\n\n app.post(AGENT_ROUTES.generateObject.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const response = await handleGenerateObject(agentId, body, deps, logger, signal);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.streamObject.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n return handleStreamObject(agentId, body, deps, logger, signal);\n });\n\n app.get(AGENT_ROUTES.getAgentHistory.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const page = Number.parseInt(c.req.query(\"page\") || \"0\", 10);\n const limit = Number.parseInt(c.req.query(\"limit\") || \"10\", 10);\n const response = await handleGetAgentHistory(agentId, page, limit, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n}\n\nexport function registerWorkflowRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(WORKFLOW_ROUTES.listWorkflows.path, async (c) => {\n const response = await handleGetWorkflows(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(WORKFLOW_ROUTES.getWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const response = await handleGetWorkflow(workflowId, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.executeWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const response = await handleExecuteWorkflow(workflowId, body, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.streamWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const response = await handleStreamWorkflow(workflowId, body, deps, logger);\n\n if (isErrorResponse(response)) {\n return c.json(response, 500);\n }\n\n return c.body(response, 200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n });\n\n app.post(WORKFLOW_ROUTES.suspendWorkflow.path, async (c) => {\n const executionId = c.req.param(\"executionId\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const response = await handleSuspendWorkflow(executionId, body, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.resumeWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const executionId = c.req.param(\"executionId\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const response = await handleResumeWorkflow(workflowId, executionId, body, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(WORKFLOW_ROUTES.listWorkflowRuns.path, async (c) => {\n const query = c.req.query();\n const response = await handleListWorkflowRuns(undefined, query, deps, logger);\n const status = response.success ? 200 : response.error?.includes(\"not found\") ? 404 : 500;\n return c.json(response, status);\n });\n\n app.get(WORKFLOW_ROUTES.getWorkflowState.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const executionId = c.req.param(\"executionId\");\n const response = await handleGetWorkflowState(workflowId, executionId, deps, logger);\n const status = response.success ? 200 : response.error?.includes(\"not found\") ? 404 : 500;\n return c.json(response, status);\n });\n}\n\nexport function registerToolRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(TOOL_ROUTES.listTools.path, async (c) => {\n const response = await handleListTools(deps, logger);\n const status = response.success ? 200 : response.httpStatus || 500;\n return c.json(response, status);\n });\n\n app.post(TOOL_ROUTES.executeTool.path, async (c) => {\n const toolName = c.req.param(\"name\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n\n const response = await handleExecuteTool(toolName, body, deps, logger);\n const status = response.success ? 200 : response.httpStatus || 500;\n return c.json(response, status);\n });\n}\n\nexport function registerLogRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(\"/logs\", async (c) => {\n const query = c.req.query();\n const options = {\n limit: query.limit ? Number(query.limit) : undefined,\n level: query.level as any,\n agentId: query.agentId,\n workflowId: query.workflowId,\n conversationId: query.conversationId,\n executionId: query.executionId,\n since: query.since,\n until: query.until,\n };\n\n const response = await handleGetLogs(options, deps, logger);\n if (!response.success) {\n return c.json(response, 500);\n }\n\n const mapped = mapLogResponse(response);\n return c.json(mapped, 200);\n });\n}\n\nexport function registerUpdateRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(UPDATE_ROUTES.checkUpdates.path, async (c) => {\n const response = await handleCheckUpdates(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(UPDATE_ROUTES.installUpdates.path, async (c) => {\n const body = (await readJsonBody<{ packageName?: string }>(c, logger)) ?? {};\n const response = await handleInstallUpdates(body.packageName, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n}\n\nexport function registerObservabilityRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.post(OBSERVABILITY_ROUTES.setupObservability.path, (c) =>\n c.json(\n {\n success: false,\n error: \"Observability setup is not available in the serverless runtime.\",\n },\n 501,\n ),\n );\n\n app.get(OBSERVABILITY_ROUTES.getTraces.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/traces\", { query });\n const result = await getTracesHandler(deps, query);\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_ROUTES.getTraceById.path, async (c) => {\n const traceId = c.req.param(\"traceId\");\n logger.debug(\"[serverless] GET /observability/traces/:traceId\", { traceId });\n const result = await getTraceByIdHandler(traceId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getSpanById.path, async (c) => {\n const spanId = c.req.param(\"spanId\");\n logger.debug(\"[serverless] GET /observability/spans/:spanId\", { spanId });\n const result = await getSpanByIdHandler(spanId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getObservabilityStatus.path, async (c) => {\n logger.debug(\"[serverless] GET /observability/status\");\n const result = await getObservabilityStatusHandler(deps);\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_ROUTES.getLogsByTraceId.path, async (c) => {\n const traceId = c.req.param(\"traceId\");\n logger.debug(\"[serverless] GET /observability/traces/:traceId/logs\", { traceId });\n const result = await getLogsByTraceIdHandler(traceId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getLogsBySpanId.path, async (c) => {\n const spanId = c.req.param(\"spanId\");\n logger.debug(\"[serverless] GET /observability/spans/:spanId/logs\", { spanId });\n const result = await getLogsBySpanIdHandler(spanId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.queryLogs.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/logs\", { query });\n const result = await queryLogsHandler(query, deps);\n return c.json(result, result.success ? 200 : 400);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.listMemoryUsers.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/users\", { query });\n const result = await listMemoryUsersHandler(deps, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n offset: query.offset ? Number.parseInt(query.offset, 10) : undefined,\n search: query.search,\n });\n\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.listMemoryConversations.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/conversations\", { query });\n const result = await listMemoryConversationsHandler(deps, {\n agentId: query.agentId,\n userId: query.userId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n offset: query.offset ? Number.parseInt(query.offset, 10) : undefined,\n orderBy: query.orderBy as \"created_at\" | \"updated_at\" | \"title\" | undefined,\n orderDirection: query.orderDirection as \"ASC\" | \"DESC\" | undefined,\n });\n\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getMemoryConversationMessages.path, async (c) => {\n const conversationId = c.req.param(\"conversationId\");\n const query = c.req.query();\n logger.debug(\n `[serverless] GET /observability/memory/conversations/${conversationId}/messages`,\n { query },\n );\n\n const before = query.before ? new Date(query.before) : undefined;\n const after = query.after ? new Date(query.after) : undefined;\n\n const result = await getConversationMessagesHandler(deps, conversationId, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n before: before && !Number.isNaN(before.getTime()) ? before : undefined,\n after: after && !Number.isNaN(after.getTime()) ? after : undefined,\n roles: query.roles ? query.roles.split(\",\") : undefined,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Conversation not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getConversationSteps.path, async (c) => {\n const conversationId = c.req.param(\"conversationId\");\n const query = c.req.query();\n logger.debug(`[serverless] GET /observability/memory/conversations/${conversationId}/steps`, {\n query,\n });\n\n const result = await getConversationStepsHandler(deps, conversationId, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n operationId: query.operationId,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Conversation not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getWorkingMemory.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/working-memory\", { query });\n\n const scope =\n query.scope === \"user\" ? \"user\" : query.scope === \"conversation\" ? \"conversation\" : undefined;\n\n if (!scope) {\n return c.json(\n { success: false, error: \"Invalid scope. Expected 'conversation' or 'user'.\" },\n 400,\n );\n }\n\n const result = await getWorkingMemoryHandler(deps, {\n agentId: query.agentId,\n scope,\n conversationId: query.conversationId,\n userId: query.userId,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Working memory not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n}\n\nexport function registerTriggerRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n const triggers = deps.triggerRegistry.list();\n triggers.forEach((trigger) => {\n const method = trigger.method ?? \"post\";\n const handler = async (c: any) => {\n const body = await readJsonBody<unknown>(c, logger);\n const queryParams = c.req.query();\n const context: TriggerHttpRequestContext = {\n body,\n headers: extractHeaders(c.req.raw?.headers ?? new Headers()),\n query:\n queryParams && typeof queryParams === \"object\"\n ? { ...queryParams }\n : ({} as Record<string, string>),\n raw: c.req.raw,\n };\n\n const response = await executeTriggerHandler(trigger, context, deps, logger);\n\n // Ensure spans are flushed (using waitUntil if available)\n // This is critical for serverless environments to avoid orphan spans\n const observability = deps.observability as any;\n if (observability?.flushOnFinish) {\n await observability.flushOnFinish();\n } else if (observability?.forceFlush) {\n await observability.forceFlush();\n }\n\n return c.json(response.body ?? { success: true }, response.status, response.headers);\n };\n\n if (typeof (app as any)[method] !== \"function\") {\n logger.warn(\n `Skipping trigger ${trigger.name}: method ${method} is not supported in the serverless adapter`,\n );\n return;\n }\n\n (app as any)[method](trigger.path, handler);\n logger.info(\"[volt] Trigger route registered\", {\n trigger: trigger.name,\n method: method.toUpperCase(),\n path: trigger.path,\n });\n });\n}\n\nexport function registerA2ARoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n const registry = deps.a2a?.registry as A2AServerRegistry<A2AServerLikeWithHandlers> | undefined;\n\n if (!registry) {\n logger.debug(\"A2A server registry not available on server deps; skipping A2A routes\");\n return;\n }\n\n app.get(A2A_ROUTES.agentCard.path, (c) => {\n const serverId = c.req.param(\"serverId\");\n if (!serverId) {\n return c.json({ success: false, error: \"Missing serverId parameter\" }, 400);\n }\n try {\n const card = resolveAgentCard(registry, serverId, serverId, {});\n return c.json(card, 200);\n } catch (error) {\n const status = error instanceof Error && error.message.includes(\"not found\") ? 404 : 400;\n return c.json(\n { success: false, error: error instanceof Error ? error.message : String(error) },\n status,\n );\n }\n });\n\n app.post(A2A_ROUTES.jsonRpc.path, async (c) => {\n const serverId = c.req.param(\"serverId\");\n if (!serverId) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: \"Missing serverId\" }, id: null },\n 400,\n );\n }\n type JsonRpcPayload = ReturnType<typeof parseJsonRpcRequest>;\n let request: JsonRpcPayload | undefined;\n let context: A2ARequestContext | undefined;\n\n try {\n const queryContext = c.req.query(\"context\") ?? c.req.query(\"runtimeContext\");\n if (queryContext) {\n const parsedQueryContext = parseJsonSafe<Record<string, unknown>>(queryContext, logger);\n context = mergeContexts(context, parseContextCandidate(parsedQueryContext));\n }\n\n const body = await readJsonBody<Record<string, unknown> | JsonRpcRequest | JsonRpcRequest[]>(\n c,\n logger,\n );\n if (!body) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: \"Invalid request\" }, id: null },\n 400,\n );\n }\n\n if (typeof (body as Record<string, unknown>).context !== \"undefined\") {\n const { context: bodyContext, ...rest } = body as Record<string, unknown>;\n context = mergeContexts(context, parseContextCandidate(bodyContext));\n request = parseJsonRpcRequest(rest as unknown);\n } else {\n request = parseJsonRpcRequest(body as unknown);\n }\n } catch (error) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: String(error) }, id: null },\n 400,\n );\n }\n\n const response = await executeA2ARequest({\n registry,\n serverId,\n request,\n context,\n logger,\n });\n\n if (\"kind\" in response && response.kind === \"stream\") {\n const { stream, id } = response;\n const encoder = new TextEncoder();\n const abortSignal = c.req.raw.signal;\n let abortListener: (() => void) | undefined;\n let cleanedUp = false;\n\n const cleanup = async () => {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n abortListener = undefined;\n }\n if (!cleanedUp && typeof stream.return === \"function\") {\n cleanedUp = true;\n try {\n await stream.return(undefined as any);\n } catch {\n // ignore completion errors\n }\n }\n };\n\n const sseStream = new ReadableStream<Uint8Array>({\n async start(controller) {\n if (abortSignal) {\n if (abortSignal.aborted) {\n await cleanup();\n controller.close();\n return;\n }\n\n abortListener = () => {\n controller.close();\n void cleanup();\n };\n\n abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n for await (const chunk of stream) {\n const payload = safeStringify(chunk);\n controller.enqueue(encoder.encode(`data: \\u001E${payload}\\n\\n`));\n }\n } catch (error) {\n const payload = safeStringify({\n jsonrpc: \"2.0\",\n error: { code: -32603, message: String(error) },\n id,\n });\n controller.enqueue(encoder.encode(`data: \\u001E${payload}\\n\\n`));\n } finally {\n await cleanup();\n controller.close();\n }\n },\n async cancel() {\n await cleanup();\n },\n });\n\n return new Response(sseStream, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\",\n },\n });\n }\n\n const jsonResponse = response as JsonRpcResponse;\n return c.json(jsonResponse, jsonResponse.error ? 400 : 200);\n });\n}\n","import type { ServerlessRuntime } from \"../types\";\n\nexport function detectServerlessRuntime(): ServerlessRuntime {\n // @ts-ignore - Cloudflare Workers expose globalThis.Deno but with specific flags\n if (typeof globalThis.Deno !== \"undefined\") {\n return \"deno\";\n }\n\n // @ts-ignore - Vercel Edge Runtime sets EdgeRuntime global\n if (typeof globalThis.EdgeRuntime !== \"undefined\") {\n return \"vercel\";\n }\n\n // @ts-ignore - Cloudflare Workers include navigator.userAgent\n if (globalThis.navigator?.userAgent?.includes(\"Cloudflare\")) {\n return \"cloudflare\";\n }\n\n return \"unknown\";\n}\n","type VoltAgentGlobal = typeof globalThis & {\n ___voltagent_wait_until?: (promise: Promise<unknown>) => void;\n};\n\n/**\n * Context that may contain a waitUntil function\n */\nexport interface WaitUntilContext {\n waitUntil?: (promise: Promise<unknown>) => void;\n}\n\n/**\n * Extracts waitUntil from context and sets it as global for observability\n * Returns a cleanup function to restore previous state\n *\n * @param context - Context object that may contain waitUntil\n * @returns Cleanup function to restore previous state\n *\n * @example\n * ```ts\n * const cleanup = withWaitUntil(executionCtx);\n * try {\n * return await processRequest(request);\n * } finally {\n * cleanup();\n * }\n * ```\n */\nexport function withWaitUntil(context?: WaitUntilContext | null): () => void {\n const globals = globalThis as VoltAgentGlobal;\n const previousWaitUntil = globals.___voltagent_wait_until;\n\n const currentWaitUntil = context?.waitUntil;\n\n if (currentWaitUntil && typeof currentWaitUntil === \"function\") {\n // Bind to context to avoid \"Illegal invocation\" errors\n // And allow errors (like DataCloneError) to propagate so caller can handle fallback\n globals.___voltagent_wait_until = currentWaitUntil.bind(context);\n } else {\n globals.___voltagent_wait_until = undefined;\n }\n\n // Return cleanup function\n return () => {\n if (currentWaitUntil) {\n if (previousWaitUntil) {\n globals.___voltagent_wait_until = previousWaitUntil;\n } else {\n globals.___voltagent_wait_until = undefined;\n }\n }\n };\n}\n","import type { IServerlessProvider, ServerProviderDeps } from \"@voltagent/core\";\nimport type { Hono } from \"hono\";\nimport { createServerlessApp } from \"./app-factory\";\nimport type { ServerlessConfig, ServerlessRuntime } from \"./types\";\nimport { detectServerlessRuntime } from \"./utils/runtime-detection\";\nimport { withWaitUntil } from \"./utils/wait-until-wrapper\";\nexport class HonoServerlessProvider implements IServerlessProvider {\n private readonly deps: ServerProviderDeps;\n private readonly config?: ServerlessConfig;\n private readonly appPromise: Promise<Hono>;\n\n constructor(deps: ServerProviderDeps, config?: ServerlessConfig) {\n this.deps = deps;\n this.config = config;\n this.appPromise = this.initializeApp();\n }\n\n private async initializeApp(): Promise<Hono> {\n return createServerlessApp(this.deps, this.config);\n }\n\n private async getApp(): Promise<Hono> {\n return this.appPromise;\n }\n\n private async ensureEnvironmentTarget(target?: Record<string, unknown>): Promise<void> {\n if (this.deps.ensureEnvironment) {\n await Promise.resolve(this.deps.ensureEnvironment(target));\n }\n }\n\n async handleRequest(request: Request): Promise<Response> {\n await this.ensureEnvironmentTarget();\n const app = await this.getApp();\n return app.fetch(request);\n }\n\n toCloudflareWorker() {\n return {\n fetch: async (\n request: Request,\n env: Record<string, unknown>,\n executionCtx: unknown,\n ): Promise<Response> => {\n const cleanup = withWaitUntil(executionCtx as any);\n\n try {\n await this.ensureEnvironmentTarget(env);\n const app = await this.getApp();\n return await app.fetch(request, env as Record<string, unknown>, executionCtx as any);\n } finally {\n cleanup();\n }\n },\n };\n }\n\n toVercelEdge(): (request: Request, context?: unknown) => Promise<Response> {\n return async (request: Request, context?: unknown) => {\n const cleanup = withWaitUntil(context as any);\n\n try {\n await this.ensureEnvironmentTarget(context as Record<string, unknown> | undefined);\n const app = await this.getApp();\n return await app.fetch(request, context as Record<string, unknown> | undefined);\n } finally {\n cleanup();\n }\n };\n }\n\n toDeno(): (request: Request, info?: unknown) => Promise<Response> {\n return async (request: Request, info?: unknown) => {\n const cleanup = withWaitUntil(info as any);\n\n try {\n await this.ensureEnvironmentTarget(info as Record<string, unknown> | undefined);\n const app = await this.getApp();\n return await app.fetch(request, info as Record<string, unknown> | undefined);\n } finally {\n cleanup();\n }\n };\n }\n\n auto():\n | { fetch: (req: Request, env: Record<string, unknown>, ctx: unknown) => Promise<Response> }\n | ((req: Request, ctx?: unknown) => Promise<Response>) {\n const runtime: ServerlessRuntime = detectServerlessRuntime();\n\n switch (runtime) {\n case \"cloudflare\":\n return this.toCloudflareWorker();\n case \"vercel\":\n return this.toVercelEdge();\n case \"deno\":\n return this.toDeno();\n default:\n return this.toCloudflareWorker();\n }\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { VoltAgent } from \"@voltagent/core\";\n\ninterface NetlifyFunctionEvent {\n httpMethod?: string;\n headers?: Record<string, string | undefined>;\n multiValueHeaders?: Record<string, (string | undefined)[] | undefined>;\n rawUrl?: string;\n rawQuery?: string;\n rawPath?: string;\n path?: string;\n body?: string | null;\n isBase64Encoded?: boolean;\n}\n\ninterface NetlifyFunctionResult {\n statusCode: number;\n headers?: Record<string, string>;\n multiValueHeaders?: Record<string, string[]>;\n body: string;\n isBase64Encoded: boolean;\n}\n\ntype NetlifyFunctionHandler = (\n event: NetlifyFunctionEvent,\n context: unknown,\n) => Promise<NetlifyFunctionResult>;\n\nconst TEXT_BODY_METHODS = new Set([\"GET\", \"HEAD\"]);\n\nfunction buildUrl(event: NetlifyFunctionEvent): string {\n const scheme = event.headers?.[\"x-forwarded-proto\"] || \"https\";\n const host = event.headers?.host || \"localhost\";\n const path = event.rawPath || event.path || \"/\";\n const query = event.rawQuery ? `?${event.rawQuery}` : \"\";\n return `${scheme}://${host}${path}${query}`;\n}\n\nfunction createRequest(event: NetlifyFunctionEvent): Request {\n const method = (event.httpMethod || \"GET\").toUpperCase();\n const headers = new Headers();\n\n if (event.multiValueHeaders) {\n for (const [key, values] of Object.entries(event.multiValueHeaders)) {\n if (!values) continue;\n for (const value of values) {\n if (value !== undefined) {\n headers.append(key, value);\n }\n }\n }\n }\n\n if (event.headers) {\n for (const [key, value] of Object.entries(event.headers)) {\n if (value !== undefined) {\n headers.set(key, value);\n }\n }\n }\n\n const url = event.rawUrl || buildUrl(event);\n\n const init: Record<string, unknown> = { method, headers };\n\n if (!TEXT_BODY_METHODS.has(method) && event.body) {\n init.body = event.isBase64Encoded ? Buffer.from(event.body, \"base64\") : event.body;\n }\n\n return new Request(url, init as RequestInit);\n}\n\nfunction toNetlifyResponse(response: Response): Promise<NetlifyFunctionResult> {\n const single: Record<string, string> = {};\n const multi: Record<string, string[]> = {};\n\n response.headers.forEach((value, key) => {\n if (single[key]) {\n multi[key] = [single[key], value];\n delete single[key];\n } else if (multi[key]) {\n multi[key].push(value);\n } else {\n single[key] = value;\n }\n });\n\n return response.arrayBuffer().then((buffer) => ({\n statusCode: response.status,\n headers: Object.keys(single).length > 0 ? single : undefined,\n multiValueHeaders: Object.keys(multi).length > 0 ? multi : undefined,\n body: Buffer.from(buffer).toString(\"base64\"),\n isBase64Encoded: true,\n }));\n}\n\nexport function createNetlifyFunctionHandler(voltAgent: VoltAgent): NetlifyFunctionHandler {\n const provider = voltAgent.serverless();\n\n return async (event) => {\n const request = createRequest(event);\n const response = await provider.handleRequest(request);\n return toNetlifyResponse(response);\n };\n}\n\nexport type { NetlifyFunctionHandler, NetlifyFunctionEvent, NetlifyFunctionResult };\n","import type { ServerProviderDeps } from \"@voltagent/core\";\nimport { HonoServerlessProvider } from \"./serverless-provider\";\nimport type { ServerlessConfig } from \"./types\";\n\nexport function serverlessHono(config?: ServerlessConfig) {\n return (deps: ServerProviderDeps) => new HonoServerlessProvider(deps, config);\n}\n\nexport { HonoServerlessProvider } from \"./serverless-provider\";\nexport type { ServerlessConfig, ServerlessRuntime } from \"./types\";\nexport { detectServerlessRuntime } from \"./utils/runtime-detection\";\nexport {\n createNetlifyFunctionHandler,\n type NetlifyFunctionEvent,\n type NetlifyFunctionHandler,\n type NetlifyFunctionResult,\n} from \"./netlify-function\";\nexport default serverlessHono;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/app-factory.ts","../src/routes.ts","../src/utils/runtime-detection.ts","../src/utils/wait-until-wrapper.ts","../src/serverless-provider.ts","../src/netlify-function.ts","../src/index.ts"],"sourcesContent":["import type { ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { getOrCreateLogger } from \"@voltagent/server-core\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport {\n registerA2ARoutes,\n registerAgentRoutes,\n registerLogRoutes,\n registerObservabilityRoutes,\n registerToolRoutes,\n registerTriggerRoutes,\n registerUpdateRoutes,\n registerWorkflowRoutes,\n} from \"./routes\";\nimport type { ServerlessConfig } from \"./types\";\n\nfunction resolveCorsConfig(config?: ServerlessConfig) {\n const origin = config?.corsOrigin ?? \"*\";\n const allowMethods = config?.corsAllowMethods ?? [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n ];\n const allowHeaders = config?.corsAllowHeaders ?? [\n \"Content-Type\",\n \"Authorization\",\n \"x-voltagent-dev\",\n \"x-console-access-key\",\n ];\n\n return {\n origin,\n allowMethods,\n allowHeaders,\n };\n}\n\nexport async function createServerlessApp(deps: ServerProviderDeps, config?: ServerlessConfig) {\n const app = new Hono();\n const logger: Logger = getOrCreateLogger(deps, \"serverless\");\n\n const corsConfig = resolveCorsConfig(config);\n app.use(\"*\", cors(corsConfig));\n\n app.get(\"/\", (c) =>\n c.json({\n name: \"VoltAgent Serverless\",\n message: \"VoltAgent serverless runtime is running\",\n }),\n );\n\n // Provide a friendly response for WebSocket probes (Console UI polls /ws)\n app.get(\"/ws\", (c) =>\n c.json(\n {\n success: false,\n error:\n \"WebSocket streaming is not implemented in the serverless runtime yet. Falling back to HTTP polling.\",\n },\n 200,\n ),\n );\n\n registerAgentRoutes(app, deps, logger);\n registerWorkflowRoutes(app, deps, logger);\n registerToolRoutes(app, deps, logger);\n registerLogRoutes(app, deps, logger);\n registerUpdateRoutes(app, deps, logger);\n registerObservabilityRoutes(app, deps, logger);\n registerTriggerRoutes(app, deps, logger);\n registerA2ARoutes(app, deps, logger);\n\n if (config?.configureApp) {\n await config.configureApp(app, deps);\n }\n\n return app;\n}\n","import {\n type A2AServerRegistry,\n SERVERLESS_ENV_CONTEXT_KEY,\n type ServerProviderDeps,\n} from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { safeStringify } from \"@voltagent/internal\";\nimport {\n getLogsBySpanIdHandler,\n getLogsByTraceIdHandler,\n getObservabilityStatusHandler,\n getSpanByIdHandler,\n getTraceByIdHandler,\n getTracesHandler,\n getWorkingMemoryHandler,\n listMemoryConversationsHandler,\n listMemoryUsersHandler,\n queryLogsHandler,\n} from \"@voltagent/server-core\";\nimport type {\n A2AServerLikeWithHandlers,\n JsonRpcRequest,\n JsonRpcResponse,\n} from \"@voltagent/server-core\";\nimport {\n type A2ARequestContext,\n A2A_ROUTES,\n AGENT_ROUTES,\n OBSERVABILITY_MEMORY_ROUTES,\n OBSERVABILITY_ROUTES,\n TOOL_ROUTES,\n type TriggerHttpRequestContext,\n UPDATE_ROUTES,\n WORKFLOW_ROUTES,\n executeA2ARequest,\n executeTriggerHandler,\n getConversationMessagesHandler,\n getConversationStepsHandler,\n handleChatStream,\n handleCheckUpdates,\n handleExecuteTool,\n handleExecuteWorkflow,\n handleGenerateObject,\n handleGenerateText,\n handleGetAgent,\n handleGetAgentHistory,\n handleGetAgents,\n handleGetLogs,\n handleGetWorkflow,\n handleGetWorkflowState,\n handleGetWorkflows,\n handleInstallUpdates,\n handleListTools,\n handleListWorkflowRuns,\n handleResumeWorkflow,\n handleStreamObject,\n handleStreamText,\n handleStreamWorkflow,\n handleSuspendWorkflow,\n isErrorResponse,\n mapLogResponse,\n parseJsonRpcRequest,\n resolveAgentCard,\n} from \"@voltagent/server-core\";\nimport type { Hono } from \"hono\";\n\nfunction parseJsonSafe<T>(raw: string, logger: Logger): T | undefined {\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n logger.warn(\"Failed to parse JSON payload\", { error });\n return undefined;\n }\n}\n\nasync function readJsonBody<T>(c: any, logger: Logger): Promise<T | undefined> {\n try {\n return (await c.req.json()) as T;\n } catch (error) {\n logger.warn(\"Invalid JSON body received\", { error, path: c.req.path });\n return undefined;\n }\n}\n\nfunction extractHeaders(\n headers: Headers | NodeJS.Dict<string | string[] | undefined>,\n): Record<string, string> {\n if (headers instanceof Headers) {\n return Object.fromEntries(headers.entries());\n }\n\n const result: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (typeof value === \"string\") {\n result[key] = value;\n } else if (Array.isArray(value)) {\n result[key] = value.join(\", \");\n }\n });\n return result;\n}\n\ntype ServerlessEnv = Record<string, unknown>;\n\nfunction getServerlessEnv(c: { env?: unknown }): ServerlessEnv | undefined {\n const env = c?.env;\n if (!env || typeof env !== \"object\" || Array.isArray(env)) {\n return undefined;\n }\n return env as ServerlessEnv;\n}\n\nfunction mergeContextWithServerlessEnv(\n context: unknown,\n env: ServerlessEnv | undefined,\n): Map<string | symbol, unknown> | undefined {\n if (!env) {\n return context instanceof Map ? context : undefined;\n }\n\n const contextMap =\n context instanceof Map\n ? context\n : context && typeof context === \"object\" && !Array.isArray(context)\n ? new Map(Object.entries(context as Record<string, unknown>))\n : new Map<string | symbol, unknown>();\n\n if (!contextMap.has(SERVERLESS_ENV_CONTEXT_KEY)) {\n contextMap.set(SERVERLESS_ENV_CONTEXT_KEY, env);\n }\n\n return contextMap;\n}\n\nfunction withServerlessEnvInOptions(body: any, env: ServerlessEnv | undefined) {\n if (!env || !body || typeof body !== \"object\") {\n return body;\n }\n\n const options =\n body.options && typeof body.options === \"object\" && !Array.isArray(body.options)\n ? body.options\n : {};\n\n const context = mergeContextWithServerlessEnv(options.context, env);\n\n return {\n ...body,\n options: {\n ...options,\n context: context ?? options.context,\n },\n };\n}\n\nfunction withServerlessEnvInContext(body: any, env: ServerlessEnv | undefined) {\n if (!env || !body || typeof body !== \"object\") {\n return body;\n }\n\n const context = mergeContextWithServerlessEnv(body.context, env);\n\n return {\n ...body,\n context: context ?? body.context,\n };\n}\n\nfunction parseContextCandidate(candidate: unknown): A2ARequestContext | undefined {\n if (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n return undefined;\n }\n\n const { userId, sessionId, metadata } = candidate as Record<string, unknown>;\n const context: A2ARequestContext = {};\n\n if (typeof userId === \"string\") {\n context.userId = userId;\n }\n\n if (typeof sessionId === \"string\") {\n context.sessionId = sessionId;\n }\n\n if (metadata && typeof metadata === \"object\" && !Array.isArray(metadata)) {\n context.metadata = metadata as Record<string, unknown>;\n }\n\n return Object.keys(context).length > 0 ? context : undefined;\n}\n\nfunction mergeContexts(\n base: A2ARequestContext | undefined,\n next: A2ARequestContext | undefined,\n): A2ARequestContext | undefined {\n if (!base) {\n return next;\n }\n if (!next) {\n return base;\n }\n\n const merged: A2ARequestContext = {\n ...base,\n ...next,\n };\n\n if (base.metadata || next.metadata) {\n merged.metadata = {\n ...(base.metadata ?? {}),\n ...(next.metadata ?? {}),\n };\n }\n\n return merged;\n}\n\nexport function registerAgentRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(AGENT_ROUTES.listAgents.path, async (c) => {\n const response = await handleGetAgents(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(AGENT_ROUTES.getAgent.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const response = await handleGetAgent(agentId, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.generateText.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleGenerateText(\n agentId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n signal,\n );\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.streamText.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleStreamText(\n agentId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n signal,\n );\n return response;\n });\n\n app.post(AGENT_ROUTES.chatStream.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const runtimeEnv = getServerlessEnv(c);\n return handleChatStream(\n agentId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n signal,\n );\n });\n\n app.post(AGENT_ROUTES.generateObject.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleGenerateObject(\n agentId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n signal,\n );\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(AGENT_ROUTES.streamObject.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n const signal = c.req.raw.signal;\n const runtimeEnv = getServerlessEnv(c);\n return handleStreamObject(\n agentId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n signal,\n );\n });\n\n app.get(AGENT_ROUTES.getAgentHistory.path, async (c) => {\n const agentId = c.req.param(\"id\");\n const page = Number.parseInt(c.req.query(\"page\") || \"0\", 10);\n const limit = Number.parseInt(c.req.query(\"limit\") || \"10\", 10);\n const response = await handleGetAgentHistory(agentId, page, limit, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n}\n\nexport function registerWorkflowRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(WORKFLOW_ROUTES.listWorkflows.path, async (c) => {\n const response = await handleGetWorkflows(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(WORKFLOW_ROUTES.getWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const response = await handleGetWorkflow(workflowId, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.executeWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleExecuteWorkflow(\n workflowId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n );\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.streamWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleStreamWorkflow(\n workflowId,\n withServerlessEnvInOptions(body, runtimeEnv),\n deps,\n logger,\n );\n\n if (isErrorResponse(response)) {\n return c.json(response, 500);\n }\n\n return c.body(response, 200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n });\n\n app.post(WORKFLOW_ROUTES.suspendWorkflow.path, async (c) => {\n const executionId = c.req.param(\"executionId\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const response = await handleSuspendWorkflow(executionId, body, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(WORKFLOW_ROUTES.resumeWorkflow.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const executionId = c.req.param(\"executionId\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n const response = await handleResumeWorkflow(workflowId, executionId, body, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.get(WORKFLOW_ROUTES.listWorkflowRuns.path, async (c) => {\n const query = c.req.query();\n const response = await handleListWorkflowRuns(undefined, query, deps, logger);\n const status = response.success ? 200 : response.error?.includes(\"not found\") ? 404 : 500;\n return c.json(response, status);\n });\n\n app.get(WORKFLOW_ROUTES.getWorkflowState.path, async (c) => {\n const workflowId = c.req.param(\"id\");\n const executionId = c.req.param(\"executionId\");\n const response = await handleGetWorkflowState(workflowId, executionId, deps, logger);\n const status = response.success ? 200 : response.error?.includes(\"not found\") ? 404 : 500;\n return c.json(response, status);\n });\n}\n\nexport function registerToolRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(TOOL_ROUTES.listTools.path, async (c) => {\n const response = await handleListTools(deps, logger);\n const status = response.success ? 200 : response.httpStatus || 500;\n return c.json(response, status);\n });\n\n app.post(TOOL_ROUTES.executeTool.path, async (c) => {\n const toolName = c.req.param(\"name\");\n const body = await readJsonBody(c, logger);\n if (!body) {\n return c.json({ success: false, error: \"Invalid JSON body\" }, 400);\n }\n\n const runtimeEnv = getServerlessEnv(c);\n const response = await handleExecuteTool(\n toolName,\n withServerlessEnvInContext(body, runtimeEnv),\n deps,\n logger,\n );\n const status = response.success ? 200 : response.httpStatus || 500;\n return c.json(response, status);\n });\n}\n\nexport function registerLogRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(\"/logs\", async (c) => {\n const query = c.req.query();\n const options = {\n limit: query.limit ? Number(query.limit) : undefined,\n level: query.level as any,\n agentId: query.agentId,\n workflowId: query.workflowId,\n conversationId: query.conversationId,\n executionId: query.executionId,\n since: query.since,\n until: query.until,\n };\n\n const response = await handleGetLogs(options, deps, logger);\n if (!response.success) {\n return c.json(response, 500);\n }\n\n const mapped = mapLogResponse(response);\n return c.json(mapped, 200);\n });\n}\n\nexport function registerUpdateRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.get(UPDATE_ROUTES.checkUpdates.path, async (c) => {\n const response = await handleCheckUpdates(deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n\n app.post(UPDATE_ROUTES.installUpdates.path, async (c) => {\n const body = (await readJsonBody<{ packageName?: string }>(c, logger)) ?? {};\n const response = await handleInstallUpdates(body.packageName, deps, logger);\n return c.json(response, response.success ? 200 : 500);\n });\n}\n\nexport function registerObservabilityRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n app.post(OBSERVABILITY_ROUTES.setupObservability.path, (c) =>\n c.json(\n {\n success: false,\n error: \"Observability setup is not available in the serverless runtime.\",\n },\n 501,\n ),\n );\n\n app.get(OBSERVABILITY_ROUTES.getTraces.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/traces\", { query });\n const result = await getTracesHandler(deps, query);\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_ROUTES.getTraceById.path, async (c) => {\n const traceId = c.req.param(\"traceId\");\n logger.debug(\"[serverless] GET /observability/traces/:traceId\", { traceId });\n const result = await getTraceByIdHandler(traceId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getSpanById.path, async (c) => {\n const spanId = c.req.param(\"spanId\");\n logger.debug(\"[serverless] GET /observability/spans/:spanId\", { spanId });\n const result = await getSpanByIdHandler(spanId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getObservabilityStatus.path, async (c) => {\n logger.debug(\"[serverless] GET /observability/status\");\n const result = await getObservabilityStatusHandler(deps);\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_ROUTES.getLogsByTraceId.path, async (c) => {\n const traceId = c.req.param(\"traceId\");\n logger.debug(\"[serverless] GET /observability/traces/:traceId/logs\", { traceId });\n const result = await getLogsByTraceIdHandler(traceId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.getLogsBySpanId.path, async (c) => {\n const spanId = c.req.param(\"spanId\");\n logger.debug(\"[serverless] GET /observability/spans/:spanId/logs\", { spanId });\n const result = await getLogsBySpanIdHandler(spanId, deps);\n return c.json(result, result.success ? 200 : 404);\n });\n\n app.get(OBSERVABILITY_ROUTES.queryLogs.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/logs\", { query });\n const result = await queryLogsHandler(query, deps);\n return c.json(result, result.success ? 200 : 400);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.listMemoryUsers.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/users\", { query });\n const result = await listMemoryUsersHandler(deps, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n offset: query.offset ? Number.parseInt(query.offset, 10) : undefined,\n search: query.search,\n });\n\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.listMemoryConversations.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/conversations\", { query });\n const result = await listMemoryConversationsHandler(deps, {\n agentId: query.agentId,\n userId: query.userId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n offset: query.offset ? Number.parseInt(query.offset, 10) : undefined,\n orderBy: query.orderBy as \"created_at\" | \"updated_at\" | \"title\" | undefined,\n orderDirection: query.orderDirection as \"ASC\" | \"DESC\" | undefined,\n });\n\n return c.json(result, result.success ? 200 : 500);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getMemoryConversationMessages.path, async (c) => {\n const conversationId = c.req.param(\"conversationId\");\n const query = c.req.query();\n logger.debug(\n `[serverless] GET /observability/memory/conversations/${conversationId}/messages`,\n { query },\n );\n\n const before = query.before ? new Date(query.before) : undefined;\n const after = query.after ? new Date(query.after) : undefined;\n\n const result = await getConversationMessagesHandler(deps, conversationId, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n before: before && !Number.isNaN(before.getTime()) ? before : undefined,\n after: after && !Number.isNaN(after.getTime()) ? after : undefined,\n roles: query.roles ? query.roles.split(\",\") : undefined,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Conversation not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getConversationSteps.path, async (c) => {\n const conversationId = c.req.param(\"conversationId\");\n const query = c.req.query();\n logger.debug(`[serverless] GET /observability/memory/conversations/${conversationId}/steps`, {\n query,\n });\n\n const result = await getConversationStepsHandler(deps, conversationId, {\n agentId: query.agentId,\n limit: query.limit ? Number.parseInt(query.limit, 10) : undefined,\n operationId: query.operationId,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Conversation not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n\n app.get(OBSERVABILITY_MEMORY_ROUTES.getWorkingMemory.path, async (c) => {\n const query = c.req.query();\n logger.debug(\"[serverless] GET /observability/memory/working-memory\", { query });\n\n const scope =\n query.scope === \"user\" ? \"user\" : query.scope === \"conversation\" ? \"conversation\" : undefined;\n\n if (!scope) {\n return c.json(\n { success: false, error: \"Invalid scope. Expected 'conversation' or 'user'.\" },\n 400,\n );\n }\n\n const result = await getWorkingMemoryHandler(deps, {\n agentId: query.agentId,\n scope,\n conversationId: query.conversationId,\n userId: query.userId,\n });\n\n if (!result.success) {\n return c.json(result, result.error === \"Working memory not found\" ? 404 : 500);\n }\n\n return c.json(result, 200);\n });\n}\n\nexport function registerTriggerRoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n const triggers = deps.triggerRegistry.list();\n triggers.forEach((trigger) => {\n const method = trigger.method ?? \"post\";\n const handler = async (c: any) => {\n const body = await readJsonBody<unknown>(c, logger);\n const queryParams = c.req.query();\n const context: TriggerHttpRequestContext = {\n body,\n headers: extractHeaders(c.req.raw?.headers ?? new Headers()),\n query:\n queryParams && typeof queryParams === \"object\"\n ? { ...queryParams }\n : ({} as Record<string, string>),\n raw: c.req.raw,\n };\n\n const response = await executeTriggerHandler(trigger, context, deps, logger);\n\n // Ensure spans are flushed (using waitUntil if available)\n // This is critical for serverless environments to avoid orphan spans\n const observability = deps.observability as any;\n if (observability?.flushOnFinish) {\n await observability.flushOnFinish();\n } else if (observability?.forceFlush) {\n await observability.forceFlush();\n }\n\n return c.json(response.body ?? { success: true }, response.status, response.headers);\n };\n\n if (typeof (app as any)[method] !== \"function\") {\n logger.warn(\n `Skipping trigger ${trigger.name}: method ${method} is not supported in the serverless adapter`,\n );\n return;\n }\n\n (app as any)[method](trigger.path, handler);\n logger.info(\"[volt] Trigger route registered\", {\n trigger: trigger.name,\n method: method.toUpperCase(),\n path: trigger.path,\n });\n });\n}\n\nexport function registerA2ARoutes(app: Hono, deps: ServerProviderDeps, logger: Logger) {\n const registry = deps.a2a?.registry as A2AServerRegistry<A2AServerLikeWithHandlers> | undefined;\n\n if (!registry) {\n logger.debug(\"A2A server registry not available on server deps; skipping A2A routes\");\n return;\n }\n\n app.get(A2A_ROUTES.agentCard.path, (c) => {\n const serverId = c.req.param(\"serverId\");\n if (!serverId) {\n return c.json({ success: false, error: \"Missing serverId parameter\" }, 400);\n }\n try {\n const card = resolveAgentCard(registry, serverId, serverId, {});\n return c.json(card, 200);\n } catch (error) {\n const status = error instanceof Error && error.message.includes(\"not found\") ? 404 : 400;\n return c.json(\n { success: false, error: error instanceof Error ? error.message : String(error) },\n status,\n );\n }\n });\n\n app.post(A2A_ROUTES.jsonRpc.path, async (c) => {\n const serverId = c.req.param(\"serverId\");\n if (!serverId) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: \"Missing serverId\" }, id: null },\n 400,\n );\n }\n type JsonRpcPayload = ReturnType<typeof parseJsonRpcRequest>;\n let request: JsonRpcPayload | undefined;\n let context: A2ARequestContext | undefined;\n\n try {\n const queryContext = c.req.query(\"context\") ?? c.req.query(\"runtimeContext\");\n if (queryContext) {\n const parsedQueryContext = parseJsonSafe<Record<string, unknown>>(queryContext, logger);\n context = mergeContexts(context, parseContextCandidate(parsedQueryContext));\n }\n\n const body = await readJsonBody<Record<string, unknown> | JsonRpcRequest | JsonRpcRequest[]>(\n c,\n logger,\n );\n if (!body) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: \"Invalid request\" }, id: null },\n 400,\n );\n }\n\n if (typeof (body as Record<string, unknown>).context !== \"undefined\") {\n const { context: bodyContext, ...rest } = body as Record<string, unknown>;\n context = mergeContexts(context, parseContextCandidate(bodyContext));\n request = parseJsonRpcRequest(rest as unknown);\n } else {\n request = parseJsonRpcRequest(body as unknown);\n }\n } catch (error) {\n return c.json(\n { jsonrpc: \"2.0\", error: { code: -32600, message: String(error) }, id: null },\n 400,\n );\n }\n\n const response = await executeA2ARequest({\n registry,\n serverId,\n request,\n context,\n logger,\n });\n\n if (\"kind\" in response && response.kind === \"stream\") {\n const { stream, id } = response;\n const encoder = new TextEncoder();\n const abortSignal = c.req.raw.signal;\n let abortListener: (() => void) | undefined;\n let cleanedUp = false;\n\n const cleanup = async () => {\n if (abortSignal && abortListener) {\n abortSignal.removeEventListener(\"abort\", abortListener);\n abortListener = undefined;\n }\n if (!cleanedUp && typeof stream.return === \"function\") {\n cleanedUp = true;\n try {\n await stream.return(undefined as any);\n } catch {\n // ignore completion errors\n }\n }\n };\n\n const sseStream = new ReadableStream<Uint8Array>({\n async start(controller) {\n if (abortSignal) {\n if (abortSignal.aborted) {\n await cleanup();\n controller.close();\n return;\n }\n\n abortListener = () => {\n controller.close();\n void cleanup();\n };\n\n abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n for await (const chunk of stream) {\n const payload = safeStringify(chunk);\n controller.enqueue(encoder.encode(`data: \\u001E${payload}\\n\\n`));\n }\n } catch (error) {\n const payload = safeStringify({\n jsonrpc: \"2.0\",\n error: { code: -32603, message: String(error) },\n id,\n });\n controller.enqueue(encoder.encode(`data: \\u001E${payload}\\n\\n`));\n } finally {\n await cleanup();\n controller.close();\n }\n },\n async cancel() {\n await cleanup();\n },\n });\n\n return new Response(sseStream, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\",\n },\n });\n }\n\n const jsonResponse = response as JsonRpcResponse;\n return c.json(jsonResponse, jsonResponse.error ? 400 : 200);\n });\n}\n","import type { ServerlessRuntime } from \"../types\";\n\nexport function detectServerlessRuntime(): ServerlessRuntime {\n // @ts-ignore - Cloudflare Workers expose globalThis.Deno but with specific flags\n if (typeof globalThis.Deno !== \"undefined\") {\n return \"deno\";\n }\n\n // @ts-ignore - Vercel Edge Runtime sets EdgeRuntime global\n if (typeof globalThis.EdgeRuntime !== \"undefined\") {\n return \"vercel\";\n }\n\n // @ts-ignore - Cloudflare Workers include navigator.userAgent\n if (globalThis.navigator?.userAgent?.includes(\"Cloudflare\")) {\n return \"cloudflare\";\n }\n\n return \"unknown\";\n}\n","type VoltAgentGlobal = typeof globalThis & {\n ___voltagent_wait_until?: (promise: Promise<unknown>) => void;\n};\n\n/**\n * Context that may contain a waitUntil function\n */\nexport interface WaitUntilContext {\n waitUntil?: (promise: Promise<unknown>) => void;\n}\n\n/**\n * Extracts waitUntil from context and sets it as global for observability\n * Returns a cleanup function to restore previous state\n *\n * @param context - Context object that may contain waitUntil\n * @returns Cleanup function to restore previous state\n *\n * @example\n * ```ts\n * const cleanup = withWaitUntil(executionCtx);\n * try {\n * return await processRequest(request);\n * } finally {\n * cleanup();\n * }\n * ```\n */\nexport function withWaitUntil(context?: WaitUntilContext | null): () => void {\n const globals = globalThis as VoltAgentGlobal;\n const previousWaitUntil = globals.___voltagent_wait_until;\n\n const currentWaitUntil = context?.waitUntil;\n\n if (currentWaitUntil && typeof currentWaitUntil === \"function\") {\n // Bind to context to avoid \"Illegal invocation\" errors\n // And allow errors (like DataCloneError) to propagate so caller can handle fallback\n globals.___voltagent_wait_until = currentWaitUntil.bind(context);\n } else {\n globals.___voltagent_wait_until = undefined;\n }\n\n // Return cleanup function\n return () => {\n if (currentWaitUntil) {\n if (previousWaitUntil) {\n globals.___voltagent_wait_until = previousWaitUntil;\n } else {\n globals.___voltagent_wait_until = undefined;\n }\n }\n };\n}\n","import type { IServerlessProvider, ServerProviderDeps } from \"@voltagent/core\";\nimport type { Hono } from \"hono\";\nimport { createServerlessApp } from \"./app-factory\";\nimport type { ServerlessConfig, ServerlessRuntime } from \"./types\";\nimport { detectServerlessRuntime } from \"./utils/runtime-detection\";\nimport { withWaitUntil } from \"./utils/wait-until-wrapper\";\nexport class HonoServerlessProvider implements IServerlessProvider {\n private readonly deps: ServerProviderDeps;\n private readonly config?: ServerlessConfig;\n private readonly appPromise: Promise<Hono>;\n\n constructor(deps: ServerProviderDeps, config?: ServerlessConfig) {\n this.deps = deps;\n this.config = config;\n this.appPromise = this.initializeApp();\n }\n\n private async initializeApp(): Promise<Hono> {\n return createServerlessApp(this.deps, this.config);\n }\n\n private async getApp(): Promise<Hono> {\n return this.appPromise;\n }\n\n private async ensureEnvironmentTarget(target?: Record<string, unknown>): Promise<void> {\n if (this.deps.ensureEnvironment) {\n await Promise.resolve(this.deps.ensureEnvironment(target));\n }\n }\n\n async handleRequest(request: Request): Promise<Response> {\n await this.ensureEnvironmentTarget();\n const app = await this.getApp();\n return app.fetch(request);\n }\n\n toCloudflareWorker() {\n return {\n fetch: async (\n request: Request,\n env: Record<string, unknown>,\n executionCtx: unknown,\n ): Promise<Response> => {\n const cleanup = withWaitUntil(executionCtx as any);\n\n try {\n await this.ensureEnvironmentTarget(env);\n const app = await this.getApp();\n return await app.fetch(request, env as Record<string, unknown>, executionCtx as any);\n } finally {\n cleanup();\n }\n },\n };\n }\n\n toVercelEdge(): (request: Request, context?: unknown) => Promise<Response> {\n return async (request: Request, context?: unknown) => {\n const cleanup = withWaitUntil(context as any);\n\n try {\n await this.ensureEnvironmentTarget(context as Record<string, unknown> | undefined);\n const app = await this.getApp();\n return await app.fetch(request, context as Record<string, unknown> | undefined);\n } finally {\n cleanup();\n }\n };\n }\n\n toDeno(): (request: Request, info?: unknown) => Promise<Response> {\n return async (request: Request, info?: unknown) => {\n const cleanup = withWaitUntil(info as any);\n\n try {\n await this.ensureEnvironmentTarget(info as Record<string, unknown> | undefined);\n const app = await this.getApp();\n return await app.fetch(request, info as Record<string, unknown> | undefined);\n } finally {\n cleanup();\n }\n };\n }\n\n auto():\n | { fetch: (req: Request, env: Record<string, unknown>, ctx: unknown) => Promise<Response> }\n | ((req: Request, ctx?: unknown) => Promise<Response>) {\n const runtime: ServerlessRuntime = detectServerlessRuntime();\n\n switch (runtime) {\n case \"cloudflare\":\n return this.toCloudflareWorker();\n case \"vercel\":\n return this.toVercelEdge();\n case \"deno\":\n return this.toDeno();\n default:\n return this.toCloudflareWorker();\n }\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { VoltAgent } from \"@voltagent/core\";\n\ninterface NetlifyFunctionEvent {\n httpMethod?: string;\n headers?: Record<string, string | undefined>;\n multiValueHeaders?: Record<string, (string | undefined)[] | undefined>;\n rawUrl?: string;\n rawQuery?: string;\n rawPath?: string;\n path?: string;\n body?: string | null;\n isBase64Encoded?: boolean;\n}\n\ninterface NetlifyFunctionResult {\n statusCode: number;\n headers?: Record<string, string>;\n multiValueHeaders?: Record<string, string[]>;\n body: string;\n isBase64Encoded: boolean;\n}\n\ntype NetlifyFunctionHandler = (\n event: NetlifyFunctionEvent,\n context: unknown,\n) => Promise<NetlifyFunctionResult>;\n\nconst TEXT_BODY_METHODS = new Set([\"GET\", \"HEAD\"]);\n\nfunction buildUrl(event: NetlifyFunctionEvent): string {\n const scheme = event.headers?.[\"x-forwarded-proto\"] || \"https\";\n const host = event.headers?.host || \"localhost\";\n const path = event.rawPath || event.path || \"/\";\n const query = event.rawQuery ? `?${event.rawQuery}` : \"\";\n return `${scheme}://${host}${path}${query}`;\n}\n\nfunction createRequest(event: NetlifyFunctionEvent): Request {\n const method = (event.httpMethod || \"GET\").toUpperCase();\n const headers = new Headers();\n\n if (event.multiValueHeaders) {\n for (const [key, values] of Object.entries(event.multiValueHeaders)) {\n if (!values) continue;\n for (const value of values) {\n if (value !== undefined) {\n headers.append(key, value);\n }\n }\n }\n }\n\n if (event.headers) {\n for (const [key, value] of Object.entries(event.headers)) {\n if (value !== undefined) {\n headers.set(key, value);\n }\n }\n }\n\n const url = event.rawUrl || buildUrl(event);\n\n const init: Record<string, unknown> = { method, headers };\n\n if (!TEXT_BODY_METHODS.has(method) && event.body) {\n init.body = event.isBase64Encoded ? Buffer.from(event.body, \"base64\") : event.body;\n }\n\n return new Request(url, init as RequestInit);\n}\n\nfunction toNetlifyResponse(response: Response): Promise<NetlifyFunctionResult> {\n const single: Record<string, string> = {};\n const multi: Record<string, string[]> = {};\n\n response.headers.forEach((value, key) => {\n if (single[key]) {\n multi[key] = [single[key], value];\n delete single[key];\n } else if (multi[key]) {\n multi[key].push(value);\n } else {\n single[key] = value;\n }\n });\n\n return response.arrayBuffer().then((buffer) => ({\n statusCode: response.status,\n headers: Object.keys(single).length > 0 ? single : undefined,\n multiValueHeaders: Object.keys(multi).length > 0 ? multi : undefined,\n body: Buffer.from(buffer).toString(\"base64\"),\n isBase64Encoded: true,\n }));\n}\n\nexport function createNetlifyFunctionHandler(voltAgent: VoltAgent): NetlifyFunctionHandler {\n const provider = voltAgent.serverless();\n\n return async (event) => {\n const request = createRequest(event);\n const response = await provider.handleRequest(request);\n return toNetlifyResponse(response);\n };\n}\n\nexport type { NetlifyFunctionHandler, NetlifyFunctionEvent, NetlifyFunctionResult };\n","import type { ServerProviderDeps } from \"@voltagent/core\";\nimport { HonoServerlessProvider } from \"./serverless-provider\";\nimport type { ServerlessConfig } from \"./types\";\n\nexport function serverlessHono(config?: ServerlessConfig) {\n return (deps: ServerProviderDeps) => new HonoServerlessProvider(deps, config);\n}\n\nexport { HonoServerlessProvider } from \"./serverless-provider\";\nexport type { ServerlessConfig, ServerlessRuntime } from \"./types\";\nexport { detectServerlessRuntime } from \"./utils/runtime-detection\";\nexport {\n createNetlifyFunctionHandler,\n type NetlifyFunctionEvent,\n type NetlifyFunctionHandler,\n type NetlifyFunctionResult,\n} from \"./netlify-function\";\nexport default serverlessHono;\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@voltagent/serverless-hono",
3
3
  "description": "Serverless (fetch-based) runtime provider for VoltAgent using Hono",
4
- "version": "2.0.2",
4
+ "version": "2.0.4",
5
5
  "dependencies": {
6
6
  "@voltagent/internal": "^1.0.2",
7
- "@voltagent/server-core": "^2.0.2",
7
+ "@voltagent/server-core": "^2.1.1",
8
8
  "hono": "^4.7.7"
9
9
  },
10
10
  "devDependencies": {},