transporttycoon
Version:
Wrapper for the Transport Tycoon FiveM server API
403 lines (402 loc) • 15.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TransportTycoon = void 0;
const axios_1 = require("axios");
const tycoonServers = [
'tycoon-w8r4q4.users.cfx.re',
'tycoon-2epova.users.cfx.re',
'tycoon-2epovd.users.cfx.re',
'tycoon-wdrypd.users.cfx.re',
'tycoon-njyvop.users.cfx.re',
'tycoon-2r4588.users.cfx.re',
'tycoon-npl5oy.users.cfx.re',
'tycoon-2vzlde.users.cfx.re',
'tycoon-wmapod.users.cfx.re',
'tycoon-wxjpge.users.cfx.re',
];
const statNames = [
'firefighter_streak_record',
'omni_void_leaderboard',
'ems_streak_record',
'ems_deliveries',
'houses_crafted',
'toll_paid',
'trap_paid',
'drops_collected',
'quarry_excavate',
'quarry_coop',
'quarry_deliver',
'quarry_solo',
'vehicles_crafted',
'eastereggs_pickup',
'maid_maxscans',
'maid_tickets'
];
class TransportTycoon {
constructor(apiToken = '', trackCharges = false, timeout = 5000, maxRetries = 10, dontRetry = false) {
this.charges = {
checking: false,
count: 0,
loaded: false
};
this.settings = {
serverIndex: 0,
maxRetries: 10,
curRetries: 0
};
this.token = apiToken;
this.charges.checking = trackCharges;
this.settings.maxRetries = maxRetries;
this.tycoon = axios_1.default.create({
baseURL: `https://${tycoonServers[0]}/status`,
timeout
});
if (apiToken)
this.tycoon.defaults.headers['X-Tycoon-Key'] = apiToken;
this.tycoon.interceptors.response.use((response) => {
this.settings.curRetries = 0;
if (this.charges.checking && response.headers['x-tycoon-charges'])
this.charges.count = parseInt(response.headers['x-tycoon-charges'], 10);
return Promise.resolve(response);
}, async (error) => {
var _a, _b, _c, _d, _e, _f, _g;
if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 402) {
return Promise.reject({ msg: '[TransportTycoon] You are out of API charges!', code: 'no_charges' });
}
else if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {
return Promise.reject({ msg: '[TransportTycoon] A key is required for this endpoint', code: 'key_protected' });
}
else if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 403) {
return Promise.reject({ msg: '[TransportTycoon] Invalid key given', code: 'invalid_key' });
}
else if (((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) === 404) {
return Promise.reject({ msg: `[TransportTycoon] Invalid API route - ${error.config.url}`, code: 'invalid_api' });
}
if (dontRetry)
return Promise.reject(error);
if (((error === null || error === void 0 ? void 0 : error.code) === 'ECONNABORTED' || (error === null || error === void 0 ? void 0 : error.code) === 'ECONNRESET' || ((_e = error === null || error === void 0 ? void 0 : error.response) === null || _e === void 0 ? void 0 : _e.status) === 502) && (error === null || error === void 0 ? void 0 : error.config)) {
if ((error === null || error === void 0 ? void 0 : error.code) === 'ECONNRESET' && ((_g = (_f = error === null || error === void 0 ? void 0 : error.config) === null || _f === void 0 ? void 0 : _f.url) === null || _g === void 0 ? void 0 : _g.includes('https://')))
return Promise.reject(error);
this.settings.serverIndex++;
if (this.settings.serverIndex > tycoonServers.length - 1)
this.settings.serverIndex = 0;
this.tycoon.defaults.baseURL = `https://${tycoonServers[this.settings.serverIndex]}/status`;
this.settings.curRetries++;
if (this.settings.curRetries > this.settings.maxRetries) {
this.settings.curRetries = 0;
return Promise.reject({ msg: `[TransportTycoon] Retry count of ${this.settings.maxRetries} exceeded`, code: 'max_retries', error });
}
try {
await this.tycoon.get('/alive');
error.config.baseURL = this.tycoon.defaults.baseURL;
return axios_1.default.request(error.config);
// eslint-disable-next-line no-empty
}
catch (err) { }
}
else {
return Promise.reject(error);
}
});
}
async setupCharges() {
if (this.charges.checking && this.token) {
const charges = await this.tycoon.get('/charges.json');
if (!(charges === null || charges === void 0 ? void 0 : charges.data[0]))
return Promise.resolve(false);
if (charges.data[0] === 0)
return Promise.reject({ msg: '[TransportTycoon] Charges returned 0. Is your key valid & does it have charges?', code: 'no_charges' });
this.charges.count = charges.data[0];
this.charges.loaded = true;
return Promise.resolve(charges.data[0]);
}
else
return Promise.resolve(false);
}
getCharges() {
return this.charges.count;
}
async getCurrentWeather(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/weather.json`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getActiveAirlineRoutes(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/airline.json`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getPlayerPositions(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/map/positions.json`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getPlayers(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/players.json`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getPlayersWidget(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/widget/players.json`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserFromDiscord(discordId) {
try {
const res = await this.tycoon.get(`/snowflake2user/${discordId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserInventoryHtml(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/inventory/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserSkillsHtml(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/skills/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserBusinesses(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/getuserbiz/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserOwnedVehicles(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/ownedvehicles/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserFaction(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/getuserfaq/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getKeyFactionSize() {
try {
const res = await this.tycoon.get('/faction/size.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getKeyFactionMembers() {
try {
const res = await this.tycoon.get('/faction/members.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getKeyFactionPerks() {
try {
const res = await this.tycoon.get('/faction/perks.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getKeyFactionBalance() {
try {
const res = await this.tycoon.get('/faction/balance.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getKeyFactionInfo() {
try {
const res = await this.tycoon.get('/faction/info.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserData(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/data/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getUserDataAdvanced(userId) {
if ((userId.length === 18 || userId.length === 17))
userId = (await this.getUserFromDiscord(userId)).user_id.toString();
try {
const res = await this.tycoon.get(`/dataadv/${userId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getTop10(statName) {
if (!statNames.includes(statName))
return Promise.reject('Stat name invalid. List of valid stats: ' + statNames.join(', '));
try {
const res = await this.tycoon.get(`/top10/${statName}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getResourceConfig(resourceName) {
try {
const res = await this.tycoon.get(`/config/${resourceName}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getAdvancedUserlist(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/status/advanced/`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getWebadmin(server = 0) {
if (server - 1 > tycoonServers.length)
return Promise.reject('Please enter a valid server id from 0 - 9.');
try {
const res = await this.tycoon.get(`https://${tycoonServers[server]}/webadmin/`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getEconomyInfo() {
try {
const res = await this.tycoon.get('/economy.csv');
const economy = res.data.split('\n');
economy.pop();
const formattedData = economy.map((data) => {
const splitData = data.split(';');
const cleanData = {
time: new Date(parseInt(splitData[0], 10) * 1000),
debt: splitData[1],
money: splitData[2],
debtCount: splitData[3],
millionares: splitData[4],
billionares: splitData[5]
};
return cleanData;
});
return Promise.resolve(formattedData);
}
catch (err) {
return Promise.reject(err);
}
}
async getChestAdvanced(searchId) {
try {
const res = await this.tycoon.get(`/chestadv/${searchId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getChest(searchId) {
try {
if (this.charges.checking && this.charges.count > 0)
this.charges.count--;
const res = await this.tycoon.get(`/chest/${searchId}`);
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
async getSkillRotation() {
try {
if (this.charges.checking && this.charges.count > 0)
this.charges.count--;
const res = await this.tycoon.get('/skillrotation.json');
return Promise.resolve(res.data);
}
catch (err) {
return Promise.reject(err);
}
}
}
exports.TransportTycoon = TransportTycoon;