api-websocket-bridge
Version:
API WebSocket Bridge is a Node.js application that provides a WebSocket server for real-time communication. It allows clients to connect and exchange data using the WebSocket protocol
150 lines (108 loc) • 4.8 kB
Markdown
API WebSocket Bridge is a Node.js application designed to be run in a Docker container. It constantly refreshes an API at a set interval and distributes WebSocket (WSS) events to connected clients.
## Prerequisites
Before running the API WebSocket Bridge, make sure you have the following:
- Docker installed on your machine.
## Getting Started
To run the API WebSocket Bridge in a Docker container, follow these steps:
1. Clone this repository to your local machine.
2. Navigate to the project directory.
```bash
cd websocket-driver
```
3. Configure the API WebSocket Bridge by editing the `config.json` file located in the `config` directory. Refer to the 'Configuration' section below for details on how to customize the configuration based on your requirements and the API you are working with.
4. Build the Docker image.
```bash
docker build -t websocket-driver .
```
5. Run the Docker container, exposing the necessary port and providing the required volume mounts.
```bash
docker run -d -p 8080:8080 --name websocket-container \
-v /path/to/cert/fullchain.pem:/app/cert/fullchain.pem \
-v /path/to/cert/privkey.pem:/app/cert/privkey.pem \
-v /path/to/config:/app/config \
websocket-driver
```
Make sure to replace `/path/to/cert` with the path to your SSL certificate and key files, and `/path/to/config` with the path to your `config.json` file.
## Configuration
The WebSocketDriver application relies on a configuration file (`config.json`) to specify various settings. Below is an example configuration that corresponds to the example response from Salty Bet's API:
```json
{
"certPath": "/app/cert/fullchain.pem",
"keyPath": "/app/cert/privkey.pem",
"port": 8080,
"updateInterval": 5000,
"apiUrl": "https://www.saltybet.com/state.json",
"events": {
"teamNamesChange": {
"emitEvent": "teamNamesChange",
"params": ["p1name", "p2name"]
},
"betAmountChange": {
"emitEvent": "betAmountChange",
"params": ["p1total", "p2total"]
},
"statusChange": {
"emitEvent": "statusChange",
"params": ["status"]
},
"alertChange": {
"emitEvent": "alertChange",
"params": ["alert"]
},
"remainingChange": {
"emitEvent": "remainingChange",
"params": ["remaining"]
}
}
}
```
- `"certPath"` and `"keyPath"` specify the file paths for the SSL certificate and private key respectively.
- `"port"` defines the port number on which the WebSocket server will run.
- `"updateInterval"` determines the interval (in milliseconds) at which the API will be checked for updates.
- `"apiUrl"` specifies the URL of the API that provides the match information. In this case, it is Salty Bet's API endpoint (`https://www.saltybet.com/state.json`).
- `"events"` contains a mapping of event types to their corresponding configuration.
The example response from Salty Bet's API:
```json
{
"p1name": "Upset chieshen",
"p2name": "Brunestud arcueid",
"p1total": "0",
"p2total": "0",
"status": "open",
"alert": "",
"x": 0,
"remaining": "78 more matches until the next tournament!"
}
```
The configuration defines five events with their respective `emitEvent` names and associated parameters. These events allow you to subscribe to specific changes in the API response:
- `teamNamesChange`: Triggers when the names of the players change (`"p1name"` or `"p2name"`).
- `betAmountChange`: Triggers when the total bet amounts change (`"p1total"` or `"p2total"`).
- `statusChange`: Triggers when the match status changes (`"status"`).
- `alertChange`: Triggers when there is an alert or message change (`"alert"`).
- `remainingChange`: Triggers when the number of matches remaining changes (`"remaining"`).
These events provide flexibility in handling specific updates and allow you to emit WebSocket events accordingly.
Please make sure to modify the configuration file (`config.json`) according to your requirements and the API you are working with.
## Development
To set up the project for development, follow these steps:
1. Clone this repository to your local machine.
2. Navigate to the project directory.
```bash
cd api-websocket-bridge
```
3. Install the required dependencies.
```bash
npm install
```
4. Start the API WebSocket Bridge.
```bash
npm start
```
The API WebSocket Bridge will now be running on your local machine.
## License
This project is licensed under the [Apache 2.0](LICENSE).
## Acknowledgements
This project makes use of the following packages:
- [axios](https://www.npmjs.com/package/axios) v1.4.0
- [events](https://www.npmjs.com/package/events) v3.3.0
We would like to express our gratitude to the authors and maintainers of these packages for their valuable contributions to the open-source community.