UNPKG

camelot-unchained

Version:
141 lines (127 loc) 6.17 kB
/** * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } require('isomorphic-fetch'); var CoreSettings_1 = require('../core/CoreSettings'); var client_1 = require('../core/client'); var events_1 = require('../events'); var RestUtil = require('./RestUtil'); var Settings = function () { function Settings(channel) { var _this = this; _classCallCheck(this, Settings); this.core = new CoreSettings_1.default(); this.timeout = 2000; if (client_1.hasClientAPI()) { events_1.default.on('init', function () { _this.apiToken = client_1.default.loginToken; _this.channelId = client_1.default.patchResourceChannel; _this.determineApiDetails(); }); } else if ("patcherAPI" in window) { (function () { // running under the patcher, loginToken is not yet available, so // define apiToken as a getter and fetch loginToken when we actually // need it. var patcherAPI = window.patcherAPI; _this.url = 'https://api.camelotunchained.com'; _this.port = 443; Object.defineProperty(_this, "apiToken", { get: function get() { return patcherAPI.loginToken; } }); })(); } } _createClass(Settings, [{ key: 'determineApiDetails', value: function determineApiDetails() { // TODO remove this when there are channel based API's this.url = this.core.publicApiUrl; this.port = this.core.publicApiPort; // TODO enable below when there are channel based API's // switch (this.channelId) { // case channelId.HATCHERY: // this.url = this.core.hatcheryApiUrl; // this.port = this.core.hatcheryApiPort; // break; // case channelId.WYRMLING: // this.url = this.core.wyrmlingApiUrl; // this.port = this.core.wyrmlingApiPort; // break; // } } }]); return Settings; }(); // default to Hatchery var settings = new Settings(4); function makeAPIUrl(endpoint) { if (endpoint.indexOf('://') != -1) return endpoint; // we already have a fully formed url, skip var url = settings.url; // only add port if it is required if (url.indexOf('https://') === 0 && settings.port !== 443 || url.indexOf('http://') === 0 && settings.port !== 80) { url = url + ':' + settings.port; } return url + '/' + endpoint.replace(/^\//, ''); } function addDefaultHeaders(headers, requireAuth) { var version = arguments.length <= 2 || arguments[2] === undefined ? 1 : arguments[2]; if (headers.hasOwnProperty('Accept') === false) { headers['accept'] = 'application/json;version=' + version; } } function addDefaultQueryParameters(query, requireAuth) { if (requireAuth && query.hasOwnProperty('loginToken') === false) { query.loginToken = settings.apiToken; } } function getJSON(endpoint) { var requireAuth = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; var query = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var version = arguments.length <= 3 || arguments[3] === undefined ? 1 : arguments[3]; var headers = {}; addDefaultHeaders(headers, requireAuth, version); addDefaultQueryParameters(query, requireAuth); return fetch(RestUtil.makeQueryString(makeAPIUrl(endpoint), query), { method: 'get', headers: headers }).then(RestUtil.checkStatus).then(RestUtil.parseJSON); } exports.getJSON = getJSON; function deleteJSON(endpoint) { var requireAuth = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; var query = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var version = arguments.length <= 3 || arguments[3] === undefined ? 1 : arguments[3]; var headers = {}; addDefaultHeaders(headers, requireAuth, version); addDefaultQueryParameters(query, requireAuth); return fetch(RestUtil.makeQueryString(makeAPIUrl(endpoint), query), { method: 'delete', headers: headers }).then(RestUtil.checkStatus); // no response body for a DELETE } exports.deleteJSON = deleteJSON; function postJSON(endpoint) { var requireAuth = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; var data = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var query = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; var version = arguments.length <= 4 || arguments[4] === undefined ? 1 : arguments[4]; var headers = { 'Content-Type': 'application/json' }; addDefaultHeaders(headers, requireAuth, version); addDefaultQueryParameters(query, requireAuth); return fetch(RestUtil.makeQueryString(makeAPIUrl(endpoint), query), { method: 'post', headers: headers, body: JSON.stringify(data) }).then(RestUtil.checkStatus).then(RestUtil.parseJSON); } exports.postJSON = postJSON;