import { mapServiceDevPort } from '@rest-vir/define-service';
/**
 * The output from {@link createMultiplayerApi}, regardless of what the given `serverOrigin` is.
 *
 * @category Main
 */
export type MultiplayerApi = Awaited<ReturnType<typeof createMultiplayerApi>>;
/**
 * Creates an API for accessing the multiplayer server at the given origin.
 *
 * @category Main
 */
export declare function createMultiplayerApi({ backendOrigin, portScanOptions, }: {
    backendOrigin?: string | undefined;
    /**
     * Set to `undefined` or `false` to disable port scanning. Set to `true` to enable port
     * scanning. Set to an options object to configure port scanning.
     */
    portScanOptions: undefined | Parameters<typeof mapServiceDevPort>[1] | boolean;
}): Promise<import("@rest-vir/define-service").RestVirApi<import("@rest-vir/define-service").ServiceDefinition<"multiplayer-service", {
    '/': {
        methods: {
            GET: true;
        };
        requestDataShape: undefined;
        responseDataShape: import("object-shape-tester").ShapeExact<readonly ["ok"]>;
        requiredClientOrigin: {
            anyOrigin: boolean;
        };
    };
    '/health': {
        methods: {
            GET: true;
        };
        requestDataShape: undefined;
        responseDataShape: import("object-shape-tester").ShapeExact<readonly ["ok"]>;
        requiredClientOrigin: {
            anyOrigin: boolean;
        };
    };
    '/rooms': {
        requestDataShape: undefined;
        responseDataShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeIndexedKeys<[{
            keys: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            values: import("object-shape-tester").ShapeDefinition<{
                roomName: string;
                roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
                clientCount: number;
                hasRoomPassword: boolean;
            }, false>;
            required: false;
        }]>, false>;
        methods: {
            GET: true;
        };
        searchParamsShape: {
            gameId: import("object-shape-tester").ShapeTuple<[string]>;
        };
    };
}, {
    '/connect': {
        messageFromClientShape: import("object-shape-tester").ShapeOr<[import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomName: string;
        }, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Answer]>;
            data: import("object-shape-tester").ShapeOr<[{
                rejected: import("object-shape-tester").ShapeExact<readonly [true]>;
            }, import("object-shape-tester").ShapeDefinition<{
                type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Answer]>;
                sdp: string;
            }, false>]>;
        }]>, false>, import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomName: string;
        }, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Offer]>;
            data: import("object-shape-tester").ShapeDefinition<{
                type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Offer]>;
                sdp: string;
            }, false>;
        }]>, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            clientSecret: string;
            roomPassword: string;
        }]>, false>, import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomName: string;
        }, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.HostPing]>;
            clientSecret: string;
            clientCount: number;
            roomPassword: string;
        }]>, false>]>;
        messageFromHostShape: import("object-shape-tester").ShapeOr<[import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomName: string;
        }, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Answer]>;
            data: import("object-shape-tester").ShapeOr<[{
                rejected: import("object-shape-tester").ShapeExact<readonly [true]>;
            }, import("object-shape-tester").ShapeDefinition<{
                type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Answer]>;
                sdp: string;
            }, false>]>;
        }]>, false>, import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
            roomName: string;
        }, false>, import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Offer]>;
            data: import("object-shape-tester").ShapeDefinition<{
                type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Offer]>;
                sdp: string;
            }, false>;
        }]>, false>, import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.OfferResult]>;
            hostClientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }]>, false>, import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
            messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
        }, false>, {
            type: import("object-shape-tester").ShapeExact<readonly [import("../index.js").MultiplayerWebSocketMessageType.Error]>;
            errorMessage: string;
        }]>, false>]>;
        searchParamsShape: {
            gameId: import("object-shape-tester").ShapeTuple<[string]>;
        };
    };
}>>>;
