import { MultiplayerWebSocketMessageType } from '../webrtc/web-rtc-communication.js';
/**
 * A shape definition for {@link ClientIdentification} when joining or creating a room.
 *
 * @category Internal
 */
export declare const clientIdShape: import("object-shape-tester").ShapeDefinition<{
    /** This UUID is used to keep track of each client on the multiplayer server. */
    clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /**
     * The id of the room that the user is communicating with. Set this either to to an existing
     * room to join that room, or a new id to create a new room.
     */
    roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /** The name of the room to create or join. */
    roomName: string;
}, false>;
/**
 * Data included in each multiplayer server message that is used to identify the message client and
 * the room they wish to join or host.
 *
 * @category Internal
 */
export type ClientIdentification = typeof clientIdShape.runtimeType;
/**
 * Base shape definition for every message type.
 *
 * @category Internal
 */
export declare const baseMessageShape: import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>;
/**
 * ==========================================================
 *
 * # Message Shape Definitions
 *
 * ==========================================================
 */
/**
 * Shape definition for "answer" messages.
 *
 * @category Internal
 */
export declare const answerMessageShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
    /** This UUID is used to keep track of each client on the multiplayer server. */
    clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /**
     * The id of the room that the user is communicating with. Set this either to to an existing
     * room to join that room, or a new id to create a new room.
     */
    roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /** The name of the room to create or join. */
    roomName: string;
}, false>, import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Answer]>;
    /**
     * This data object matches the `RTCSessionDescriptionInit` type from the TS lib. This data
     * should be passed into `RTCPeerConnection.setRemoteDescription` to accept a WebRTC
     * 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 [MultiplayerWebSocketMessageType.Answer]>;
        sdp: string;
    }, false>]>;
}]>, false>;
/**
 * Shape definition for "host ping" messages.
 *
 * @category Internal
 */
export declare const hostPingMessageShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
    /** This UUID is used to keep track of each client on the multiplayer server. */
    clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /**
     * The id of the room that the user is communicating with. Set this either to to an existing
     * room to join that room, or a new id to create a new room.
     */
    roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /** The name of the room to create or join. */
    roomName: string;
}, false>, import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.HostPing]>;
    /** This secret is used to verify that the sender is indeed the host of the current room. */
    clientSecret: string;
    clientCount: number;
    roomPassword: string;
}]>, false>;
/**
 * Shape definition for "offer" messages forwarded from the multiplayer server to the host.
 *
 * @category Internal
 */
export declare const forwardedOfferMessageShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
    /** This UUID is used to keep track of each client on the multiplayer server. */
    clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /**
     * The id of the room that the user is communicating with. Set this either to to an existing
     * room to join that room, or a new id to create a new room.
     */
    roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /** The name of the room to create or join. */
    roomName: string;
}, false>, import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Offer]>;
    /**
     * This data object matches the `RTCSessionDescriptionInit` type from the TS lib. This data
     * should be passed into `RTCPeerConnection.setRemoteDescription` when creating an offer.
     */
    data: import("object-shape-tester").ShapeDefinition<{
        type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Offer]>;
        sdp: string;
    }, false>;
}]>, false>;
/**
 * Shape definition for "offer" messages.
 *
 * @category Internal
 */
export declare const offerMessageShape: 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<{
    /** This UUID is used to keep track of each client on the multiplayer server. */
    clientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /**
     * The id of the room that the user is communicating with. Set this either to to an existing
     * room to join that room, or a new id to create a new room.
     */
    roomId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
    /** The name of the room to create or join. */
    roomName: string;
}, false>, import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Offer]>;
    /**
     * This data object matches the `RTCSessionDescriptionInit` type from the TS lib. This data
     * should be passed into `RTCPeerConnection.setRemoteDescription` when creating an offer.
     */
    data: import("object-shape-tester").ShapeDefinition<{
        type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Offer]>;
        sdp: string;
    }, false>;
}]>, false>, import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    /**
     * This secret is used to verify that a client is a host of a room. Do not share this with
     * other clients.
     */
    clientSecret: string;
    /**
     * Set this when joining a room with a password or when creating a room to set a room
     * password.
     */
    roomPassword: string;
}]>, false>;
/**
 * Shape definition for "offer result" messages.
 *
 * @category Internal
 */
export declare const offerResultShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.OfferResult]>;
    hostClientId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}]>, false>;
/**
 * Shape definition for error messages.
 *
 * @category Internal
 */
export declare const errorMessageShape: import("object-shape-tester").ShapeDefinition<import("object-shape-tester").ShapeAnd<[import("object-shape-tester").ShapeDefinition<{
    /**
     * The id of the original message. If a message is ever a response to another message, the
     * message id will remain the same throughout the chain.
     */
    messageId: import("object-shape-tester").CustomSpecifier<`${string}-${string}-${string}-${string}-${string}`>;
}, false>, {
    type: import("object-shape-tester").ShapeExact<readonly [MultiplayerWebSocketMessageType.Error]>;
    errorMessage: string;
}]>, false>;
