import { Request, Express, RequestHandler } from 'express';
import { U as User, A as A2ARequestHandler } from '../../a2a_request_handler-B3LxMq3P.cjs';
import { L as Logger } from '../../logger-DM9C11Ou.cjs';
import '../../extensions-DvruCIzw.cjs';

/**
 * Express Adapter for A2A Server (Core-based implementation)
 *
 * Provides A2AExpressApp using the web-standard core handlers.
 * This implementation bridges the Express Request/Response model to the
 * web-standard Request/Response model, allowing Express apps to use
 * the same core logic as edge runtime deployments.
 *
 * For the original Express implementation, use '@drew-foxall/a2a-js-sdk/server/express'.
 *
 * @example
 * ```ts
 * import express from 'express';
 * import { A2AExpressApp } from '@drew-foxall/a2a-js-sdk/server/express-adapter';
 * import { DefaultRequestHandler, InMemoryTaskStore } from '@drew-foxall/a2a-js-sdk/server';
 *
 * const requestHandler = new DefaultRequestHandler(agentCard, new InMemoryTaskStore(), executor);
 * const a2aApp = new A2AExpressApp(requestHandler, {
 *   logger: JsonLogger.create(),
 *   enableRest: true,
 * });
 *
 * const app = express();
 * a2aApp.setupRoutes(app, '/a2a');
 * app.listen(3000);
 * ```
 */

/**
 * Express-specific options for the A2A app.
 */
interface ExpressA2AOptions {
    /** Logger instance for request/error logging */
    logger?: Logger;
    /** Function to extract 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;
}
/**
 * Type alias for Express UserBuilder.
 */
type UserBuilder = (req: Request) => Promise<User>;
/**
 * UserBuilder factory with common authentication patterns.
 */
declare const UserBuilder: {
    /**
     * Returns an unauthenticated user for all requests.
     */
    noAuthentication: () => UserBuilder;
};
/**
 * A2AExpressApp provides A2A protocol support for Express applications
 * using the core-based implementation.
 *
 * @example
 * ```ts
 * const a2aApp = new A2AExpressApp(requestHandler, {
 *   logger: JsonLogger.create(),
 *   enableRest: true,
 * });
 *
 * const app = express();
 * a2aApp.setupRoutes(app, '/a2a');
 * ```
 */
declare class A2AExpressApp {
    private requestHandler;
    private options?;
    constructor(requestHandler: A2ARequestHandler, options?: ExpressA2AOptions);
    /**
     * 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
     * @returns The Express app with A2A routes
     */
    setupRoutes(app: Express, baseUrl?: string, middlewares?: RequestHandler[]): Express;
}

export { A2AExpressApp, type ExpressA2AOptions, UserBuilder };
