@tf2pickup-org/serveme-tf-client
Version:
A serveme.tf API client
83 lines • 3.78 kB
JavaScript
;
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