import { Request, Express, RequestHandler, ErrorRequestHandler } from 'express'; import { U as User, a as UnauthenticatedUser, A as A2ARequestHandler } from '../../a2a_request_handler-BuP9LgXH.js'; import { L as Logger } from '../../logger-DM9C11Ou.js'; export { C as ConsoleLogger, J as JsonLogger, b as LogContext, a as LogLevel, N as NoopLogger } from '../../logger-DM9C11Ou.js'; import { A as AgentCardProvider } from '../../agent_card_utils-CX6qm1eN.js'; import '../../extensions-DvruCIzw.js'; type UserBuilder = (req: Request) => Promise; declare const UserBuilder: { noAuthentication: () => Promise; }; /** * Configuration options for A2AExpressApp. * Extends the base A2AServerOptions pattern for consistency across all server implementations. */ interface A2AExpressOptions { /** Logger instance for request/error logging */ logger?: Logger; /** Function to build user from Express Request */ userBuilder?: UserBuilder; /** Path for agent card endpoint (default: '/.well-known/agent-card.json') */ agentCardPath?: string; /** Enable REST API endpoints (default: false) */ enableRest?: boolean; /** Base path for REST endpoints (default: '/rest') */ restBasePath?: string; } /** * A2AExpressApp provides A2A protocol support for Express applications. * * @example * ```ts * // New API with options object * import express from 'express'; * import { A2AExpressApp } from '@drew-foxall/a2a-js-sdk/server/express'; * import { DefaultRequestHandler, InMemoryTaskStore } from '@drew-foxall/a2a-js-sdk/server'; * * const requestHandler = new DefaultRequestHandler(agentCard, new InMemoryTaskStore(), executor); * const a2aApp = new A2AExpressApp(requestHandler, { * enableRest: true, * }); * * const app = express(); * a2aApp.setupRoutes(app, '/a2a'); * app.listen(3000); * ``` * * @example * ```ts * // Legacy API with userBuilder function (still supported) * const a2aApp = new A2AExpressApp(requestHandler, myUserBuilder); * ``` */ declare class A2AExpressApp { private requestHandler; private options; /** * Creates a new A2AExpressApp instance. * * @param requestHandler - The A2A request handler * @param optionsOrUserBuilder - Either an options object or a UserBuilder function (legacy API) */ constructor(requestHandler: A2ARequestHandler, optionsOrUserBuilder?: A2AExpressOptions | UserBuilder); /** * Adds A2A routes to an existing Express app. * * @param app - The Express app instance * @param baseUrl - The base URL for A2A endpoints (e.g., "/a2a") * @param middlewares - Optional array of Express middlewares to apply to the A2A routes * @param agentCardPath - Optional custom path for the agent card endpoint (overrides constructor option) * @returns The Express app with A2A routes */ setupRoutes(app: Express, baseUrl?: string, middlewares?: Array, agentCardPath?: string): Express; } interface JsonRpcHandlerOptions { requestHandler: A2ARequestHandler; userBuilder: UserBuilder; } /** * Creates Express.js middleware to handle A2A JSON-RPC requests. * * This handler uses the core JSON-RPC logic for business processing * and only implements Express-specific I/O operations. * * @example * ```ts * app.use(jsonRpcHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication })); * ``` */ declare function jsonRpcHandler(options: JsonRpcHandlerOptions): RequestHandler; /** * Express error handler for JSON parse errors. */ declare const jsonErrorHandler: ErrorRequestHandler; interface AgentCardHandlerOptions { agentCardProvider: AgentCardProvider; } /** * Creates Express.js middleware to handle agent card requests. * * This handler uses the core agent card logic for business processing * and only implements Express-specific I/O operations. * * @example * ```ts * // With an existing A2ARequestHandler instance: * app.use('/.well-known/agent-card.json', agentCardHandler({ agentCardProvider: a2aRequestHandler })); * * // Or with a factory lambda: * app.use('/.well-known/agent-card.json', agentCardHandler({ agentCardProvider: async () => agentCard })); * ``` */ declare function agentCardHandler(options: AgentCardHandlerOptions): RequestHandler; /** * Options for configuring the HTTP+JSON/REST handler. */ interface RestHandlerOptions { requestHandler: A2ARequestHandler; userBuilder: UserBuilder; } /** * Creates Express.js middleware to handle A2A HTTP+JSON/REST requests. * * This handler implements the A2A REST API specification with snake_case * field names, providing endpoints for: * - Agent card retrieval (GET /v1/card) * - Message sending with optional streaming (POST /v1/message:send|stream) * - Task management (GET/POST /v1/tasks/:taskId:cancel|subscribe) * - Push notification configuration * * The handler acts as an adapter layer, converting between REST format * (snake_case) at the API boundary and internal TypeScript format (camelCase) * for business logic. * * @param options - Configuration options including the request handler * @returns Express router configured with all A2A REST endpoints * * @example * ```ts * const app = express(); * const requestHandler = new DefaultRequestHandler(...); * app.use('/api/rest', restHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication })); * ``` */ declare function restHandler(options: RestHandlerOptions): RequestHandler; export { A2AExpressApp, type A2AExpressOptions, type AgentCardHandlerOptions, AgentCardProvider, type JsonRpcHandlerOptions, Logger, type RestHandlerOptions, UserBuilder, agentCardHandler, jsonErrorHandler, jsonRpcHandler, restHandler };