import type { ConnectRouter, ConnectRouterOptions, ContextValues } from "@connectrpc/connect"; import type { NextApiRequest, NextApiResponse, PageConfig } from "next"; type NextApiHandler = (req: NextApiRequest, res: NextApiResponse) => unknown | Promise; interface NextJsApiRouterOptions extends ConnectRouterOptions { /** * Route definitions. We recommend the following pattern: * * Create a file `connect.ts` with a default export such as this: * * ```ts * import {ConnectRouter} from "@connectrpc/connect"; * * export default (router: ConnectRouter) => { * router.service(ElizaService, {}); * } * ``` * * Then pass this function here. */ routes: (router: ConnectRouter) => void; /** * Serve all handlers under this prefix. For example, the prefix "/something" * will serve the RPC foo.FooService/Bar under "/something/foo.FooService/Bar". * * This is `/api` by default for Next.js. */ prefix?: string; /** * Context values to extract from the request. These values are passed to * the handlers. */ contextValues?: (req: NextApiRequest) => ContextValues; } /** * Provide your Connect RPCs via Next.js API routes. * * Usage in `pages/api/[[...connect]].ts`: * * ```ts * import { nextJsApiRouter } from "@connectrpc/connect-next"; * import routes from "../../connect"; * * const { handler } = nextJsApiRouter({ routes }); * export default handler; * * // Required: Connect parses request bodies itself, so the Next.js * // body parser must be disabled. Without this, RPCs will fail. * export const config = { * api: { * bodyParser: false, * }, * }; * ``` */ export declare function nextJsApiRouter(options: NextJsApiRouterOptions): ApiRoute; interface ApiRoute { handler: NextApiHandler; /** * @deprecated Export the config directly in your API route file * instead. Turbopack requires config exports to be statically analyzable at * compile time, which means re-exporting this value will fail: * * ```ts * export const config = { * api: { * bodyParser: false, * }, * }; * ``` */ config: PageConfig; } export {};