<commit_before># Openflame
:fire: :fire: :fire: ![stability-experimental](https://img.shields.io/badge/stability-experimental-orange.svg) :fire: :fire: :fire:

## What is it?
Openflame is an open source, RxJS-based SDK for Firebase being developed as an alternative to the official Web SDK. It is not intended as a drop-in replacement.
 
## But... why?
This started just for fun, to be honest. I wanted to learn what the SDK was really doing behind the scenes and figure out how and when it communicated with the Firebase servers, so one weekend I started looking into it.

The communication part was easy. I could simply use the SDK to attach listeners, or change data, or do any other operation and then monitor the WebSocket frames being sent back an forth.

Figuring out what was actually happening on the client side, though, was trickier. The official SDK is closed-sourced and only available as a set of minified files, so I began implementing my own tiny version of it. At first it was just a playground, allowing me to send commands over the WebSocket and see and react to the server's response. But then it just kept growing and growing until I realized I was reimplementing the whole database SDK, so I decided to roll with it.


## Components
Openflame has been built with modularity in mind from the very beginning, even if only the database part of the SDK has been implemented for now. It's published as several independent packages, each adding the functionality of one the Firebase services.

* #### `@openflame/core`

  This is the core component that ties everything together and offers the entry point to all the functionality. It is a required dependency.

* #### `@openflame/database`
  *Work in progress.* Written from scratch, the database component offers an Observable-based API to interact with the Firebase Realtime Database. The basics have been implemented but several features are still missing. Only WebSocket communication is supported, no long polling. It supports authentication if used together with `@openflame/auth` (see below.)
  
* #### `@openflame/auth`
  Authentication is serious business. It's really difficult to get it right but extremely easy—and painful—to mess things up. For that reason, and because I just don't have the time right now, I decided against implementing my own. `@openflame/auth` is just a wrapper around the official auth SDK, giving you access to all of its functionality but also allowing the database component to hook into authentication-related events. 

### Future components
* #### `@openflame/storage`
  ***Not implemented yet.*** Would allow access to Cloud Storage for Firebase.

* #### `@openflame/messaging`
  ***Not implemented yet.*** Would allow access to Firebase Cloud Messaging (FCM).

## Examples
<commit_msg>docs(readme): rewording<commit_after># Openflame
:fire: :fire: :fire: ![stability-experimental](https://img.shields.io/badge/stability-experimental-orange.svg) :fire: :fire: :fire:

## What is it?
Openflame is an RxJS-based, open-source SDK for Firebase being developed as an alternative to the official web SDK. It is not intended as a drop-in replacement.
 
## But... why?
This started just for fun, to be honest. I wanted to learn what the SDK was really doing behind the scenes and figure out how and when it communicated with the Firebase servers, so one weekend I started looking into it.

The communication part was easy. I could simply use the SDK to attach listeners, or change data, or do any other operation and then monitor the WebSocket frames being sent back an forth.

Figuring out what was actually happening on the client side, though, was trickier. The official SDK is closed-sourced and only available as a set of minified files, so I began implementing my own tiny version of it. At first it was just a playground, allowing me to send commands over the WebSocket and see and react to the server's response. But then it just kept growing and growing until I realized I was reimplementing the whole database SDK, so I decided to roll with it.


## Components
Openflame has been built with modularity in mind from the very beginning, even if only the database part of the SDK has been implemented for now. It's published as several independent packages, each adding the functionality of one the Firebase services.

* #### `@openflame/core`

  This is the core component that ties everything together and offers the entry point to all the functionality. It is a required dependency.

* #### `@openflame/database`
  *Work in progress.* Written from scratch, the database component offers an Observable-based API to interact with the Firebase Realtime Database. The basics have been implemented but several features are still missing. Only WebSocket communication is supported, no long polling. It supports authentication if used together with `@openflame/auth` (see below.)
  
* #### `@openflame/auth`
  Authentication is serious business. It's really difficult to get it right but extremely easy—and painful—to mess things up. For that reason, and because I just don't have the time right now, I decided against implementing my own. `@openflame/auth` is just a wrapper around the official auth SDK, giving you access to all of its functionality but also allowing the database component to hook into authentication-related events. 

### Future components
* #### `@openflame/storage`
  ***Not implemented yet.*** Would allow access to Cloud Storage for Firebase.

* #### `@openflame/messaging`
  ***Not implemented yet.*** Would allow access to Firebase Cloud Messaging (FCM).

## Examples

{'fraction_non_alphanumeric': 0.06287959985709182, 'fraction_numerical': 0.0, 'mean_word_length': 4.543564356435644, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3762328', 'n_tokens_mistral': 1389, 'n_tokens_neox': 1338, 'n_words': 820}