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.
@@ -1,47 +1,15 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves command logs from a server
4
+ * Retrieves command logs from a server.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of command logs
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/commandlogs`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "commandlogs",
11
+ includes: ["CommandLogs"],
12
+ defaultValue: [],
13
+ transform: (data) =>
14
+ Array.isArray(data?.CommandLogs) ? data.CommandLogs : [],
46
15
  });
47
- };
@@ -0,0 +1,15 @@
1
+ const { requestServer } = require("./requestServer.js");
2
+
3
+ /**
4
+ * Retrieves emergency call logs from a server.
5
+ * @param {string} serverToken - The server API key
6
+ * @returns {Promise<Array>} Promise that resolves to array of emergency calls
7
+ */
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "emergencycalls",
11
+ includes: ["EmergencyCalls"],
12
+ defaultValue: [],
13
+ transform: (data) =>
14
+ Array.isArray(data?.EmergencyCalls) ? data.EmergencyCalls : [],
15
+ });
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves join/leave logs from a server
4
+ * Retrieves join/leave logs from a server.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of join logs
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/joinlogs`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "joinlogs",
11
+ includes: ["JoinLogs"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.JoinLogs) ? data.JoinLogs : []),
46
14
  });
47
- };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves kill logs from a server
4
+ * Retrieves kill logs from a server.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of kill logs
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/killlogs`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "killlogs",
11
+ includes: ["KillLogs"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.KillLogs) ? data.KillLogs : []),
46
14
  });
47
- };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves moderator call logs from a server
4
+ * Retrieves moderator call logs from a server.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of modcall logs
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/modcalls`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "modcalls",
11
+ includes: ["ModCalls"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.ModCalls) ? data.ModCalls : []),
46
14
  });
47
- };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves current players from a server
4
+ * Retrieves current players from a server.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of current players
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/players`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "players",
11
+ includes: ["Players"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.Players) ? data.Players : []),
46
14
  });
47
- };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves server queue information
4
+ * Retrieves server queue information.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of queued player IDs
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/queue`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "queue",
11
+ includes: ["Queue"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.Queue) ? data.Queue : []),
46
14
  });
47
- };
@@ -1,100 +1,82 @@
1
- const { BASEURL, Vanity } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { Vanity } = require("../../constants.js");
2
+ const { requestServer } = require("./requestServer.js");
3
3
 
4
- module.exports = (serverToken) => {
5
- return new Promise(async (resolve, reject) => {
6
- // Input validation
7
- if (!serverToken || typeof serverToken !== "string") {
8
- return reject(new Error("Server token is required and must be a string"));
4
+ async function getUsername(fetch, userId) {
5
+ try {
6
+ const response = await fetch(`https://users.roblox.com/v1/users/${userId}`);
7
+ const userData = await response.json();
8
+
9
+ if (!response.ok) {
10
+ console.warn(`Warning: Could not fetch username for ID: ${userId}`);
11
+ return `User:${userId}`;
9
12
  }
10
13
 
11
- try {
12
- const fetch = await import("node-fetch");
13
- const { config } = await import("../../erlc.js");
14
+ return userData.name;
15
+ } catch (error) {
16
+ console.warn(`Warning: Error fetching username for ID: ${userId}`, error);
17
+ return `User:${userId}`;
18
+ }
19
+ }
14
20
 
15
- const headers = {
16
- "Server-Key": serverToken,
17
- };
18
- if (config?.globalToken) {
19
- headers["Authorization"] = config.globalToken;
20
- }
21
+ function normalizeIncludes(options = {}) {
22
+ const includeMap = {
23
+ players: "Players",
24
+ staff: "Staff",
25
+ joinLogs: "JoinLogs",
26
+ queue: "Queue",
27
+ killLogs: "KillLogs",
28
+ commandLogs: "CommandLogs",
29
+ modCalls: "ModCalls",
30
+ emergencyCalls: "EmergencyCalls",
31
+ vehicles: "Vehicles",
32
+ };
21
33
 
22
- const res = await fetch.default(`${BASEURL}/server`, {
23
- headers: headers,
24
- timeout: 10000, // 10 second timeout
25
- });
34
+ return Object.entries(includeMap)
35
+ .filter(([option]) => options[option])
36
+ .map(([, include]) => include);
37
+ }
26
38
 
27
- if (!res.ok) {
28
- const errorData = await res
29
- .json()
30
- .catch(() => ({ error: "Unknown API error" }));
31
- const error = await processError(res, errorData);
32
- return reject(error);
33
- }
39
+ module.exports = (serverToken, options = {}) => {
40
+ const includes = normalizeIncludes(options);
34
41
 
35
- const data = await res.json();
36
-
37
- const getUsername = async (userId) => {
38
- try {
39
- const response = await fetch.default(
40
- `https://users.roblox.com/v1/users/${userId}`
41
- );
42
- const userData = await response.json();
43
- if (!response.ok) {
44
- console.warn(`Warning: Could not fetch username for ID: ${userId}`);
45
- return `User:${userId}`; // Fallback format
46
- }
47
- return userData.name;
48
- } catch (error) {
49
- console.warn(
50
- `Warning: Error fetching username for ID: ${userId}`,
51
- error
52
- );
53
- return `User:${userId}`; // Fallback format
54
- }
55
- };
42
+ return requestServer(serverToken, {
43
+ endpoint: "server",
44
+ includes,
45
+ transform: async (data) => {
46
+ const fetch =
47
+ typeof globalThis.fetch === "function"
48
+ ? globalThis.fetch
49
+ : (await import("node-fetch")).default;
56
50
 
57
51
  try {
58
- // Get owner username
59
- const ownerUsername = await getUsername(data.OwnerId);
60
-
61
- // Get co-owner usernames (handle empty array case)
52
+ const ownerUsername = await getUsername(fetch, data.OwnerId);
62
53
  const coOwnerUsernames =
63
54
  data.CoOwnerIds && data.CoOwnerIds.length > 0
64
- ? await Promise.all(data.CoOwnerIds.map(getUsername))
55
+ ? await Promise.all(data.CoOwnerIds.map((id) => getUsername(fetch, id)))
65
56
  : [];
66
57
 
67
- // Create vanity URL
68
- const vanityURL = `${Vanity}${data.JoinKey}`;
69
-
70
- // Add the new properties to the response
71
58
  const enhancedData = {
72
59
  ...data,
73
60
  OwnerUsername: ownerUsername,
74
61
  CoOwnerUsernames: coOwnerUsernames,
75
- VanityURL: vanityURL,
62
+ VanityURL: `${Vanity}${data.JoinKey}`,
76
63
  };
77
64
 
78
- // Remove the original ID properties as they're now converted to usernames
79
65
  delete enhancedData.OwnerId;
80
66
  delete enhancedData.CoOwnerIds;
81
67
 
82
- resolve(enhancedData);
68
+ return enhancedData;
83
69
  } catch (error) {
84
- // If username fetching fails, still return the original data with IDs
85
70
  console.warn(
86
71
  "Warning: Could not fetch usernames, returning data with IDs:",
87
- error
72
+ error,
88
73
  );
89
- const fallbackData = {
74
+
75
+ return {
90
76
  ...data,
91
77
  VanityURL: `${Vanity}${data.JoinKey}`,
92
78
  };
93
- resolve(fallbackData);
94
79
  }
95
- } catch (error) {
96
- const processedError = await processError(error);
97
- reject(processedError);
98
- }
80
+ },
99
81
  });
100
82
  };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves server staff information
4
+ * Retrieves server staff information.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Object>} Promise that resolves to server staff object
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/staff`, {
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 || { CoOwners: [], Admins: {}, Mods: {} });
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "staff",
11
+ includes: ["Staff"],
12
+ defaultValue: { Admins: {}, Mods: {}, Helpers: {} },
13
+ transform: (data) => data?.Staff || { Admins: {}, Mods: {}, Helpers: {} },
46
14
  });
47
- };
@@ -1,47 +1,14 @@
1
- const { BASEURL } = require("../../constants.js");
2
- const { processError } = require("../../utils/errorHandler.js");
1
+ const { requestServer } = require("./requestServer.js");
3
2
 
4
3
  /**
5
- * Retrieves server vehicles information
4
+ * Retrieves server vehicles information.
6
5
  * @param {string} serverToken - The server API key
7
6
  * @returns {Promise<Array>} Promise that resolves to array of vehicles
8
7
  */
9
- module.exports = (serverToken) => {
10
- return new Promise(async (resolve, reject) => {
11
- // Input validation
12
- if (!serverToken || typeof serverToken !== "string") {
13
- return reject(new Error("Server token is required and must be a string"));
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/vehicles`, {
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(Array.isArray(data) ? data : []);
42
- } catch (error) {
43
- const processedError = await processError(error);
44
- reject(processedError);
45
- }
8
+ module.exports = (serverToken) =>
9
+ requestServer(serverToken, {
10
+ endpoint: "vehicles",
11
+ includes: ["Vehicles"],
12
+ defaultValue: [],
13
+ transform: (data) => (Array.isArray(data?.Vehicles) ? data.Vehicles : []),
46
14
  });
47
- };