erlc-api 3.3.0 → 3.3.2-a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -59
- package/README_ES.md +168 -0
- package/package.json +12 -5
- package/pnpm-workspace.yaml +2 -0
- package/src/classes/client.js +13 -2
- package/src/constants.js +5 -2
- package/src/erlc.js +29 -1
- package/src/errors/ErlcError.js +3 -0
- package/src/functions/global/resetGlobalKey.js +12 -8
- package/src/functions/server/getBans.js +11 -41
- package/src/functions/server/getCommandLogs.js +9 -41
- package/src/functions/server/getEmergencyCalls.js +15 -0
- package/src/functions/server/getJoinLogs.js +8 -41
- package/src/functions/server/getKillLogs.js +8 -41
- package/src/functions/server/getModcallLogs.js +8 -41
- package/src/functions/server/getPlayers.js +8 -41
- package/src/functions/server/getQueue.js +8 -41
- package/src/functions/server/getServer.js +50 -68
- package/src/functions/server/getStaff.js +8 -41
- package/src/functions/server/getVehicles.js +8 -41
- package/src/functions/server/requestServer.js +179 -0
- package/src/functions/server/runCommand.js +22 -53
- package/src/types/index.d.ts +91 -5
- package/src/utils/cache.js +63 -0
- package/src/utils/discord.js +99 -0
- package/src/utils/errorHandler.js +22 -1
- package/tests/cache.test.js +46 -0
package/README.md
CHANGED
|
@@ -4,40 +4,42 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://www.npmjs.com/package/erlc-api)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[🇪🇸 Versión en Español](README_ES.md)
|
|
8
|
+
|
|
9
|
+
A lightweight, complete, and **fully typed** library for interacting with the *Emergency Response: Liberty County* (ER:LC) API. Designed to provide the best development experience in both JavaScript and TypeScript.
|
|
8
10
|
|
|
9
11
|
---
|
|
10
12
|
|
|
11
|
-
## ✨
|
|
13
|
+
## ✨ Features
|
|
12
14
|
|
|
13
|
-
- 🎯 **
|
|
14
|
-
- 🛡️ **
|
|
15
|
-
- ⚡ **
|
|
16
|
-
- 🔒 **
|
|
17
|
-
- 🆕 **
|
|
15
|
+
- 🎯 **Current API Support**: Uses `https://api.erlc.gg/v2` where available.
|
|
16
|
+
- 🛡️ **TypeScript Support**: Native type definitions included.
|
|
17
|
+
- ⚡ **Lightweight & Fast**: No unnecessary heavy dependencies.
|
|
18
|
+
- 🔒 **Secure**: Robust token validation and error handling.
|
|
19
|
+
- 🆕 **Up-to-date**: Supports optional global API keys for large-scale apps.
|
|
18
20
|
|
|
19
|
-
## 📦
|
|
21
|
+
## 📦 Installation
|
|
20
22
|
|
|
21
23
|
```bash
|
|
22
24
|
npm install erlc-api
|
|
23
|
-
#
|
|
25
|
+
# or
|
|
24
26
|
bun add erlc-api
|
|
25
27
|
```
|
|
26
28
|
|
|
27
|
-
## 🚀
|
|
29
|
+
## 🚀 Quick Start
|
|
28
30
|
|
|
29
|
-
###
|
|
31
|
+
### Initialization
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
You can use the library with or without a `Global Token` (required only for large-scale applications).
|
|
32
34
|
|
|
33
35
|
**JavaScript**
|
|
34
36
|
```javascript
|
|
35
37
|
const erlc = require("erlc-api");
|
|
36
38
|
|
|
37
|
-
//
|
|
39
|
+
// Simple initialization (Recommended for most users)
|
|
38
40
|
const client = new erlc.Client();
|
|
39
41
|
|
|
40
|
-
//
|
|
42
|
+
// Or with Global Token (For Large Apps)
|
|
41
43
|
// const client = new erlc.Client({ globalToken: "..." });
|
|
42
44
|
```
|
|
43
45
|
|
|
@@ -50,97 +52,104 @@ const client = new Client();
|
|
|
50
52
|
|
|
51
53
|
---
|
|
52
54
|
|
|
53
|
-
## 📖
|
|
55
|
+
## 📖 Usage Examples
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
Make sure to have your `Server Key` ready (get it from your private server settings in ER:LC).
|
|
56
58
|
|
|
57
|
-
### 🖥️
|
|
59
|
+
### 🖥️ Server Information
|
|
58
60
|
|
|
59
61
|
```javascript
|
|
60
|
-
const serverToken = "
|
|
62
|
+
const serverToken = "your-server-key-here";
|
|
61
63
|
|
|
62
|
-
//
|
|
64
|
+
// Get server status
|
|
63
65
|
const server = await erlc.getServer(serverToken);
|
|
64
|
-
console.log(`
|
|
66
|
+
console.log(`Server: ${server.Name} | Players: ${server.CurrentPlayers}/${server.MaxPlayers}`);
|
|
65
67
|
|
|
66
|
-
//
|
|
68
|
+
// Get connected players
|
|
67
69
|
const players = await erlc.getPlayers(serverToken);
|
|
68
|
-
console.table(players); //
|
|
70
|
+
console.table(players); // Shows name, ID, permission, and team
|
|
69
71
|
|
|
70
|
-
//
|
|
72
|
+
// Get vehicles on the map
|
|
71
73
|
const vehicles = await erlc.getVehicles(serverToken);
|
|
74
|
+
|
|
75
|
+
// Get emergency calls
|
|
76
|
+
const emergencyCalls = await erlc.getEmergencyCalls(serverToken);
|
|
77
|
+
|
|
78
|
+
// Fetch server info with v2 include flags in one request
|
|
79
|
+
const fullServer = await erlc.getServer(serverToken, {
|
|
80
|
+
players: true,
|
|
81
|
+
staff: true,
|
|
82
|
+
emergencyCalls: true,
|
|
83
|
+
});
|
|
72
84
|
```
|
|
73
85
|
|
|
74
|
-
### 📜
|
|
86
|
+
### 📜 Logs
|
|
75
87
|
|
|
76
|
-
|
|
88
|
+
Access your server's activity history:
|
|
77
89
|
|
|
78
90
|
```javascript
|
|
79
|
-
// Logs
|
|
91
|
+
// Join/Leave Logs
|
|
80
92
|
const joinLogs = await erlc.getJoinLogs(serverToken);
|
|
81
93
|
|
|
82
|
-
// Logs
|
|
94
|
+
// Kill Logs (Killfeed)
|
|
83
95
|
const killLogs = await erlc.getKillLogs(serverToken);
|
|
84
96
|
|
|
85
|
-
// Logs
|
|
97
|
+
// Command Logs
|
|
86
98
|
const commandLogs = await erlc.getCommandLogs(serverToken);
|
|
87
99
|
|
|
88
|
-
//
|
|
100
|
+
// Mod Call Logs
|
|
89
101
|
const modCalls = await erlc.getModcallLogs(serverToken);
|
|
90
102
|
```
|
|
91
103
|
|
|
92
|
-
### 🛠️
|
|
104
|
+
### 🛠️ Management & Administration
|
|
93
105
|
|
|
94
106
|
```javascript
|
|
95
|
-
//
|
|
107
|
+
// Get Ban List
|
|
96
108
|
const bans = await erlc.getBans(serverToken);
|
|
97
109
|
|
|
98
|
-
//
|
|
110
|
+
// Get Server Staff
|
|
99
111
|
const staff = await erlc.getStaff(serverToken);
|
|
100
112
|
|
|
101
|
-
//
|
|
102
|
-
await erlc.
|
|
113
|
+
// Get Queue
|
|
114
|
+
const queue = await erlc.getQueue(serverToken);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### ⚡ Run Command
|
|
103
118
|
|
|
104
|
-
|
|
105
|
-
|
|
119
|
+
Execute commands directly from your code:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
const command = await erlc.runCommand(serverToken, ":announce This is an API test!");
|
|
123
|
+
console.log(command); // Returns true if successful
|
|
106
124
|
```
|
|
107
125
|
|
|
108
126
|
---
|
|
109
127
|
|
|
110
|
-
##
|
|
128
|
+
## ⚠️ Error Handling
|
|
111
129
|
|
|
112
|
-
|
|
130
|
+
The library throws descriptive errors. You should wrap your calls in `try/catch` blocks.
|
|
113
131
|
|
|
114
132
|
```javascript
|
|
115
133
|
try {
|
|
116
|
-
await erlc.getServer(
|
|
134
|
+
const data = await erlc.getServer("invalid-token");
|
|
117
135
|
} catch (error) {
|
|
118
|
-
console.error(
|
|
119
|
-
|
|
120
|
-
if (error.code === 4001) console.log("⏳ Rate limit alcanzado, espera un momento.");
|
|
121
|
-
if (error.code === 2002) console.log("🔑 La Server Key es inválida o expiró.");
|
|
136
|
+
console.error(error.message); // e.g., "Forbidden: Access denied..."
|
|
122
137
|
}
|
|
123
138
|
```
|
|
124
139
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
|
128
|
-
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
| **4001** | Rate Limit | Estás enviando muchas peticiones muy rápido. |
|
|
132
|
-
| **403** | No Autorizado | Verifica tus permisos o tokens. |
|
|
140
|
+
| Error Code | Description |
|
|
141
|
+
|------------|-------------|
|
|
142
|
+
| `2002` | Invalid or expired server key |
|
|
143
|
+
| `3002` | Server offline |
|
|
144
|
+
| `4001` | Rate limit exceeded |
|
|
145
|
+
| `9999` | In-game server module is out of date |
|
|
133
146
|
|
|
134
147
|
---
|
|
135
148
|
|
|
136
|
-
##
|
|
149
|
+
## 🤝 Contributing
|
|
137
150
|
|
|
138
|
-
|
|
139
|
-
- [Discord de Soporte PRC](https://discord.gg/prc)
|
|
140
|
-
- [NPM Package](https://www.npmjs.com/package/erlc-api)
|
|
151
|
+
Contributions are welcome! Feel free to submit a Pull Request.
|
|
141
152
|
|
|
142
|
-
|
|
153
|
+
## 📄 License
|
|
143
154
|
|
|
144
|
-
|
|
145
|
-
<sub>Hecho con ❤️ para la comunidad de ER:LC</sub>
|
|
146
|
-
</div>
|
|
155
|
+
This project is licensed under the [MIT License](LICENSE).
|
package/README_ES.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# 🚔 ER:LC API Wrapper
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/erlc-api)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.npmjs.com/package/erlc-api)
|
|
6
|
+
|
|
7
|
+
[🇬🇧 English Version](README.md)
|
|
8
|
+
|
|
9
|
+
Una librería ligera, completa y **totalmente tipada** para interactuar con la API de _Emergency Response: Liberty County_ (ER:LC). Diseñada para ofrecer la mejor experiencia de desarrollo tanto en JavaScript como en TypeScript.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## ✨ Características
|
|
14
|
+
|
|
15
|
+
- 🎯 **Soporte API Actual**: Usa `https://api.erlc.gg/v2` donde está disponible.
|
|
16
|
+
- 🛡️ **Tipado TypeScript**: Definiciones de tipos incluidas nativamente.
|
|
17
|
+
- ⚡ **Ligero y Rápido**: Sin dependencias pesadas innecesarias.
|
|
18
|
+
- 🔒 **Seguro**: Validación de tokens y manejo de errores robusto.
|
|
19
|
+
- 🆕 **Actualizado**: Soporte para global API keys opcionales en apps grandes.
|
|
20
|
+
|
|
21
|
+
## 📦 Instalación
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install erlc-api
|
|
25
|
+
# o
|
|
26
|
+
bun add erlc-api
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 🚀 Inicio Rápido
|
|
30
|
+
|
|
31
|
+
### Inicialización
|
|
32
|
+
|
|
33
|
+
Puedes usar la librería con o sin un `Global Token` (requerido solo para aplicaciones a gran escala).
|
|
34
|
+
|
|
35
|
+
**JavaScript**
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
const erlc = require("erlc-api");
|
|
39
|
+
|
|
40
|
+
// Inicialización simple (Recomendada para la mayoría)
|
|
41
|
+
const client = new erlc.Client();
|
|
42
|
+
|
|
43
|
+
// O con Global Token (Para Large Apps)
|
|
44
|
+
// const client = new erlc.Client({ globalToken: "..." });
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**TypeScript**
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { Client, getServer } from "erlc-api";
|
|
51
|
+
|
|
52
|
+
const client = new Client();
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 📖 Ejemplos de Uso
|
|
58
|
+
|
|
59
|
+
Asegúrate de tener tu `Server Key` a mano (obtenla en los ajustes de tu servidor privado en ER:LC).
|
|
60
|
+
|
|
61
|
+
### 🖥️ Información del Servidor
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
const serverToken = "tu-server-key-aqui";
|
|
65
|
+
|
|
66
|
+
// Obtener estado del servidor
|
|
67
|
+
const server = await erlc.getServer(serverToken);
|
|
68
|
+
console.log(
|
|
69
|
+
`Servidor: ${server.Name} | Jugadores: ${server.CurrentPlayers}/${server.MaxPlayers}`,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Obtener jugadores conectados
|
|
73
|
+
const players = await erlc.getPlayers(serverToken);
|
|
74
|
+
console.table(players); // Muestra nombre, ID, permisos y equipo
|
|
75
|
+
|
|
76
|
+
// Obtener vehículos en el mapa
|
|
77
|
+
const vehicles = await erlc.getVehicles(serverToken);
|
|
78
|
+
|
|
79
|
+
// Obtener llamadas de emergencia
|
|
80
|
+
const emergencyCalls = await erlc.getEmergencyCalls(serverToken);
|
|
81
|
+
|
|
82
|
+
// Obtener información del servidor con includes de v2 en una sola petición
|
|
83
|
+
const fullServer = await erlc.getServer(serverToken, {
|
|
84
|
+
players: true,
|
|
85
|
+
staff: true,
|
|
86
|
+
emergencyCalls: true,
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 📜 Registros (Logs)
|
|
91
|
+
|
|
92
|
+
Accede a los historiales de actividad de tu servidor:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Logs de Entradas/Salidas
|
|
96
|
+
const joinLogs = await erlc.getJoinLogs(serverToken);
|
|
97
|
+
|
|
98
|
+
// Logs de Muertes (Killfeed)
|
|
99
|
+
const killLogs = await erlc.getKillLogs(serverToken);
|
|
100
|
+
|
|
101
|
+
// Logs de Comandos ejecutados
|
|
102
|
+
const commandLogs = await erlc.getCommandLogs(serverToken);
|
|
103
|
+
|
|
104
|
+
// Logs de Llamadas a Moderadores
|
|
105
|
+
const modCalls = await erlc.getModcallLogs(serverToken);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 🛠️ Gestión y Administración
|
|
109
|
+
|
|
110
|
+
```javascript
|
|
111
|
+
// Ver lista de Baneos
|
|
112
|
+
const bans = await erlc.getBans(serverToken);
|
|
113
|
+
|
|
114
|
+
// Obtener Staff del servidor
|
|
115
|
+
const staff = await erlc.getStaff(serverToken);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 📢 Otros Comandos
|
|
119
|
+
|
|
120
|
+
```javascript
|
|
121
|
+
// Ejecutar comando remoto (Ej: Anuncio)
|
|
122
|
+
await erlc.runCommand(serverToken, ":h ¡Hola desde la API!");
|
|
123
|
+
|
|
124
|
+
// Resetear Global Key (Solo si tienes una configurada)
|
|
125
|
+
// await erlc.resetGlobalKey();
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🚨 Manejo de Errores
|
|
131
|
+
|
|
132
|
+
La librería lanza errores descriptivos (`ErlcError`) que facilitan la depuración.
|
|
133
|
+
|
|
134
|
+
```javascript
|
|
135
|
+
try {
|
|
136
|
+
await erlc.getServer(serverToken);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error(`Error ${error.code}: ${error.message}`);
|
|
139
|
+
|
|
140
|
+
if (error.code === 4001)
|
|
141
|
+
console.log("⏳ Rate limit alcanzado, espera un momento.");
|
|
142
|
+
if (error.code === 2002)
|
|
143
|
+
console.log("🔑 La Server Key es inválida o expiró.");
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Códigos Comunes
|
|
148
|
+
|
|
149
|
+
| Código | Significado | Solución |
|
|
150
|
+
| :------: | ---------------- | ---------------------------------------------- |
|
|
151
|
+
| **2002** | Key Inválida | Verifica tu `Server-Key` en el juego. |
|
|
152
|
+
| **3002** | Servidor Offline | El servidor no tiene jugadores o está apagado. |
|
|
153
|
+
| **4001** | Rate Limit | Estás enviando muchas peticiones muy rápido. |
|
|
154
|
+
| **403** | No Autorizado | Verifica tus permisos o tokens. |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 🔗 Enlaces Útiles
|
|
159
|
+
|
|
160
|
+
- [Documentación Oficial de ER:LC](https://apidocs.erlc.gg/)
|
|
161
|
+
- [Discord de Soporte PRC](https://discord.gg/prc)
|
|
162
|
+
- [NPM Package](https://www.npmjs.com/package/erlc-api)
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
<div align="center">
|
|
167
|
+
<sub>Hecho con ❤️ para la comunidad de ER:LC</sub>
|
|
168
|
+
</div>
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erlc-api",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.2a",
|
|
4
4
|
"description": "An ER:LC API wrapper for JS/TS",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "src/types/index.d.ts",
|
|
7
|
+
"packageManager": "pnpm@11.1.2",
|
|
7
8
|
"keywords": [
|
|
8
9
|
"erlc",
|
|
9
10
|
"roblox",
|
|
@@ -14,16 +15,22 @@
|
|
|
14
15
|
"author": "egologics",
|
|
15
16
|
"license": "MIT",
|
|
16
17
|
"devDependencies": {
|
|
17
|
-
"
|
|
18
|
+
"jest": "^30.4.2",
|
|
19
|
+
"typescript": "^6.0.3"
|
|
18
20
|
},
|
|
19
21
|
"dependencies": {
|
|
20
|
-
"chalk": "^5.
|
|
22
|
+
"chalk": "^5.6.2",
|
|
21
23
|
"cli-table3": "^0.6.5",
|
|
22
24
|
"node-fetch": "^3.3.2",
|
|
23
|
-
"ora": "^
|
|
25
|
+
"ora": "^9.4.0"
|
|
24
26
|
},
|
|
25
27
|
"scripts": {
|
|
26
|
-
"test": "
|
|
28
|
+
"test": "jest"
|
|
29
|
+
},
|
|
30
|
+
"pnpm": {
|
|
31
|
+
"onlyBuiltDependencies": [
|
|
32
|
+
"unrs-resolver"
|
|
33
|
+
]
|
|
27
34
|
},
|
|
28
35
|
"repository": {
|
|
29
36
|
"type": "git",
|
package/src/classes/client.js
CHANGED
|
@@ -3,7 +3,13 @@ const assert = require("../functions/assert.js");
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @typedef {Object} ClientConfig
|
|
6
|
-
* @property {string} globalToken - Your ER:LC global API token
|
|
6
|
+
* @property {string} [globalToken] - Your ER:LC global API token
|
|
7
|
+
* @property {Object} [cache] - Cache configuration
|
|
8
|
+
* @property {boolean} [cache.enabled] - Enable in-memory cache
|
|
9
|
+
* @property {Object.<string, number>} [cache.ttlMs] - Per-endpoint TTL in ms
|
|
10
|
+
* @property {boolean} [cache.staleWhileRevalidate] - Placeholder for future strategy
|
|
11
|
+
* @property {Object} [logger] - Logger instance (console-compatible)
|
|
12
|
+
* @property {Function} [fetch] - Custom fetch implementation
|
|
7
13
|
*/
|
|
8
14
|
|
|
9
15
|
/**
|
|
@@ -31,7 +37,12 @@ class Client {
|
|
|
31
37
|
* @returns {ClientConfig} The client configuration.
|
|
32
38
|
*/
|
|
33
39
|
config() {
|
|
34
|
-
|
|
40
|
+
// Mutate existing config object to preserve references
|
|
41
|
+
erlc.config.globalToken = this.options.globalToken;
|
|
42
|
+
erlc.config.serverToken = this.options.serverToken;
|
|
43
|
+
erlc.config.cache = this.options.cache;
|
|
44
|
+
erlc.config.logger = this.options.logger;
|
|
45
|
+
erlc.config.fetch = this.options.fetch;
|
|
35
46
|
return erlc.config;
|
|
36
47
|
}
|
|
37
48
|
}
|
package/src/constants.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
exports.Vanity = "https://
|
|
2
|
-
exports.
|
|
1
|
+
exports.Vanity = "https://erlc.gg/join/"
|
|
2
|
+
exports.API_ORIGIN = "https://api.erlc.gg"
|
|
3
|
+
exports.API_VERSION = "v2"
|
|
4
|
+
exports.BASEURL = `${exports.API_ORIGIN}/${exports.API_VERSION}`
|
|
5
|
+
exports.LEGACY_BASEURL = `${exports.API_ORIGIN}/v1`
|
package/src/erlc.js
CHANGED
|
@@ -1,10 +1,33 @@
|
|
|
1
|
-
exports.config = {
|
|
1
|
+
exports.config = {
|
|
2
|
+
cache: {
|
|
3
|
+
enabled: false,
|
|
4
|
+
ttlMs: {
|
|
5
|
+
server: 10000,
|
|
6
|
+
players: 3000,
|
|
7
|
+
vehicles: 5000,
|
|
8
|
+
joinlogs: 3000,
|
|
9
|
+
killlogs: 3000,
|
|
10
|
+
commandlogs: 3000,
|
|
11
|
+
modcalls: 3000,
|
|
12
|
+
emergencycalls: 3000,
|
|
13
|
+
staff: 10000,
|
|
14
|
+
queue: 2000,
|
|
15
|
+
bans: 10000,
|
|
16
|
+
},
|
|
17
|
+
staleWhileRevalidate: false,
|
|
18
|
+
},
|
|
19
|
+
logger: console,
|
|
20
|
+
fetch: null,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
Object.assign(exports, require("./constants.js"));
|
|
2
24
|
|
|
3
25
|
exports.getBans = require("./functions/server/getBans.js");
|
|
4
26
|
exports.getCommandLogs = require("./functions/server/getCommandLogs.js");
|
|
5
27
|
exports.getJoinLogs = require("./functions/server/getJoinLogs.js");
|
|
6
28
|
exports.getKillLogs = require("./functions/server/getKillLogs.js");
|
|
7
29
|
exports.getModcallLogs = require("./functions/server/getModcallLogs.js");
|
|
30
|
+
exports.getEmergencyCalls = require("./functions/server/getEmergencyCalls.js");
|
|
8
31
|
exports.getPlayers = require("./functions/server/getPlayers.js");
|
|
9
32
|
exports.getServer = require("./functions/server/getServer.js");
|
|
10
33
|
exports.getQueue = require("./functions/server/getQueue.js");
|
|
@@ -14,3 +37,8 @@ exports.getStaff = require("./functions/server/getStaff.js");
|
|
|
14
37
|
exports.resetGlobalKey = require("./functions/global/resetGlobalKey.js");
|
|
15
38
|
|
|
16
39
|
exports.Client = require("./classes/client.js");
|
|
40
|
+
|
|
41
|
+
exports.utils = {
|
|
42
|
+
cache: require("./utils/cache.js"),
|
|
43
|
+
discord: require("./utils/discord.js"),
|
|
44
|
+
};
|
package/src/errors/ErlcError.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { LEGACY_BASEURL } = require("../../constants.js");
|
|
2
2
|
const { processError } = require("../../utils/errorHandler.js");
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,20 +8,24 @@ const { processError } = require("../../utils/errorHandler.js");
|
|
|
8
8
|
module.exports = () => {
|
|
9
9
|
return new Promise(async (resolve, reject) => {
|
|
10
10
|
try {
|
|
11
|
-
const
|
|
12
|
-
const { config } = await import("../../erlc.js");
|
|
11
|
+
const { config } = require("../../erlc.js");
|
|
13
12
|
|
|
14
13
|
// Check if global token is configured
|
|
15
14
|
if (!config?.globalToken) {
|
|
16
15
|
const error = await processError(
|
|
17
16
|
new Error(
|
|
18
|
-
"Global token not configured. Please initialize the client first."
|
|
19
|
-
)
|
|
17
|
+
"Global token not configured. Please initialize the client first.",
|
|
18
|
+
),
|
|
20
19
|
);
|
|
21
20
|
return reject(error);
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
const
|
|
23
|
+
const f =
|
|
24
|
+
config?.fetch ||
|
|
25
|
+
(typeof globalThis.fetch === "function"
|
|
26
|
+
? globalThis.fetch
|
|
27
|
+
: (await import("node-fetch")).default);
|
|
28
|
+
const res = await f(`${LEGACY_BASEURL}/api-key/reset`, {
|
|
25
29
|
method: "POST",
|
|
26
30
|
headers: {
|
|
27
31
|
Authorization: config.globalToken,
|
|
@@ -44,13 +48,13 @@ module.exports = () => {
|
|
|
44
48
|
// However, looking at other endpoints, they return data directly.
|
|
45
49
|
// Let's assume it returns a JSON with the key, or we can inspect the response content type.
|
|
46
50
|
// But for now, let's try to parse as JSON.
|
|
47
|
-
|
|
51
|
+
|
|
48
52
|
const data = await res.json();
|
|
49
53
|
// If data has a specific field for the key, we should return that.
|
|
50
54
|
// If the documentation doesn't specify, I'll return the whole data object or try to find the key.
|
|
51
55
|
// Based on "This will send a new key", it might be { "apiKey": "..." } or just the string if it's text/plain.
|
|
52
56
|
// Given other endpoints return JSON, this likely returns JSON.
|
|
53
|
-
|
|
57
|
+
|
|
54
58
|
resolve(data);
|
|
55
59
|
} catch (error) {
|
|
56
60
|
const processedError = await processError(error);
|
|
@@ -1,47 +1,17 @@
|
|
|
1
|
-
const {
|
|
2
|
-
const { processError } = require("../../utils/errorHandler.js");
|
|
1
|
+
const { requestLegacyServer } = require("./requestServer.js");
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
|
-
* Retrieves the list of banned players from a server
|
|
4
|
+
* Retrieves the list of banned players from a server.
|
|
5
|
+
*
|
|
6
|
+
* The current v2 server document does not expose Bans as an include flag,
|
|
7
|
+
* so this uses the documented v1 bans route on the new api.erlc.gg domain.
|
|
8
|
+
*
|
|
6
9
|
* @param {string} serverToken - The server API key
|
|
7
10
|
* @returns {Promise<Object>} Promise that resolves to banned players object
|
|
8
11
|
*/
|
|
9
|
-
module.exports = (serverToken) =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
const fetch = await import("node-fetch");
|
|
18
|
-
const { config } = await import("../../erlc.js");
|
|
19
|
-
|
|
20
|
-
const headers = {
|
|
21
|
-
"Server-Key": serverToken,
|
|
22
|
-
};
|
|
23
|
-
if (config?.globalToken) {
|
|
24
|
-
headers["Authorization"] = config.globalToken;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const res = await fetch.default(`${BASEURL}/server/bans`, {
|
|
28
|
-
headers: headers,
|
|
29
|
-
timeout: 10000, // 10 second timeout
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
if (!res.ok) {
|
|
33
|
-
const errorData = await res
|
|
34
|
-
.json()
|
|
35
|
-
.catch(() => ({ error: "Unknown API error" }));
|
|
36
|
-
const error = await processError(res, errorData);
|
|
37
|
-
return reject(error);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const data = await res.json();
|
|
41
|
-
resolve(data || {});
|
|
42
|
-
} catch (error) {
|
|
43
|
-
const processedError = await processError(error);
|
|
44
|
-
reject(processedError);
|
|
45
|
-
}
|
|
12
|
+
module.exports = (serverToken) =>
|
|
13
|
+
requestLegacyServer(serverToken, "/server/bans", {
|
|
14
|
+
endpoint: "bans",
|
|
15
|
+
defaultValue: {},
|
|
16
|
+
transform: (data) => data || {},
|
|
46
17
|
});
|
|
47
|
-
};
|