import type { Spellbook } from "@usirin/spellbook";
import { type ServerTransport } from "./transport";
/**
 * Options for creating a SpellbookServer
 */
export interface SpellbookServerOptions {
    /**
     * Transport to use for communication
     */
    transport: ServerTransport;
    /**
     * Configuration options
     */
    config?: {
        /**
         * Whether to validate parameters (default: true)
         */
        validateParameters?: boolean;
    };
}
/**
 * Simple function to serve a spellbook on a transport
 *
 * @param spellbook - The spellbook to serve
 * @param transport - The transport to serve on
 * @returns A promise that resolves when the server stops
 */
export declare function serve<TSpellbook extends Spellbook>(spellbook: TSpellbook, transport: ServerTransport): Promise<void>;
/**
 * Create a SpellbookServer for a specific spellbook
 *
 * @param spellbook - The spellbook to serve
 * @param options - Server options
 * @returns A SpellbookServer instance
 */
export declare const createSpellbookServer: <TSpellbook extends Spellbook>(spellbook: TSpellbook, options: SpellbookServerOptions) => import("@usirin/forge").Entity<"server"> & {
    start(): void;
    stop(): void;
    isRunning(): boolean;
    getSpellbook(): TSpellbook;
    getTransport(): import("@usirin/forge").Entity<"xports"> & {
        incoming: ReadableStream<import("@usirin/forge").Entity<"req"> & {
            name: string;
            parameters: any;
        }>;
        outgoing: WritableStream<import("@usirin/forge").Entity<"resp"> & {
            request: import("@usirin/forge").Entity<"req"> & {
                name: string;
                parameters: any;
            };
            result: Promise<any> | undefined;
            error: {
                message: string;
                code?: string;
                details?: unknown;
            } | undefined;
        }>;
    };
};
export type SpellbookServer<TSpellbook extends Spellbook = Spellbook> = ReturnType<typeof createSpellbookServer<TSpellbook>>;
//# sourceMappingURL=server.d.ts.map