UNPKG

gravit-api

Version:

JS API implementation for GravitLauncher

351 lines (307 loc) 11.4 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["GravitApi"] = factory(); else root["GravitApi"] = factory(); })(window, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./src/index.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/get-random-values/index.js": /*!*************************************************!*\ !*** ./node_modules/get-random-values/index.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var window = __webpack_require__(/*! global/window */ "./node_modules/global/window.js"); var nodeCrypto = __webpack_require__(/*! crypto */ 0); function getRandomValues(buf) { if (window.crypto && window.crypto.getRandomValues) { return window.crypto.getRandomValues(buf); } if (typeof window.msCrypto === 'object' && typeof window.msCrypto.getRandomValues === 'function') { return window.msCrypto.getRandomValues(buf); } if (nodeCrypto.randomBytes) { if (!(buf instanceof Uint8Array)) { throw new TypeError('expected Uint8Array'); } if (buf.length > 65536) { var e = new Error(); e.code = 22; e.message = 'Failed to execute \'getRandomValues\' on \'Crypto\': The ' + 'ArrayBufferView\'s byte length (' + buf.length + ') exceeds the ' + 'number of bytes of entropy available via this API (65536).'; e.name = 'QuotaExceededError'; throw e; } var bytes = nodeCrypto.randomBytes(buf.length); buf.set(bytes); return buf; } else { throw new Error('No secure random number generator available.'); } } module.exports = getRandomValues; /***/ }), /***/ "./node_modules/global/window.js": /*!***************************************!*\ !*** ./node_modules/global/window.js ***! \***************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var win; if (typeof window !== "undefined") { win = window; } else if (typeof global !== "undefined") { win = global; } else if (typeof self !== "undefined"){ win = self; } else { win = {}; } module.exports = win; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/isomorphic-ws/browser.js": /*!***********************************************!*\ !*** ./node_modules/isomorphic-ws/browser.js ***! \***********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js var ws = null if (typeof WebSocket !== 'undefined') { ws = WebSocket } else if (typeof MozWebSocket !== 'undefined') { ws = MozWebSocket } else if (typeof global !== 'undefined') { ws = global.WebSocket || global.MozWebSocket } else if (typeof window !== 'undefined') { ws = window.WebSocket || window.MozWebSocket } else if (typeof self !== 'undefined') { ws = self.WebSocket || self.MozWebSocket } module.exports = ws /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ "./src/index.js": /*!**********************!*\ !*** ./src/index.js ***! \**********************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { const WebSocket = __webpack_require__(/*! isomorphic-ws */ "./node_modules/isomorphic-ws/browser.js"); const getRandomValues = __webpack_require__(/*! get-random-values */ "./node_modules/get-random-values/index.js"); module.exports = class GravitApi { constructor() { this.requestMap = new Map(); } /** * Connect to websocket * @param {string} url * @return {Promise<GravitApi | Error>} */ connect(url) { return new Promise((resolve, reject) => { this.socket = new WebSocket(url); this.socket.onopen = () => { this.onOpen(); resolve(this); }; this.socket.onerror = (err) => { this.onError(); reject(err); }; this.socket.onclose = this.onClose; this.socket.onmessage = this.onMessage; this.socket.GravitApi = this; }); } /** * Close websocket connection */ close() { this.socket.close(); } /** * Send request for websocket * @param {string} type request type * @param {object} obj request data * @return {Promise<object>} response data */ send(type, obj = {}) { return new Promise((resolve, reject) => { if (typeof type !== "string" || type === '') reject({type: "error", error: "Invalid request type"}); obj.type = type; obj.requestUUID = this.getUUIDv4(); this.requestMap.set(obj.requestUUID, data => { if (["error", "exception"].includes(data.type)) reject(data); else resolve(data); }); this.socket.send(JSON.stringify(obj)); }) } /** * @return {string} uuid v4 (random) */ getUUIDv4() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) ); } /* Events */ onOpen() { console.log('Connection established'); } onClose(event) { if (event.wasClean) return console.log('Connection closed'); if (event.code === 1006) console.error('Connection break'); else { console.error('Unknown error'); console.dir(event); } } onMessage(event) { const obj = JSON.parse(event.data); const requestMap = this.GravitApi.requestMap; if (obj.requestUUID && requestMap.has(obj.requestUUID)) { requestMap.get(obj.requestUUID)(obj); requestMap.delete(obj.requestUUID); } else { if (obj.type === "error") console.error(obj.error); else { console.error('Unknown message'); console.dir(event); } } } onError() { console.error('Connection error'); } } /***/ }), /***/ 0: /*!************************!*\ !*** crypto (ignored) ***! \************************/ /*! no static exports found */ /***/ (function(module, exports) { /* (ignored) */ /***/ }) /******/ }); }); //# sourceMappingURL=gravit-api.js.map