UNPKG

@tf2pickup-org/serveme-tf-client

Version:
83 lines 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Client = void 0; const create_serveme_tf_http_client_1 = require("./create-serveme-tf-http-client"); const reservation_1 = require("./reservation"); const generate_password_1 = require("./generate-password"); const date_fns_1 = require("date-fns"); const http_client_error_1 = require("./errors/http-client.error"); const errors_1 = require("./errors"); class Client { constructor(options) { this.endpoint = options.endpoint; this.httpClient = (0, create_serveme_tf_http_client_1.createServemeTfHttpClient)(this.endpoint, options.apiKey); } async findOptions() { const entryResponse = await this.httpClient.get('/reservations/new'); const findServers = entryResponse.actions.find_servers; const reservationResponse = await this.httpClient.post(findServers, { reservation: entryResponse.reservation, }); const servers = reservationResponse.servers.map(server => ({ ...server, id: server.id, })); const serverConfigs = reservationResponse.server_configs.map(config => ({ ...config, id: config.id, })); const whitelists = reservationResponse.whitelists.map(whitelist => ({ ...whitelist, id: whitelist.id, })); return { servers, serverConfigs, whitelists, }; } async create(options) { var _a, _b, _c, _d, _e, _f, _g, _h; const startsAt = (_a = options.startsAt) !== null && _a !== void 0 ? _a : new Date(); const endsAt = (_b = options.endsAt) !== null && _b !== void 0 ? _b : (0, date_fns_1.add)(startsAt, { hours: 2 }); const rcon = (_e = (_d = (_c = this.reservation) === null || _c === void 0 ? void 0 : _c.rcon) !== null && _d !== void 0 ? _d : options.rcon) !== null && _e !== void 0 ? _e : (0, generate_password_1.generatePassword)(); const password = (_h = (_g = (_f = this.reservation) === null || _f === void 0 ? void 0 : _f.password) !== null && _g !== void 0 ? _g : options.password) !== null && _h !== void 0 ? _h : (0, generate_password_1.generatePassword)(); try { const response = await this.httpClient.post('/reservations', { reservation: { server_id: options.serverId, starts_at: startsAt.toISOString(), ends_at: endsAt.toISOString(), rcon, password, ...(options.enablePlugins && { enable_plugins: options.enablePlugins, }), ...(options.enableDemosTf && { enable_demos_tf: options.enableDemosTf, }), ...(options.firstMap && { first_map: options.firstMap }), }, }); return new reservation_1.Reservation(this, response.reservation); } catch (error) { if (error instanceof http_client_error_1.HttpClientError) { const errorList = error.data.reservation.errors; const message = Object.entries(errorList) .map(([key, value]) => `${key} ${value.error}`) .join('; '); throw new errors_1.ServemeTfApiError(message, error); } else { throw error; } } } async fetch(id) { const response = await this.httpClient.get(`/reservations/${id}`); return new reservation_1.Reservation(this, response.reservation); } } exports.Client = Client; //# sourceMappingURL=client.js.map