UNPKG

haxball.js

Version:

A powerful library for interacting with the Haxball Headless API

789 lines 30.7 kB
import "json5"; //#region src/types.d.ts /** * Initializes a Haxball headless room with the specified configuration. * @param roomConfig - Configuration object for the room. All properties are optional. * @returns The room object used to control the room. * @example * ```js * var room = HBInit({ * roomName: "My room", * maxPlayers: 16, * noPlayer: true // Remove host player (recommended!) * }); * room.setDefaultStadium("Big"); * room.setScoreLimit(5); * room.setTimeLimit(0); * ``` */ declare function HBInit(roomConfig: RoomConfigObject): RoomObject; /** * Configuration object for initializing a Haxball room. * All properties are optional. */ interface RoomConfigObject { /** The name for the room. */ roomName?: string; /** The name for the host player. */ playerName?: string; /** The password for the room (no password if omitted). */ password?: string; /** Max number of players the room accepts. */ maxPlayers?: number; /** If true the room will appear in the room list. */ public?: boolean; /** GeoLocation override for the room. */ geo?: { code: string; lat: number; lon: number; }; /** Token that can be obtained from https://www.haxball.com/headlesstoken to skip recaptcha. These tokens expire after a few minutes. */ token?: string; /** * If set to true the room player list will be empty, the playerName setting will be ignored. * Default value is false but it's recommended to set this to true. * @warning Events will have null as the byPlayer argument when the event is caused by the host. */ noPlayer?: boolean; } /** * Main interface for controlling the room and listening to its events. * @note All API functions that modify the game's state execute asynchronously. */ interface RoomObject { /** * Sends a chat message using the host player. * @param msg - The message to send. * @param targetId - If null/undefined, message is sent to all players. Otherwise, sent only to player with matching id. */ sendChat(msg: string, targetId?: number): void; /** * Changes the admin status of the specified player. * @param playerId - The ID of the player. * @param admin - Whether to grant or revoke admin status. */ setPlayerAdmin(playerId: number, admin: boolean): void; /** * Moves the specified player to a team. * @param playerId - The ID of the player. * @param team - The team ID (0 = Spectators, 1 = Red, 2 = Blue). */ setPlayerTeam(playerId: number, team: TeamID): void; /** * Kicks the specified player from the room. * @param playerId - The ID of the player to kick. * @param reason - The reason for the kick. * @param ban - Whether to ban the player. */ kickPlayer(playerId: number, reason?: string, ban?: boolean): void; /** * Clears the ban for a playerId that belonged to a player that was previously banned. * @param playerId - The ID of the player to unban. */ clearBan(playerId: number): void; /** * Clears the list of banned players. */ clearBans(): void; /** * Sets the score limit of the room. * @param limit - The score limit. * @note If a game is in progress this method does nothing. */ setScoreLimit(limit: number): void; /** * Sets the time limit of the room in minutes. * @param limitInMinutes - The time limit in minutes. * @note If a game is in progress this method does nothing. */ setTimeLimit(limitInMinutes: number): void; /** * Parses the stadiumFileContents as a .hbs stadium file and sets it as the selected stadium. * @param stadiumFileContents - The contents of the .hbs stadium file as a string. * @note There must not be a game in progress. If a game is in progress this method does nothing. */ setCustomStadium(stadiumFileContents: string): void; /** * Sets the selected stadium to one of the default stadiums. * @param stadiumName - The name of the stadium (must match exactly, case sensitive). * @note There must not be a game in progress. If a game is in progress this method does nothing. */ setDefaultStadium(stadiumName: string): void; /** * Sets the teams lock. When teams are locked players cannot change team unless moved by an admin. * @param locked - Whether teams should be locked. */ setTeamsLock(locked: boolean): void; /** * Sets the colors of a team. * @param team - The team ID (1 = Red, 2 = Blue). * @param angle - The angle of the color gradient. * @param textColor - The text color as an integer (e.g., 0xFF0000 for red). * @param colors - Array of color integers. */ setTeamColors(team: TeamID, angle: number, textColor: number, colors: readonly number[]): void; /** * Starts the game. * @note If a game is already in progress this method does nothing. */ startGame(): void; /** * Stops the game. * @note If no game is in progress this method does nothing. */ stopGame(): void; /** * Sets the pause state of the game. * @param pauseState - true = paused, false = unpaused. */ pauseGame(pauseState: boolean): void; /** * Returns the player with the specified id. * @param playerId - The ID of the player. * @returns The player object or null if the player doesn't exist. */ getPlayer(playerId: number): PlayerObject | null; /** * Returns the current list of players. */ getPlayerList(): PlayerObject[]; /** * Returns the current score information if a game is in progress. * @returns The scores object or null if no game is in progress. */ getScores(): ScoresObject | null; /** * Returns the ball's position in the field. * @returns The ball's position or null if no game is in progress. */ getBallPosition(): { x: number; y: number; } | null; /** * Starts recording of a haxball replay. * @warning Don't forget to call stopRecording or it will cause a memory leak. */ startRecording(): void; /** * Stops the recording previously started with startRecording and returns the replay file contents. * @returns The replay file contents as a Uint8Array, or null if recording was not started or had already been stopped. */ stopRecording(): Uint8Array | null; /** * Changes the password of the room. * @param pass - The new password, or null to clear the password. */ setPassword(pass: string | null): void; /** * Activates or deactivates the recaptcha requirement to join the room. * @param required - Whether recaptcha is required. */ setRequireRecaptcha(required: boolean): void; /** * Reorders players in the player list. * First all listed players are removed, then reinserted in the order they appear in playerIdList. * @param playerIdList - Array of player IDs to reorder. * @param moveToTop - If true, players are inserted at the top of the list, otherwise at the bottom. */ reorderPlayers(playerIdList: readonly number[], moveToTop: boolean): void; /** * Sends a host announcement. * Unlike sendChat, announcements work without a host player and have a larger character limit. * @param msg - The message contents. * @param targetId - If null/undefined, sent to all players. Otherwise, sent only to player with matching id. * @param color - Color encoded as integer (0xFF0000 = red, 0x00FF00 = green, 0x0000FF = blue). * @param style - Text style: "normal", "bold", "italic", "small", "small-bold", "small-italic". Default: "normal". * @param sound - 0 = no sound, 1 = normal chat sound, 2 = notification sound. */ sendAnnouncement(msg: string, targetId?: number | null, color?: number, style?: string, sound?: number): void; /** * Sets the room's kick rate limits. * @param min - Minimum number of logic-frames between two kicks. It is impossible to kick faster than this. Default: 2. * @param rate - Works like min but lets players save up extra kicks to use later depending on burst. Default: 0. * @param burst - How many extra kicks the player can save up. Default: 0. */ setKickRateLimit(min: number, rate: number, burst: number): void; /** * Overrides the avatar of the target player. * @param playerId - The ID of the player. * @param avatar - The avatar string, or null to clear the override and let the player use their own avatar. */ setPlayerAvatar(playerId: number, avatar: string | null): void; /** * Sets properties of the target disc. * Properties that are null or undefined will not be set and will preserve the disc's current value. * @param discIndex - The index of the disc. * @param properties - Partial disc properties to set. * @example * ```js * // Set position of disc 0 to <0,0> while leaving other values intact * room.setDiscProperties(0, {x: 0, y: 0}); * ``` */ setDiscProperties(discIndex: number, properties: Partial<DiscPropertiesObject>): void; /** * Gets the properties of the disc at discIndex. * @param discIndex - The index of the disc. * @returns The disc properties or null if discIndex is out of bounds. */ getDiscProperties(discIndex: number): DiscPropertiesObject | null; /** * Same as setDiscProperties but targets the disc belonging to a player with the given Id. * @param playerId - The ID of the player. * @param properties - Partial disc properties to set. */ setPlayerDiscProperties(playerId: number, properties: Partial<DiscPropertiesObject>): void; /** * Same as getDiscProperties but targets the disc belonging to a player with the given Id. * @param playerId - The ID of the player. * @returns The player's disc properties (can be null if the player doesn't exist). */ getPlayerDiscProperties(playerId: number): DiscPropertiesObject | null; /** * Gets the number of discs in the game including the ball and player discs. */ getDiscCount(): number; /** * Object filled with collision flags constants that compose the cMask and cGroup disc properties. * @see https://github.com/haxball/haxball-issues/wiki/Collision-Flags * @example * ```js * // Check if disc 4 belongs to collision group "ball": * var discProps = room.getDiscProperties(4); * var hasBallFlag = (discProps.cGroup & room.CollisionFlags.ball) != 0; * * // Add "wall" to the collision mask of disc 5: * var discProps = room.getDiscProperties(5); * room.setDiscProperties(5, {cMask: discProps.cMask | room.CollisionFlags.wall}); * ``` */ CollisionFlags: CollisionFlagsObject; /** * Event called when a new player joins the room. * @param player - The player who joined. */ onPlayerJoin(player: PlayerJoinObject): void; /** * Event called when a player leaves the room. * @param player - The player who left. */ onPlayerLeave(player: PlayerObject): void; /** * Event called when a team wins. * @param scores - The final scores. */ onTeamVictory(scores: ScoresObject): void; /** * Event called when a player sends a chat message. * @param player - The player who sent the message. * @param msg - The message text. * @returns Return false to filter the message and prevent it from reaching other players. */ onPlayerChat(player: PlayerObject, msg: string): void | boolean; /** * Event called when a player kicks the ball. * @param player - The player who kicked the ball. */ onPlayerBallKick(player: PlayerObject): void; /** * Event called when a team scores a goal. * @param team - The team that scored (1 = Red, 2 = Blue). */ onTeamGoal(team: TeamID): void; /** * Event called when a game starts. * @param byPlayer - The player who caused the event (can be null if not caused by a player). */ onGameStart(byPlayer: PlayerObject | null): void; /** * Event called when a game stops. * @param byPlayer - The player who caused the event (can be null if not caused by a player). */ onGameStop(byPlayer: PlayerObject | null): void; /** * Event called when a player's admin rights are changed. * @param changedPlayer - The player whose admin rights changed. * @param byPlayer - The player who caused the event (can be null if not caused by a player). */ onPlayerAdminChange(changedPlayer: PlayerObject, byPlayer: PlayerObject | null): void; /** * Event called when a player's team is changed. * @param changedPlayer - The player who changed teams. * @param byPlayer - The player who caused the event (can be null if not caused by a player). */ onPlayerTeamChange(changedPlayer: PlayerObject, byPlayer: PlayerObject | null): void; /** * Event called when a player has been kicked from the room. * This is always called after the onPlayerLeave event. * @param kickedPlayer - The player who was kicked. * @param reason - The reason for the kick. * @param ban - Whether the player was banned. * @param byPlayer - The player who caused the event (can be null if not caused by a player). */ onPlayerKicked(kickedPlayer: PlayerObject, reason: string, ban: boolean, byPlayer: PlayerObject | null): void; /** * Event called once for every game tick (60 times per second). * Useful for monitoring player and ball positions without missing any ticks. * @note This event is not called if the game is paused or stopped. */ onGameTick(): void; /** * Event called when the game is paused. * @param byPlayer - The player who paused the game (can be null if not caused by a player). */ onGamePause(byPlayer: PlayerObject | null): void; /** * Event called when the game is unpaused. * After this event there's a timer before the game is fully unpaused. * Listen for the first onGameTick event after this to detect when the game has really resumed. * @param byPlayer - The player who unpaused the game (can be null if not caused by a player). */ onGameUnpause(byPlayer: PlayerObject | null): void; /** * Event called when the players and ball positions are reset after a goal. */ onPositionsReset(): void; /** * Event called when a player gives signs of activity (e.g., pressing a key). * Useful for detecting inactive players. * @param player - The player who showed activity. */ onPlayerActivity(player: PlayerObject): void; /** * Event called when the stadium is changed. * @param newStadiumName - The name of the new stadium. * @param byPlayer - The player who changed the stadium (can be null if not caused by a player). */ onStadiumChange(newStadiumName: string, byPlayer: PlayerObject | null): void; /** * Event called when the room link is obtained. * @param url - The room URL. */ onRoomLink(url: string): void; /** * Event called when the kick rate limit is set. * @param min - The minimum frames between kicks. * @param rate - The rate parameter. * @param burst - The burst parameter. * @param byPlayer - The player who changed the setting (can be null if not caused by a player). */ onKickRateLimitSet(min: number, rate: number, burst: number, byPlayer: PlayerObject | null): void; /** * Event called when the teams lock setting is changed. * @param locked - Whether the teams are currently locked. * @param byPlayer - The player who changed the setting (can be null if not caused by a player). */ onTeamsLockChange(locked: boolean, byPlayer: PlayerObject | null): void; } /** * Holds information about a player. */ interface PlayerObject { /** The unique id of the player. Each player gets a unique id that will never change. */ id: number; /** The name of the player. */ name: string; /** The team of the player (0 = Spectators, 1 = Red, 2 = Blue). */ team: TeamID; /** Whether the player has admin rights. */ admin: boolean; /** The player's position in the field, or null if the player is not in the field. */ position: { x: number; y: number; } | null; } interface PlayerJoinObject extends PlayerObject { /** * The player's public ID. Players can view their own ID at https://www.haxball.com/playerauth * Useful for validating a player is who they claim to be, but not for verifying they aren't someone else. * Good for user accounts, not suitable for banning systems. * Can be null if ID validation fails. Only set in the onPlayerJoin event. */ auth: string | null; /** * A string that uniquely identifies the player's connection. * If two players join using the same network, this string will be equal. * Only set in the onPlayerJoin event. */ conn: string; } /** * Holds information relevant to the current game scores. */ interface ScoresObject { /** The number of goals scored by the red team. */ red: number; /** The number of goals scored by the blue team. */ blue: number; /** The number of seconds elapsed (doesn't advance while the game is paused). */ time: number; /** The score limit for the game. */ scoreLimit: number; /** The time limit for the game. */ timeLimit: number; } /** * Team identifiers. * - 0 = Spectators * - 1 = Red Team * - 2 = Blue Team */ type TeamID = 0 | 1 | 2; /** * Holds information about a game physics disc. */ interface DiscPropertiesObject { /** The x coordinate of the disc's position. */ x: number; /** The y coordinate of the disc's position. */ y: number; /** The x coordinate of the disc's speed vector. */ xspeed: number; /** The y coordinate of the disc's speed vector. */ yspeed: number; /** The x coordinate of the disc's gravity vector. */ xgravity: number; /** The y coordinate of the disc's gravity vector. */ ygravity: number; /** The disc's radius. */ radius: number; /** The disc's bouncing coefficient. */ bCoeff: number; /** The inverse of the disc's mass. */ invMass: number; /** The disc's damping factor. */ damping: number; /** The disc's color as an integer (0xFF0000 = red, 0x00FF00 = green, 0x0000FF = blue, -1 = transparent). */ color: number; /** The disc's collision mask (represents what groups the disc can collide with). */ cMask: number; /** The disc's collision groups. */ cGroup: number; } /** * Contains flag constants used as helpers for reading and writing collision flags. * Collision flags determine which objects collide and which objects ignore each other. * * Object A and B will collide if and only if: * (A.cGroup & B.cMask != 0) && (B.cGroup & A.cMask != 0) * * @see https://github.com/haxball/haxball-issues/wiki/Collision-Flags */ interface CollisionFlagsObject { /** Default collision group of the ball. */ ball: number; /** Automatically added to players of the red team. */ red: number; /** Automatically added to players of the blue team. */ blue: number; /** Kickoff barriers active during kickoff for the red team. */ redKO: number; /** Kickoff barriers active during kickoff for the blue team. */ blueKO: number; /** Default collision group for vertexes, segments, and planes. */ wall: number; /** Represents a set including ball, red, blue, redKO, blueKO, and wall. */ all: number; /** Objects with this flag in their cGroup become kickable by players. */ kick: number; /** Objects with this flag in their cGroup will score goals if they cross a goal line. */ score: number; /** Custom collision flag with no special meaning, can be used for any purpose. */ c0: number; /** Custom collision flag with no special meaning, can be used for any purpose. */ c1: number; /** Custom collision flag with no special meaning, can be used for any purpose. */ c2: number; /** Custom collision flag with no special meaning, can be used for any purpose. */ c3: number; } /** * Root object of a stadium file (.hbs). * A HaxBall stadium file is a text file with JSON5 format containing a single StadiumObject. */ interface StadiumObject { /** The name of the stadium. */ name?: string; /** Width of the rectangle centered at <0,0> in which the camera will be contained. */ width?: number; /** Height of the rectangle centered at <0,0> in which the camera will be contained. */ height?: number; /** * Maximum allowed viewable width for the level. * If the player screen is wide enough to see more than maxViewWidth, the game will zoom in. * Setting to 0 disables this feature. Default: 0 */ maxViewWidth?: number; /** * Changes camera following behavior. * "player" = follow player only, ignore ball * "ball" = follow average position between player and ball, prioritize player if too far apart * Default: "ball" */ cameraFollow?: string; /** * Distance from <0,0> at which teams spawn during kickoff. * Ignored if redSpawnPoints or blueSpawnPoints are not empty. */ spawnDistance?: number; /** Whether this stadium can be stored with the /store command. Default: true */ canBeStored?: boolean; /** * "partial" = only ball and player discs reset for kickoff * "full" = all discs reset for kickoff * Default: "partial" */ kickOffReset?: string; /** Object describing the background for the stadium. */ bg: BackgroundObject; /** * Map of named traits. TraitValues define default values for any object that references that trait. * Useful for avoiding repetition when manually writing stadium files. */ traits?: Record<string, Partial<Vertex & Segment & Goal & Plane & Disc & Joint>>; /** List of vertexes (collision points). */ vertexes?: Vertex[]; /** List of segments (lines connecting vertexes). */ segments?: Segment[]; /** List of goals. */ goals?: Goal[]; /** List of discs (circular physical objects). */ discs?: Disc[]; /** List of planes (infinite collision lines). */ planes?: Plane[]; /** List of joints (physical connections between discs). */ joints?: Joint[]; /** * List of spawn points for red team kickoff. * If empty, default spawn behavior is used. * When a player joins a started game, they're positioned at the last point. * Default: [] */ redSpawnPoints?: [number, number][]; /** * List of spawn points for blue team kickoff. * If empty, default spawn behavior is used. * Default: [] */ blueSpawnPoints?: [number, number][]; /** Object describing player physics. If omitted, default player physics will be used. */ playerPhysics?: PlayerPhysics; /** * Disc used to create the ball. Collision flags "kick" and "score" are automatically added. * Setting to "disc0" uses the first disc as the ball (cGroup left unmodified). * If omitted, default ball physics will be used. */ ballPhysics?: Disc | "disc0"; } /** * Describes the background for the stadium. */ interface BackgroundObject { /** Type of background: "grass", "hockey", or "none". Default: "none" */ type?: "grass" | "hockey" | "none"; /** Width of the background rectangle. Default: 0 */ width?: number; /** Height of the background rectangle. Default: 0 */ height?: number; /** Radius of the kickoff circle. Default: 0 */ kickOffRadius?: number; /** Radius of the corners (creates rounded corners if > 0). Default: 0 */ cornerRadius?: number; /** Horizontal distance to goals from <0,0>, used by "hockey" background only. Default: 0 */ goalLine?: number; /** Background color for the stadium. Default: "718C5A" */ color?: string | [number, number, number]; } /** * A vertex is a point which can collide with discs but cannot move and is not visible. */ interface Vertex { /** The x position for the vertex. */ x?: number; /** The y position for the vertex. */ y?: number; /** The bouncing coefficient. */ bCoef?: number; /** List of flags representing this object's collision mask. */ cMask?: string[]; /** List of flags representing this object's collision group. */ cGroup?: string[]; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } /** * A segment is a line (curved or straight) that connects two vertexes. * Discs can collide with segments and they can also be used as decoration. */ interface Segment { /** Index of a vertex in the stadium vertex list to be used as first point of the segment. */ v0?: number; /** Index of a vertex in the stadium vertex list to be used as the second point of the segment. */ v1?: number; /** The bouncing coefficient. */ bCoef?: number; /** The angle in degrees with which the segment will curve forming an arc. 0 = straight line. Default: 0 */ curve?: number; /** Alternative representation of curve. If present, curve value is ignored. */ curveF?: number; /** * Determines segment thickness and makes it one-way if != 0. * 0 = collide normally on both sides * Other values = one-way collision with specified thickness * Useful for boundaries that prevent fast moving balls from passing through. Default: 0 */ bias?: number; /** List of flags representing this object's collision mask. */ cMask?: string[]; /** List of flags representing this object's collision group. */ cGroup?: string[]; /** If false, the segment will be invisible. Default: true */ vis?: boolean; /** The color with which the segment will be drawn. Default: "000000" (black) */ color?: string | [number, number, number]; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } /** * Goals are lines belonging to a team. When the ball crosses this line, the opposite team scores. */ interface Goal { /** The coordinates of the first point of the line in array form [x, y]. */ p0?: [number, number]; /** The coordinates of the second point of the line in array form [x, y]. */ p1?: [number, number]; /** The team the goal belongs to: "red" or "blue". */ team?: "red" | "blue"; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } /** * Planes are collision objects that divide the map in two by an infinite line. * Useful for creating the boundaries of the stadium. */ interface Plane { /** The direction vector of the plane in array form [x, y]. */ normal?: [number, number]; /** The distance from coordinates [0,0] (in direction of the normal) where the plane is located. */ dist?: number; /** The bouncing coefficient. */ bCoef?: number; /** List of flags representing this object's collision mask. */ cMask?: string[]; /** List of flags representing this object's collision group. */ cGroup?: string[]; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } /** * Discs are circular physical objects placed in the stadium. They can move and collide with other discs. */ interface Disc { /** The starting position of the object in array form [x, y]. */ pos?: [number, number]; /** The starting speed of the object in array form [x, y]. */ speed?: [number, number]; /** The gravity vector of the object in array form [x, y]. */ gravity?: [number, number]; /** The radius of the disc. */ radius?: number; /** The inverse of the disc's mass. */ invMass?: number; /** The damping factor of the disc. */ damping?: number; /** The disc fill color. Supports "transparent". Default: "FFFFFF" */ color?: string | [number, number, number]; /** The bouncing coefficient. */ bCoef?: number; /** List of flags representing this object's collision mask. */ cMask?: string[]; /** List of flags representing this object's collision group. */ cGroup?: string[]; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } /** * Describes physical constants affecting the players. */ interface PlayerPhysics { /** The gravity vector affecting players. */ gravity?: [number, number]; /** The radius of the player disc. */ radius?: number; /** The inverse of the player's mass. */ invMass?: number; /** The bouncing coefficient. */ bCoef?: number; /** The damping factor. */ damping?: number; /** The collision groups the player belongs to. */ cGroup?: string[]; /** How fast a player accelerates when moving with keys. */ acceleration?: number; /** Replaces acceleration when the player is holding the kick button. */ kickingAcceleration?: number; /** Replaces damping when the player is holding the kick button. */ kickingDamping?: number; /** How much force the player applies to the ball when kicking. */ kickStrength?: number; /** Like kickStrength but applied to the kicking player instead. */ kickback?: number; } /** * Joints are physical connections between two discs. */ interface Joint { /** * Index of one of the two discs connected by the joint. * Note: Index 0 is used by the ball disc if StadiumObject.ballPhysics is not set to "disc0". */ d0?: number; /** * Index of one of the two discs connected by the joint. * Note: Index 0 is used by the ball disc if StadiumObject.ballPhysics is not set to "disc0". */ d1?: number; /** * The length of the joint. * - null = automatically computed to match the distance between the two discs * - float = use that value as length * - [min, max] = joint has min and max length, applies no forces if distance is in range * Default: null */ length?: number | [number, number] | null; /** * The strength of the joint. * - "rigid" = joint acts like a solid * - float = joint acts like a spring * Default: "rigid" */ strength?: number | "rigid"; /** The color of the joint. Supports "transparent". Default: "000000" (black) */ color?: string | [number, number, number]; /** A trait to use as default values for this object. See StadiumObject traits property for more info. */ trait?: string; } //#endregion //#region src/runtime.d.ts type Constructor = new (...args: never[]) => object; interface WebRTCImplementation { RTCPeerConnection: Constructor; RTCIceCandidate: Constructor; RTCSessionDescription: Constructor; } interface HaxballJSConfig { proxy?: string; debug?: boolean; webrtc?: WebRTCImplementation; } declare class InvalidRoomTokenError extends Error { constructor(); } //#endregion //#region src/index.d.ts declare function HaxballJS(config?: HaxballJSConfig): Promise<typeof HBInit>; //#endregion export { BackgroundObject, CollisionFlagsObject, Disc, DiscPropertiesObject, Goal, HBInit, type HaxballJSConfig, InvalidRoomTokenError, Joint, Plane, PlayerJoinObject, PlayerObject, PlayerPhysics, RoomConfigObject, RoomObject, ScoresObject, Segment, StadiumObject, TeamID, Vertex, type WebRTCImplementation, HaxballJS as default };