import { type Endpoint, type Router, type RouterConfig } from "@colyseus/better-call";
import { toNodeHandler } from "@colyseus/better-call/node";
import { Transport } from "../Transport.ts";
export { createEndpoint, createMiddleware, createInternalContext, type Router, type RouterConfig, type Endpoint, type EndpointHandler, type EndpointOptions, type EndpointContext, type StrictEndpoint, } from "@colyseus/better-call";
export { toNodeHandler };
export declare function bindRouterToTransport(transport: Transport, router: Router, useExpress: boolean): void;
/**
 * Do not use this directly. This is used internally by `@colyseus/playground`.
 * TODO: refactor. Avoid using globals.
 * @internal
 */
export declare let __globalEndpoints: Record<string, Endpoint>;
export declare function createRouter<E extends Record<string, Endpoint>, Config extends RouterConfig>(endpoints: E, config?: Config): {
    handler: (request: Request) => Promise<Response>;
    endpoints: E;
    addEndpoint: (endpoint: Endpoint) => void;
    findRoute: (method: string, path: string) => {
        data: Endpoint & {
            path: string;
        };
        params: Record<string, string>;
    };
    extend: <NE extends Record<string, Endpoint>>(newEndpoints: NE) => {
        handler: (request: Request) => Promise<Response>;
        endpoints: E & NE;
        addEndpoint: (endpoint: Endpoint) => void;
        findRoute: (method: string, path: string) => {
            data: ((inputCtx: any) => Promise<any>) & {
                options: import("@colyseus/better-call").EndpointOptions;
                path: string;
            } & {
                path: string;
            };
            params: Record<string, string>;
        };
        extend: <NE_1 extends Record<string, Endpoint>>(newEndpoints: NE_1) => {
            handler: (request: Request) => Promise<Response>;
            endpoints: E & NE & NE_1;
            addEndpoint: (endpoint: Endpoint) => void;
            findRoute: (method: string, path: string) => {
                data: ((inputCtx: any) => Promise<any>) & {
                    options: import("@colyseus/better-call").EndpointOptions;
                    path: string;
                } & {
                    path: string;
                };
                params: Record<string, string>;
            };
            extend: <NE_2 extends Record<string, Endpoint>>(newEndpoints: NE_2) => {
                handler: (request: Request) => Promise<Response>;
                endpoints: E & NE & NE_1 & NE_2;
                addEndpoint: (endpoint: Endpoint) => void;
                findRoute: (method: string, path: string) => {
                    data: ((inputCtx: any) => Promise<any>) & {
                        options: import("@colyseus/better-call").EndpointOptions;
                        path: string;
                    } & {
                        path: string;
                    };
                    params: Record<string, string>;
                };
                extend: <NE_3 extends Record<string, Endpoint>>(newEndpoints: NE_3) => {
                    handler: (request: Request) => Promise<Response>;
                    endpoints: E & NE & NE_1 & NE_2 & NE_3;
                    addEndpoint: (endpoint: Endpoint) => void;
                    findRoute: (method: string, path: string) => {
                        data: ((inputCtx: any) => Promise<any>) & {
                            options: import("@colyseus/better-call").EndpointOptions;
                            path: string;
                        } & {
                            path: string;
                        };
                        params: Record<string, string>;
                    };
                    extend: <NE_4 extends Record<string, Endpoint>>(newEndpoints: NE_4) => {
                        handler: (request: Request) => Promise<Response>;
                        endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4;
                        addEndpoint: (endpoint: Endpoint) => void;
                        findRoute: (method: string, path: string) => {
                            data: ((inputCtx: any) => Promise<any>) & {
                                options: import("@colyseus/better-call").EndpointOptions;
                                path: string;
                            } & {
                                path: string;
                            };
                            params: Record<string, string>;
                        };
                        extend: <NE_5 extends Record<string, Endpoint>>(newEndpoints: NE_5) => {
                            handler: (request: Request) => Promise<Response>;
                            endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4 & NE_5;
                            addEndpoint: (endpoint: Endpoint) => void;
                            findRoute: (method: string, path: string) => {
                                data: ((inputCtx: any) => Promise<any>) & {
                                    options: import("@colyseus/better-call").EndpointOptions;
                                    path: string;
                                } & {
                                    path: string;
                                };
                                params: Record<string, string>;
                            };
                            extend: <NE_6 extends Record<string, Endpoint>>(newEndpoints: NE_6) => {
                                handler: (request: Request) => Promise<Response>;
                                endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4 & NE_5 & NE_6;
                                addEndpoint: (endpoint: Endpoint) => void;
                                findRoute: (method: string, path: string) => {
                                    data: ((inputCtx: any) => Promise<any>) & {
                                        options: import("@colyseus/better-call").EndpointOptions;
                                        path: string;
                                    } & {
                                        path: string;
                                    };
                                    params: Record<string, string>;
                                };
                                extend: <NE_7 extends Record<string, Endpoint>>(newEndpoints: NE_7) => {
                                    handler: (request: Request) => Promise<Response>;
                                    endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4 & NE_5 & NE_6 & NE_7;
                                    addEndpoint: (endpoint: Endpoint) => void;
                                    findRoute: (method: string, path: string) => {
                                        data: ((inputCtx: any) => Promise<any>) & {
                                            options: import("@colyseus/better-call").EndpointOptions;
                                            path: string;
                                        } & {
                                            path: string;
                                        };
                                        params: Record<string, string>;
                                    };
                                    extend: <NE_8 extends Record<string, Endpoint>>(newEndpoints: NE_8) => {
                                        handler: (request: Request) => Promise<Response>;
                                        endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4 & NE_5 & NE_6 & NE_7 & NE_8;
                                        addEndpoint: (endpoint: Endpoint) => void;
                                        findRoute: (method: string, path: string) => {
                                            data: ((inputCtx: any) => Promise<any>) & {
                                                options: import("@colyseus/better-call").EndpointOptions;
                                                path: string;
                                            } & {
                                                path: string;
                                            };
                                            params: Record<string, string>;
                                        };
                                        extend: <NE_9 extends Record<string, Endpoint>>(newEndpoints: NE_9) => {
                                            handler: (request: Request) => Promise<Response>;
                                            endpoints: E & NE & NE_1 & NE_2 & NE_3 & NE_4 & NE_5 & NE_6 & NE_7 & NE_8 & NE_9;
                                            addEndpoint: (endpoint: Endpoint) => void;
                                            findRoute: (method: string, path: string) => {
                                                data: ((inputCtx: any) => Promise<any>) & {
                                                    options: import("@colyseus/better-call").EndpointOptions;
                                                    path: string;
                                                } & {
                                                    path: string;
                                                };
                                                params: Record<string, string>;
                                            };
                                            extend: <NE_10 extends Record<string, Endpoint>>(newEndpoints: NE_10) => any;
                                        };
                                    };
                                };
                            };
                        };
                    };
                };
            };
        };
    };
};
