> A library for creating online APIs using TypeScript.
> The server-side is described as classes, and the client-side is generated at runtime.

## What is it

Booger is a library for creating online RPC services. It uses [ws](https://github.com/websockets/ws) as the transport.
The main idea is to write [minimal code](https://moskvandr.gitlab.io/booger-pupa/#/en-en/min-code-example.md) only for the server-side, and use definitions for autocompletion and build-time checking on the client-side. The secondary goal is to utilize the capabilities of online connections to enhance RPC functionality.

> This is an experiment to test ideas. Currently, everything is being tested in controlled environments, with modern browsers and Node.js used as the client-side.

### Features...

These are the convenience features implemented in the library:
* [Validation of incoming and outgoing data](https://moskvandr.gitlab.io/booger-pupa/#/en-en/zod-example.md) using [Zod](https://zod.dev/) schemas;
* [Definitions](https://moskvandr.gitlab.io/booger-pupa/#/en-en/definition-example.md) for convenient type usage on the client-side;
* [File uploads](https://moskvandr.gitlab.io/booger-pupa/#/en-en/upload);
* [Cookie handling](https://moskvandr.gitlab.io/booger-pupa/#/en-en/cookie);

### Online Connection Capabilities

Thanks to the online connection, several interesting features have been implemented. It's still unclear what their purpose is, but they look intriguing.
* [Instances](https://moskvandr.gitlab.io/booger-pupa/#/en-en/instances-example.md);
* Server can send [events](https://moskvandr.gitlab.io/booger-pupa/#/en-en/events-example.md) to clients;
* [Special fields](https://moskvandr.gitlab.io/booger-pupa/#/en-en/special-example);

## Special Features

* [Hooks](https://moskvandr.gitlab.io/booger-pupa/#/en-en/hooks-example.md) allow intercepting control at important points;

* For each client-side action, you can create a factory and create an object of its type;

* Can certain entities be created automatically upon connection?
