erlc-api 2.3.3 → 3.0.0
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/.gitattributes +2 -0
- package/README.md +381 -87
- package/index.js +1 -0
- package/package.json +18 -46
- package/src/classes/client.js +36 -0
- package/src/constants.js +2 -0
- package/src/erlc.js +15 -0
- package/src/functions/assert.js +5 -0
- package/src/functions/server/getBans.js +54 -0
- package/src/functions/server/getCommandLogs.js +54 -0
- package/src/functions/server/getJoinLogs.js +54 -0
- package/src/functions/server/getKillLogs.js +54 -0
- package/src/functions/server/getModcallLogs.js +54 -0
- package/src/functions/server/getPlayers.js +54 -0
- package/src/functions/server/getQueue.js +54 -0
- package/src/functions/server/getServer.js +78 -0
- package/src/functions/server/getStaff.js +54 -0
- package/src/functions/server/getVehicles.js +54 -0
- package/src/functions/server/runCommand.js +70 -0
- package/src/types/custom.d.ts +5 -0
- package/src/types/index.d.ts +98 -0
- package/dist/browser/erlc.min.js +0 -1
- package/dist/cjs/client.d.ts +0 -25
- package/dist/cjs/client.d.ts.map +0 -1
- package/dist/cjs/client.js +0 -152
- package/dist/cjs/client.js.map +0 -1
- package/dist/cjs/errors/index.d.ts +0 -13
- package/dist/cjs/errors/index.d.ts.map +0 -1
- package/dist/cjs/errors/index.js +0 -32
- package/dist/cjs/errors/index.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -4
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -20
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -46
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/index.js +0 -3
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/esm/client.d.ts +0 -25
- package/dist/esm/client.d.ts.map +0 -1
- package/dist/esm/client.js +0 -145
- package/dist/esm/client.js.map +0 -1
- package/dist/esm/errors/index.d.ts +0 -13
- package/dist/esm/errors/index.d.ts.map +0 -1
- package/dist/esm/errors/index.js +0 -25
- package/dist/esm/errors/index.js.map +0 -1
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -4
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/types/index.d.ts +0 -46
- package/dist/esm/types/index.d.ts.map +0 -1
- package/dist/esm/types/index.js +0 -2
- package/dist/esm/types/index.js.map +0 -1
- package/dist/types/client.d.ts +0 -25
- package/dist/types/client.d.ts.map +0 -1
- package/dist/types/errors/index.d.ts +0 -13
- package/dist/types/errors/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/types/index.d.ts +0 -46
- package/dist/types/types/index.d.ts.map +0 -1
package/.gitattributes
ADDED
package/README.md
CHANGED
|
@@ -1,134 +1,428 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 🚔 ER:LC API Wrapper
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://badge.fury.io/js/erlc-api)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
A comprehensive, lightweight, and fully-typed API wrapper for Emergency Response: Liberty County (ER:LC) with 100% API coverage, robust error handling, and TypeScript support.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- 🌐 Browser compatible
|
|
9
|
-
- ⚡ Promise-based API
|
|
10
|
-
- 🛡️ Comprehensive error handling
|
|
11
|
-
- 📘 Type definitions included
|
|
12
|
-
- 🔄 CommonJS and ES Module support
|
|
8
|
+
## ✨ Features
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
- 🎯 **100% API Coverage** - All ER:LC API endpoints supported
|
|
11
|
+
- 🛡️ **Robust Error Handling** - Comprehensive error catching and meaningful error messages
|
|
12
|
+
- 📝 **Full TypeScript Support** - Complete type definitions for all methods and responses
|
|
13
|
+
- ⚡ **Optimized Performance** - Efficient request handling with timeout management
|
|
14
|
+
- 🔒 **Secure** - Built-in validation and secure token handling
|
|
15
|
+
- 📚 **Well Documented** - Extensive documentation and examples
|
|
16
|
+
- 🚀 **Easy to Use** - Simple, intuitive API design
|
|
17
|
+
|
|
18
|
+
## 📦 Installation
|
|
15
19
|
|
|
16
20
|
```bash
|
|
17
21
|
npm install erlc-api
|
|
18
22
|
```
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
```bash
|
|
25
|
+
bun add erlc-api
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 🚀 Quick Start
|
|
21
29
|
|
|
22
|
-
###
|
|
30
|
+
### Basic Setup
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
const erlc = require("erlc-api");
|
|
34
|
+
|
|
35
|
+
// Initialize the client with your global token
|
|
36
|
+
const client = new erlc.Client({
|
|
37
|
+
globalToken: "your-global-token-here", // Get this from ER:LC developers
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Register your client
|
|
41
|
+
client.config();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### TypeScript Setup
|
|
23
45
|
|
|
24
46
|
```typescript
|
|
25
|
-
import
|
|
47
|
+
import erlc from "erlc-api";
|
|
26
48
|
|
|
27
|
-
const client = new Client({
|
|
28
|
-
globalToken:
|
|
49
|
+
const client = new erlc.Client({
|
|
50
|
+
globalToken: "your-global-token-here",
|
|
29
51
|
});
|
|
30
52
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
53
|
+
client.config();
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 📖 API Methods
|
|
57
|
+
|
|
58
|
+
### 🖥️ Server Information
|
|
59
|
+
|
|
60
|
+
#### Get Server Details
|
|
34
61
|
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
62
|
+
```javascript
|
|
63
|
+
const getServerInfo = async () => {
|
|
64
|
+
try {
|
|
65
|
+
const serverToken = "your-server-api-key"; // From Server Settings
|
|
66
|
+
const server = await erlc.getServer(serverToken);
|
|
38
67
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
68
|
+
console.log(server);
|
|
69
|
+
/*
|
|
70
|
+
Expected Response:
|
|
71
|
+
{
|
|
72
|
+
Name: "Your Server Name",
|
|
73
|
+
OwnerUsername: "ServerOwner",
|
|
74
|
+
CoOwnerUsernames: ["CoOwner1", "CoOwner2"],
|
|
75
|
+
CurrentPlayers: 25,
|
|
76
|
+
MaxPlayers: 40,
|
|
77
|
+
JoinKey: "ABC123",
|
|
78
|
+
AccVerifiedReq: "Disabled", // "Email" | "Phone/ID"
|
|
79
|
+
TeamBalance: true,
|
|
80
|
+
VanityURL: "https://policeroleplay.community/join?code=ABC123"
|
|
81
|
+
}
|
|
82
|
+
*/
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error("Error fetching server info:", error.message);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
42
87
|
```
|
|
43
88
|
|
|
44
|
-
|
|
89
|
+
#### Get Current Players
|
|
45
90
|
|
|
46
91
|
```javascript
|
|
47
|
-
const
|
|
92
|
+
const getCurrentPlayers = async () => {
|
|
93
|
+
try {
|
|
94
|
+
const players = await erlc.getPlayers(serverToken);
|
|
95
|
+
|
|
96
|
+
console.log(players);
|
|
97
|
+
/*
|
|
98
|
+
Expected Response:
|
|
99
|
+
[
|
|
100
|
+
{
|
|
101
|
+
Player: "PlayerName:123456789",
|
|
102
|
+
Permission: "Server Owner", // "Member" | "Moderator" | "Server Administrator"
|
|
103
|
+
Team: "Police" // "Civilian" | "Fire" | "Sheriff"
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
*/
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error("Error fetching players:", error.message);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
```
|
|
48
112
|
|
|
49
|
-
|
|
50
|
-
globalToken: 'your-global-token',
|
|
51
|
-
});
|
|
113
|
+
#### Get Server Queue
|
|
52
114
|
|
|
53
|
-
|
|
54
|
-
async
|
|
115
|
+
```javascript
|
|
116
|
+
const getServerQueue = async () => {
|
|
55
117
|
try {
|
|
56
|
-
const
|
|
57
|
-
console.log(
|
|
118
|
+
const queue = await erlc.getQueue(serverToken);
|
|
119
|
+
console.log(`Players in queue: ${queue.length}`);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error("Error fetching queue:", error.message);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 👥 Staff Management
|
|
127
|
+
|
|
128
|
+
#### Get Staff Information
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
const getStaffInfo = async () => {
|
|
132
|
+
try {
|
|
133
|
+
const staff = await erlc.getStaff(serverToken);
|
|
134
|
+
|
|
135
|
+
console.log(staff);
|
|
136
|
+
/*
|
|
137
|
+
Expected Response:
|
|
138
|
+
{
|
|
139
|
+
CoOwners: [123456789, 987654321],
|
|
140
|
+
Admins: { "123456789": "AdminName" },
|
|
141
|
+
Mods: { "987654321": "ModName" }
|
|
142
|
+
}
|
|
143
|
+
*/
|
|
58
144
|
} catch (error) {
|
|
59
|
-
console.error(
|
|
145
|
+
console.error("Error fetching staff:", error.message);
|
|
60
146
|
}
|
|
61
|
-
}
|
|
147
|
+
};
|
|
62
148
|
```
|
|
63
149
|
|
|
64
|
-
###
|
|
150
|
+
### 📊 Server Logs
|
|
65
151
|
|
|
66
|
-
|
|
67
|
-
<script src="node_modules/erlc-api/dist/browser/erlc.min.js"></script>
|
|
68
|
-
<script>
|
|
69
|
-
const client = new ERLC.Client({
|
|
70
|
-
globalToken: 'your-global-token',
|
|
71
|
-
});
|
|
152
|
+
#### Get Join/Leave Logs
|
|
72
153
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
154
|
+
```javascript
|
|
155
|
+
const getJoinLogs = async () => {
|
|
156
|
+
try {
|
|
157
|
+
const logs = await erlc.getJoinLogs(serverToken);
|
|
158
|
+
|
|
159
|
+
logs.forEach((log) => {
|
|
160
|
+
const action = log.Join ? "joined" : "left";
|
|
161
|
+
console.log(
|
|
162
|
+
`${log.Player} ${action} at ${new Date(log.Timestamp * 1000)}`
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.error("Error fetching join logs:", error.message);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Get Kill Logs
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
const getKillLogs = async () => {
|
|
175
|
+
try {
|
|
176
|
+
const kills = await erlc.getKillLogs(serverToken);
|
|
177
|
+
|
|
178
|
+
kills.forEach((kill) => {
|
|
179
|
+
console.log(
|
|
180
|
+
`${kill.Killer} killed ${kill.Killed} at ${new Date(
|
|
181
|
+
kill.Timestamp * 1000
|
|
182
|
+
)}`
|
|
183
|
+
);
|
|
184
|
+
});
|
|
185
|
+
} catch (error) {
|
|
186
|
+
console.error("Error fetching kill logs:", error.message);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
78
189
|
```
|
|
79
190
|
|
|
80
|
-
|
|
191
|
+
#### Get Command Logs
|
|
81
192
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- `getCommandLogs(serverToken)` - Get command logs
|
|
87
|
-
- `getModcallLogs(serverToken)` - Get modcall logs
|
|
88
|
-
- `getBans(serverToken)` - Get server bans
|
|
89
|
-
- `getVehicles(serverToken)` - Get vehicle information
|
|
90
|
-
- `getQueue(serverToken)` - Get queue information
|
|
91
|
-
- `runCommand(serverToken, command)` - Run a server command
|
|
193
|
+
```javascript
|
|
194
|
+
const getCommandLogs = async () => {
|
|
195
|
+
try {
|
|
196
|
+
const commands = await erlc.getCommandLogs(serverToken);
|
|
92
197
|
|
|
93
|
-
|
|
198
|
+
commands.forEach((cmd) => {
|
|
199
|
+
console.log(`${cmd.Player} executed: ${cmd.Command}`);
|
|
200
|
+
});
|
|
201
|
+
} catch (error) {
|
|
202
|
+
console.error("Error fetching command logs:", error.message);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
```
|
|
94
206
|
|
|
95
|
-
|
|
207
|
+
#### Get Moderator Call Logs
|
|
96
208
|
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
209
|
+
```javascript
|
|
210
|
+
const getModCalls = async () => {
|
|
211
|
+
try {
|
|
212
|
+
const modcalls = await erlc.getModcallLogs(serverToken);
|
|
213
|
+
|
|
214
|
+
modcalls.forEach((call) => {
|
|
215
|
+
const status = call.Moderator
|
|
216
|
+
? `answered by ${call.Moderator}`
|
|
217
|
+
: "unanswered";
|
|
218
|
+
console.log(`${call.Caller} made a modcall - ${status}`);
|
|
219
|
+
});
|
|
220
|
+
} catch (error) {
|
|
221
|
+
console.error("Error fetching modcall logs:", error.message);
|
|
109
222
|
}
|
|
110
|
-
}
|
|
223
|
+
};
|
|
111
224
|
```
|
|
112
225
|
|
|
113
|
-
|
|
226
|
+
### 🚗 Vehicle Management
|
|
114
227
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
228
|
+
#### Get Server Vehicles
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
const getVehicles = async () => {
|
|
232
|
+
try {
|
|
233
|
+
const vehicles = await erlc.getVehicles(serverToken);
|
|
234
|
+
|
|
235
|
+
vehicles.forEach((vehicle) => {
|
|
236
|
+
console.log(
|
|
237
|
+
`${vehicle.Name} owned by ${vehicle.Owner} - Texture: ${
|
|
238
|
+
vehicle.Texture || "Default"
|
|
239
|
+
}`
|
|
240
|
+
);
|
|
241
|
+
});
|
|
242
|
+
} catch (error) {
|
|
243
|
+
console.error("Error fetching vehicles:", error.message);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### 🔨 Server Management
|
|
249
|
+
|
|
250
|
+
#### Execute Server Commands
|
|
251
|
+
|
|
252
|
+
```javascript
|
|
253
|
+
const executeCommand = async () => {
|
|
254
|
+
try {
|
|
255
|
+
const success = await erlc.runCommand(
|
|
256
|
+
serverToken,
|
|
257
|
+
":h Welcome to our server!"
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
if (success) {
|
|
261
|
+
console.log("Command executed successfully!");
|
|
262
|
+
}
|
|
263
|
+
} catch (error) {
|
|
264
|
+
console.error("Error executing command:", error.message);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
#### Get Server Bans
|
|
270
|
+
|
|
271
|
+
```javascript
|
|
272
|
+
const getBannedPlayers = async () => {
|
|
273
|
+
try {
|
|
274
|
+
const bans = await erlc.getBans(serverToken);
|
|
275
|
+
|
|
276
|
+
Object.entries(bans).forEach(([playerId, playerName]) => {
|
|
277
|
+
console.log(`${playerName} (${playerId}) is banned`);
|
|
278
|
+
});
|
|
279
|
+
} catch (error) {
|
|
280
|
+
console.error("Error fetching bans:", error.message);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## 🛠️ Advanced Usage
|
|
286
|
+
|
|
287
|
+
### Error Handling Best Practices
|
|
288
|
+
|
|
289
|
+
```javascript
|
|
290
|
+
const handleApiCall = async () => {
|
|
291
|
+
try {
|
|
292
|
+
const result = await erlc.getServer(serverToken);
|
|
293
|
+
return result;
|
|
294
|
+
} catch (error) {
|
|
295
|
+
// Handle specific error types
|
|
296
|
+
if (error.status === 401) {
|
|
297
|
+
console.error("Authentication failed - check your tokens");
|
|
298
|
+
} else if (error.status === 404) {
|
|
299
|
+
console.error("Server not found - check your server token");
|
|
300
|
+
} else if (error.message.includes("Network error")) {
|
|
301
|
+
console.error("Connection issue - check your internet connection");
|
|
302
|
+
} else if (error.message.includes("timeout")) {
|
|
303
|
+
console.error("Request timed out - try again later");
|
|
304
|
+
} else {
|
|
305
|
+
console.error("Unexpected error:", error.message);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
throw error; // Re-throw if needed
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Batch Operations
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
const getServerOverview = async (serverToken) => {
|
|
317
|
+
try {
|
|
318
|
+
// Execute multiple API calls concurrently
|
|
319
|
+
const [serverInfo, players, staff, vehicles] = await Promise.all([
|
|
320
|
+
erlc.getServer(serverToken),
|
|
321
|
+
erlc.getPlayers(serverToken),
|
|
322
|
+
erlc.getStaff(serverToken),
|
|
323
|
+
erlc.getVehicles(serverToken),
|
|
324
|
+
]);
|
|
325
|
+
|
|
326
|
+
return {
|
|
327
|
+
server: serverInfo,
|
|
328
|
+
playerCount: players.length,
|
|
329
|
+
staffCount:
|
|
330
|
+
Object.keys(staff.Admins).length + Object.keys(staff.Mods).length,
|
|
331
|
+
vehicleCount: vehicles.length,
|
|
332
|
+
};
|
|
333
|
+
} catch (error) {
|
|
334
|
+
console.error("Error getting server overview:", error.message);
|
|
335
|
+
throw error;
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## 🔑 Authentication
|
|
341
|
+
|
|
342
|
+
### Getting Your Tokens
|
|
343
|
+
|
|
344
|
+
1. **Global Token**: Contact ER:LC developers through their [Discord](https://discord.gg/prc) to request increased API limits
|
|
345
|
+
2. **Server Token**: Found in your server settings within ER:LC
|
|
346
|
+
|
|
347
|
+
### Token Security
|
|
348
|
+
|
|
349
|
+
```javascript
|
|
350
|
+
// ❌ Don't hardcode tokens
|
|
351
|
+
const client = new erlc.Client({
|
|
352
|
+
globalToken: "your-token-here",
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
// ✅ Use environment variables
|
|
356
|
+
const client = new erlc.Client({
|
|
357
|
+
globalToken: process.env.ERLC_GLOBAL_TOKEN,
|
|
358
|
+
});
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## 📝 TypeScript Support
|
|
362
|
+
|
|
363
|
+
The package includes comprehensive TypeScript definitions:
|
|
118
364
|
|
|
119
|
-
|
|
120
|
-
|
|
365
|
+
```typescript
|
|
366
|
+
import erlc, { ServerStatus, ServerPlayer, JoinLog } from "erlc-api";
|
|
121
367
|
|
|
122
|
-
|
|
123
|
-
|
|
368
|
+
const client = new erlc.Client({
|
|
369
|
+
globalToken: process.env.ERLC_GLOBAL_TOKEN!,
|
|
370
|
+
});
|
|
124
371
|
|
|
125
|
-
|
|
126
|
-
npm run lint
|
|
372
|
+
client.config();
|
|
127
373
|
|
|
128
|
-
|
|
129
|
-
|
|
374
|
+
// Fully typed responses
|
|
375
|
+
const server: ServerStatus = await erlc.getServer(serverToken);
|
|
376
|
+
const players: ServerPlayer[] = await erlc.getPlayers(serverToken);
|
|
377
|
+
const joinLogs: JoinLog[] = await erlc.getJoinLogs(serverToken);
|
|
130
378
|
```
|
|
131
379
|
|
|
132
|
-
##
|
|
380
|
+
## ⚡ Performance Tips
|
|
381
|
+
|
|
382
|
+
1. **Use Promise.all()** for concurrent requests when fetching multiple endpoints
|
|
383
|
+
2. **Implement caching** for frequently accessed data that doesn't change often
|
|
384
|
+
3. **Handle rate limits** by implementing retry logic with exponential backoff
|
|
385
|
+
4. **Use timeouts** - all methods have built-in 10-15 second timeouts
|
|
386
|
+
|
|
387
|
+
## 🐛 Error Types
|
|
388
|
+
|
|
389
|
+
The wrapper provides detailed error information:
|
|
390
|
+
|
|
391
|
+
- **Network Errors**: Connection issues, DNS resolution failures
|
|
392
|
+
- **Authentication Errors**: Invalid tokens, insufficient permissions
|
|
393
|
+
- **API Errors**: Server-side errors with status codes and messages
|
|
394
|
+
- **Validation Errors**: Invalid input parameters
|
|
395
|
+
- **Timeout Errors**: Requests that take too long to complete
|
|
396
|
+
|
|
397
|
+
## 🤝 Contributing
|
|
398
|
+
|
|
399
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
400
|
+
|
|
401
|
+
## 📄 License
|
|
402
|
+
|
|
403
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
404
|
+
|
|
405
|
+
## 🔗 Links
|
|
406
|
+
|
|
407
|
+
- **Discord Bot**: [Invite to your server](https://discord.com/oauth2/authorize?client_id=1014990793280323624)
|
|
408
|
+
- **API Documentation**: [PRC API Docs](https://apidocs.policeroleplay.community/reference/api-reference)
|
|
409
|
+
- **Discord Support**: [Join PRC Discord](https://discord.gg/prc)
|
|
410
|
+
- **Custom Liveries**: [Browse Collection](https://github.com/Exodo0/ERLC-API/tree/main/Custom%20Liveries)
|
|
411
|
+
|
|
412
|
+
## 👨💻 Credits
|
|
413
|
+
|
|
414
|
+
- **Library Development**: [Egologics](https://twitter.com/0Adexus0)
|
|
415
|
+
- **NPM Package**: [ERLC-API](https://www.npmjs.com/package/erlc-api)
|
|
416
|
+
- **API Development**: [Police Roleplay Community](https://twitter.com/PRC_Roblox)
|
|
417
|
+
- **Community Support**: [PRC Discord Community](https://discord.gg/prc)
|
|
418
|
+
|
|
419
|
+
---
|
|
133
420
|
|
|
134
|
-
|
|
421
|
+
<div align="center">
|
|
422
|
+
<p>Made with ❤️ for the ER:LC community</p>
|
|
423
|
+
<p>
|
|
424
|
+
<a href="https://github.com/Exodo0/ERLC-API">⭐ Star us on GitHub</a> •
|
|
425
|
+
<a href="https://discord.gg/prc">💬 Join our Discord</a> •
|
|
426
|
+
<a href="https://twitter.com/0Adexus0">🐦 Follow on Twitter</a>
|
|
427
|
+
</p>
|
|
428
|
+
</div>
|
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./src/erlc')
|
package/package.json
CHANGED
|
@@ -1,38 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erlc-api",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "
|
|
6
|
-
"
|
|
7
|
-
"types": "dist/types/index.d.ts",
|
|
8
|
-
"browser": "dist/browser/erlc.min.js",
|
|
9
|
-
"files": [
|
|
10
|
-
"dist"
|
|
11
|
-
],
|
|
12
|
-
"scripts": {
|
|
13
|
-
"build": "npm run clean && npm run build:all",
|
|
14
|
-
"build:all": "npm run build:esm && npm run build:cjs && npm run build:browser && npm run build:types",
|
|
15
|
-
"build:esm": "tsc -p tsconfig.esm.json",
|
|
16
|
-
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
17
|
-
"build:browser": "webpack --config webpack.config.js",
|
|
18
|
-
"build:types": "tsc -p tsconfig.types.json",
|
|
19
|
-
"clean": "rimraf dist",
|
|
20
|
-
"test": "jest",
|
|
21
|
-
"lint": "eslint src --ext .ts",
|
|
22
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
|
23
|
-
"docs": "typedoc"
|
|
24
|
-
},
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "An ER:LC API wrapper for JS/TS",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "src/types/index.d.ts",
|
|
25
7
|
"keywords": [
|
|
26
8
|
"erlc",
|
|
27
9
|
"roblox",
|
|
28
10
|
"prc",
|
|
29
11
|
"erlc-api",
|
|
30
|
-
"liberty-county"
|
|
31
|
-
"typescript",
|
|
32
|
-
"browser"
|
|
12
|
+
"liberty-county"
|
|
33
13
|
],
|
|
34
14
|
"author": "egologics",
|
|
35
15
|
"license": "MIT",
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"typescript": "^5.3.2"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"chalk": "^5.4.1",
|
|
21
|
+
"cli-table3": "^0.6.5",
|
|
22
|
+
"node-fetch": "^3.3.2",
|
|
23
|
+
"ora": "^8.2.0"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
27
|
+
},
|
|
36
28
|
"repository": {
|
|
37
29
|
"type": "git",
|
|
38
30
|
"url": "git+https://github.com/Exodo0/ERLC-API.git"
|
|
@@ -40,25 +32,5 @@
|
|
|
40
32
|
"bugs": {
|
|
41
33
|
"url": "https://github.com/Exodo0/ERLC-API/issues"
|
|
42
34
|
},
|
|
43
|
-
"homepage": "https://github.com/Exodo0/ERLC-API#readme"
|
|
44
|
-
"devDependencies": {
|
|
45
|
-
"@types/jest": "^29.5.14",
|
|
46
|
-
"@types/node": "^22.13.1",
|
|
47
|
-
"@typescript-eslint/eslint-plugin": "^8.23.0",
|
|
48
|
-
"@typescript-eslint/parser": "^8.23.0",
|
|
49
|
-
"eslint": "^9.19.0",
|
|
50
|
-
"jest": "^29.7.0",
|
|
51
|
-
"prettier": "^3.4.2",
|
|
52
|
-
"rimraf": "^6.0.1",
|
|
53
|
-
"ts-jest": "^29.2.5",
|
|
54
|
-
"ts-loader": "^9.5.2",
|
|
55
|
-
"typedoc": "^0.27.6",
|
|
56
|
-
"typescript": "^5.7.3",
|
|
57
|
-
"webpack": "^5.97.1",
|
|
58
|
-
"webpack-cli": "^6.0.1"
|
|
59
|
-
},
|
|
60
|
-
"dependencies": {
|
|
61
|
-
"axios": "^1.7.9",
|
|
62
|
-
"erlc-api": "file:"
|
|
63
|
-
}
|
|
35
|
+
"homepage": "https://github.com/Exodo0/ERLC-API#readme"
|
|
64
36
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const erlc = require('../erlc.js')
|
|
2
|
+
const assert = require('../functions/assert.js')
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {Object} ClientConfig
|
|
6
|
+
* @property {string} globalToken - Your ER:LC global API token
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates an authorised ER:LC client for requests
|
|
11
|
+
* @class
|
|
12
|
+
* @param {ClientConfig} options - Client Options
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
class Client {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @constructor
|
|
19
|
+
* @param {ClientConfig} options - Client Options
|
|
20
|
+
*/
|
|
21
|
+
constructor(options) {
|
|
22
|
+
assert(typeof options === 'object', `Syntax error: object expected for "options", received ${typeof options}`);
|
|
23
|
+
this.options = { ...options };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Updates and returns the client configurationg
|
|
28
|
+
* @returns {ClientConfig} The client configuration.
|
|
29
|
+
*/
|
|
30
|
+
config() {
|
|
31
|
+
erlc.config = this.options
|
|
32
|
+
return erlc.config
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = Client
|
package/src/constants.js
ADDED
package/src/erlc.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
exports.config = {};
|
|
2
|
+
|
|
3
|
+
exports.getBans = require("./functions/server/getBans.js");
|
|
4
|
+
exports.getCommandLogs = require("./functions/server/getCommandLogs.js");
|
|
5
|
+
exports.getJoinLogs = require("./functions/server/getJoinLogs.js");
|
|
6
|
+
exports.getKillLogs = require("./functions/server/getKillLogs.js");
|
|
7
|
+
exports.getModcallLogs = require("./functions/server/getModcallLogs.js");
|
|
8
|
+
exports.getPlayers = require("./functions/server/getPlayers.js");
|
|
9
|
+
exports.getServer = require("./functions/server/getServer.js");
|
|
10
|
+
exports.getQueue = require("./functions/server/getQueue.js");
|
|
11
|
+
exports.runCommand = require("./functions/server/runCommand.js");
|
|
12
|
+
exports.getVehicles = require("./functions/server/getVehicles.js");
|
|
13
|
+
exports.getStaff = require("./functions/server/getStaff.js");
|
|
14
|
+
|
|
15
|
+
exports.Client = require("./classes/client.js");
|