UNPKG

@silverbirder/zoom-meeting-creator

Version:

zoom-meeting-creator is a Google Apps Script for creating zoom meetings.

235 lines (206 loc) 18.6 kB
// @see https://qiita.com/kudota/items/b480610cc3f575a8ec6f function Zoom() { } function Slack() { }/******/ (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.ts"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./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.ts": /*!**********************!*\ !*** ./src/index.ts ***! \**********************/ /*! exports provided: Zoom, Slack */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom/zoomImpl */ "./src/zoom/zoomImpl.ts"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Zoom", function() { return _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__["ZoomImpl"]; }); /* harmony import */ var _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slack/slackImpl */ "./src/slack/slackImpl.ts"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Slack", function() { return _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__["SlackImpl"]; }); // @see https://qiita.com/kudota/items/b480610cc3f575a8ec6f global.Zoom = _zoom_zoomImpl__WEBPACK_IMPORTED_MODULE_0__["ZoomImpl"]; global.Slack = _slack_slackImpl__WEBPACK_IMPORTED_MODULE_1__["SlackImpl"]; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./src/slack/slackImpl.ts": /*!********************************!*\ !*** ./src/slack/slackImpl.ts ***! \********************************/ /*! exports provided: SlackImpl */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SlackImpl", function() { return SlackImpl; }); var SlackImpl = /** @class */ (function () { function SlackImpl() { } SlackImpl.prototype.sendToWebHook = function (webHookUrl, payload) { var options = { "method": "post", "contentType": "application/json", "payload": JSON.stringify(payload) }; UrlFetchApp.fetch(webHookUrl, options); }; return SlackImpl; }()); /***/ }), /***/ "./src/zoom/zoomImpl.ts": /*!******************************!*\ !*** ./src/zoom/zoomImpl.ts ***! \******************************/ /*! exports provided: ZoomImpl */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZoomImpl", function() { return ZoomImpl; }); var CHARSET = 'UTF-8'; var ZoomImpl = /** @class */ (function () { function ZoomImpl(apiKey, apiSecret) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.token = ''; } ZoomImpl.prototype.updateToken = function () { var encodeText = Utilities.base64Encode(JSON.stringify({ 'alg': 'HS256', 'typ': 'JWT' })) + "." + Utilities.base64Encode(JSON.stringify({ "iss": this.apiKey, "exp": Date.now() + 3600 })); this.token = encodeText + "." + Utilities.base64Encode(Utilities.computeHmacSha256Signature(encodeText, this.apiSecret)); }; ZoomImpl.prototype.createUserMeeting = function (userId, params) { var requestOptions = this._requestOptions('post'); requestOptions.payload = JSON.stringify(params); var response = UrlFetchApp.fetch("https://api.zoom.us/v2/users/" + userId + "/meetings", requestOptions); return JSON.parse(response.getContentText(CHARSET)); }; ZoomImpl.prototype.getUsers = function () { var response = UrlFetchApp.fetch("https://api.zoom.us/v2/users/", this._requestOptions('get')); return JSON.parse(response.getContentText(CHARSET)).users; }; ZoomImpl.prototype.getUserByEmail = function (email) { var users = this.getUsers(); return users.filter(function (user) { return user.email == email; })[0]; }; ZoomImpl.prototype._requestOptions = function (method) { return { 'method': method, 'contentType': 'application/json', 'headers': { 'Authorization': 'Bearer ' + this.token } }; }; return ZoomImpl; }()); /***/ }) /******/ }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NsYWNrL3NsYWNrSW1wbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvem9vbS96b29tSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOzs7Ozs7Ozs7Ozs7O0FDbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDMkM7QUFDRztBQUM5QyxjQUFjLHVEQUFRO0FBQ3RCLGVBQWUsMERBQVM7QUFDeUI7Ozs7Ozs7Ozs7Ozs7O0FDTGpEO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ29COzs7Ozs7Ozs7Ozs7O0FDYnJCO0FBQUE7QUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDRCQUE0QixFQUFFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNtQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLy8gQHNlZSBodHRwczovL3FpaXRhLmNvbS9rdWRvdGEvaXRlbXMvYjQ4MDYxMGNjM2Y1NzVhOGVjNmZcbmltcG9ydCB7IFpvb21JbXBsIH0gZnJvbSBcIi4vem9vbS96b29tSW1wbFwiO1xuaW1wb3J0IHsgU2xhY2tJbXBsIH0gZnJvbSBcIi4vc2xhY2svc2xhY2tJbXBsXCI7XG5nbG9iYWwuWm9vbSA9IFpvb21JbXBsO1xuZ2xvYmFsLlNsYWNrID0gU2xhY2tJbXBsO1xuZXhwb3J0IHsgWm9vbUltcGwgYXMgWm9vbSwgU2xhY2tJbXBsIGFzIFNsYWNrLCB9O1xuIiwidmFyIFNsYWNrSW1wbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTbGFja0ltcGwoKSB7XG4gICAgfVxuICAgIFNsYWNrSW1wbC5wcm90b3R5cGUuc2VuZFRvV2ViSG9vayA9IGZ1bmN0aW9uICh3ZWJIb29rVXJsLCBwYXlsb2FkKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgXCJtZXRob2RcIjogXCJwb3N0XCIsXG4gICAgICAgICAgICBcImNvbnRlbnRUeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgXCJwYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH07XG4gICAgICAgIFVybEZldGNoQXBwLmZldGNoKHdlYkhvb2tVcmwsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgcmV0dXJuIFNsYWNrSW1wbDtcbn0oKSk7XG5leHBvcnQgeyBTbGFja0ltcGwgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBDSEFSU0VUID0gJ1VURi04JztcbnZhciBab29tSW1wbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBab29tSW1wbChhcGlLZXksIGFwaVNlY3JldCkge1xuICAgICAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICAgICAgdGhpcy5hcGlTZWNyZXQgPSBhcGlTZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSAnJztcbiAgICB9XG4gICAgWm9vbUltcGwucHJvdG90eXBlLnVwZGF0ZVRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW5jb2RlVGV4dCA9IFV0aWxpdGllcy5iYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgJ2FsZyc6ICdIUzI1NicsXG4gICAgICAgICAgICAndHlwJzogJ0pXVCdcbiAgICAgICAgfSkpICsgXCIuXCIgKyBVdGlsaXRpZXMuYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIFwiaXNzXCI6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgXCJleHBcIjogRGF0ZS5ub3coKSArIDM2MDBcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnRva2VuID0gZW5jb2RlVGV4dCArIFwiLlwiICsgVXRpbGl0aWVzLmJhc2U2NEVuY29kZShVdGlsaXRpZXMuY29tcHV0ZUhtYWNTaGEyNTZTaWduYXR1cmUoZW5jb2RlVGV4dCwgdGhpcy5hcGlTZWNyZXQpKTtcbiAgICB9O1xuICAgIFpvb21JbXBsLnByb3RvdHlwZS5jcmVhdGVVc2VyTWVldGluZyA9IGZ1bmN0aW9uICh1c2VySWQsIHBhcmFtcykge1xuICAgICAgICB2YXIgcmVxdWVzdE9wdGlvbnMgPSB0aGlzLl9yZXF1ZXN0T3B0aW9ucygncG9zdCcpO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5wYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gVXJsRmV0Y2hBcHAuZmV0Y2goXCJodHRwczovL2FwaS56b29tLnVzL3YyL3VzZXJzL1wiICsgdXNlcklkICsgXCIvbWVldGluZ3NcIiwgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRDb250ZW50VGV4dChDSEFSU0VUKSk7XG4gICAgfTtcbiAgICBab29tSW1wbC5wcm90b3R5cGUuZ2V0VXNlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IFVybEZldGNoQXBwLmZldGNoKFwiaHR0cHM6Ly9hcGkuem9vbS51cy92Mi91c2Vycy9cIiwgdGhpcy5fcmVxdWVzdE9wdGlvbnMoJ2dldCcpKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0Q29udGVudFRleHQoQ0hBUlNFVCkpLnVzZXJzO1xuICAgIH07XG4gICAgWm9vbUltcGwucHJvdG90eXBlLmdldFVzZXJCeUVtYWlsID0gZnVuY3Rpb24gKGVtYWlsKSB7XG4gICAgICAgIHZhciB1c2VycyA9IHRoaXMuZ2V0VXNlcnMoKTtcbiAgICAgICAgcmV0dXJuIHVzZXJzLmZpbHRlcihmdW5jdGlvbiAodXNlcikgeyByZXR1cm4gdXNlci5lbWFpbCA9PSBlbWFpbDsgfSlbMF07XG4gICAgfTtcbiAgICBab29tSW1wbC5wcm90b3R5cGUuX3JlcXVlc3RPcHRpb25zID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21ldGhvZCc6IG1ldGhvZCxcbiAgICAgICAgICAgICdjb250ZW50VHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdoZWFkZXJzJzogeyAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIHRoaXMudG9rZW4gfVxuICAgICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIFpvb21JbXBsO1xufSgpKTtcbmV4cG9ydCB7IFpvb21JbXBsIH07XG4iXSwic291cmNlUm9vdCI6IiJ9