open-index/open-npm huggingface dataset:
npm package: @hax-brasil/replay-decoder
Description: Node.js HBR2 decoder and validator powered by haxball-replay-decoder
Latest version: 1.0.1

# @hax-brasil/replay-decoder

Node.js native decoder and validator for Haxball `HBR2` replay files.

This package wraps [`haxball-replay-decoder`](https://crates.io/crates/haxball-replay-decoder) with N-API and exposes:

- sync + async replay decoding
- sync + async replay validation
- rich structured decode errors
- full TypeScript types for decoded replay structures and validation reports

## Install

```bash
pnpm add @hax-brasil/replay-decoder
```

## Usage

```ts
import { decode, validate, tryDecode, ReplayDecodeError } from '@hax-brasil/replay-decoder'
import { readFileSync } from 'node:fs'

const bytes = readFileSync('./recording.hbr2')

const replay = decode(bytes)
console.log(replay.version, replay.totalFrames)

const report = validate(bytes, 'strict')
console.log(report.issues)

const safe = tryDecode(bytes)
if (!safe.ok) {
  console.error(safe.error.kind, safe.error.details)
}

try {
  decode(Buffer.from('bad'))
} catch (error) {
  if (error instanceof ReplayDecodeError) {
    console.error(error.kind, error.details)
  }
}
```

## API

- `decode(bytes, options?) => ReplayData`
- `decodeAsync(bytes, options?) => Promise<ReplayData>`
- `tryDecode(bytes, options?) => DecodeResult`
- `tryDecodeAsync(bytes, options?) => Promise<DecodeResult>`
- `validate(bytes, profile?) => ValidationReport`
- `validateAsync(bytes, profile?) => Promise<ValidationReport>`

### Input

All APIs accept only bytes:

- `Buffer`
- `Uint8Array`

### Decode options

```ts
interface DecodeOptions {
  validationProfile?: 'strict' | 'structural'
  allowUnknownEventTypes?: boolean
}
```

## Development

```bash
pnpm install
pnpm build
pnpm test
```
npm package: @hax-brasil/replay-decoder-linux-x64-gnu
Description: Node.js HBR2 decoder and validator powered by haxball-replay-decoder
Latest version: 1.0.1

# `@hax-brasil/replay-decoder-linux-x64-gnu`

This is the **x86_64-unknown-linux-gnu** binary for `@hax-brasil/replay-decoder`
npm package: @hax-brasil/replay-decoder-win32-x64-msvc
Description: Node.js HBR2 decoder and validator powered by haxball-replay-decoder
Latest version: 1.0.1

# `@hax-brasil/replay-decoder-win32-x64-msvc`

This is the **x86_64-pc-windows-msvc** binary for `@hax-brasil/replay-decoder`
npm package: @haxball-bot/bot
Description: Haxball space core module
Author: Ojo Haxball
Latest version: 0.0.7

# Haxball Bot

A library to allow build scalable haxball bots faster. It implements a wrapper around the Haxball headless API with a better events interface and command manager included.

Also you can program bot tasks through "behaviors". With a "behavior" you can tell the bot to do B when A happens.

Some useful utilities are also included: A flood detection system, a ban system based on votes, and a stats module. All those are optional.

## Why?

The current headless API is not the best to build a scalable bot. This wrapper implements a better event system where you can suscribe N functions to an event.

Example:

```
import { Bot, SpaceBounce, Ban, Colors, Afk, Stats, FloodProtection } from "@haxball-bot/bot";

/*
You can define a window.onHBLoaded if you load the script automatically,
but this way is useful when you copy/paste to the console, that is what I do while
captcha is not removed and I can't host a room on a VPS
*/
const interval = setInterval(() => {
	if (window.HBInit) {
		init();
		clearInterval(interval);
	}
}, 100);

//create a new bot
const init = () => {
	const bot = new Bot({
		roomName: "👁J 👁 Space Bounce",
		maxPlayers: 14,
		public: true,
		playerName: "🤖",
		customStadium: SpaceBounce,
		scoreLimit: 4,
		timeLimit: 3,
		teamsLock: true
	});

	const room = bot.getRoom();

	new Ban(room);
	new Chat(room);
	new Afk(room);
	new Colors(room);
	new Stats(room);
	new Behaviors(room);
	new FloodProtection(room);
}

//create your own command modules
class Welcome extends Command {
	constructor(room, {
		">info": (player, message) => {
			this.room.sendChat(`Hello ${player.name}, this is an automated room, enter >commands to list all available commands`)
		},
		">commands": (player, message) => {
			this.room.sendChat(`Available commands are >info >commands`)
		}
	})
}
//this will add the >info command to your room
new Welcome(room);

//listen to an event
room.addEventListener("onGameStart", () => {
	room.sendChat("Game Started!");
});
```

## Install

Using npm:

`npm i @haxball-bot/bot`

or yarn

`yarn add @haxball-bot/bot`


## Bot options

## Available command modules
Command modules are a set of related commands that implement a functionallity. For example, a Ban module is included. Players can vote to ban a player. We track the ban votes inside the module automatically.


## Available behaviors

## Contribute

Feel free to contribute if you have an idea.

## License

MIT