UNPKG

transporttycoon

Version:

Wrapper for the Transport Tycoon FiveM server API

403 lines (402 loc) 15.7 kB
"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;