camelot-unchained
Version:
Camelot Unchained Client Library
141 lines (127 loc) • 6.17 kB
JavaScript
/**
* 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/.
*/
;
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;