UNPKG

24.2 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
8
9var _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; }; }();
10
11var _index = require("./index");
12
13var _index2 = _interopRequireDefault(_index);
14
15var _Utils = require("./Utils");
16
17var _Utils2 = _interopRequireDefault(_Utils);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
22
23var App = function () {
24 _createClass(App, null, [{
25 key: "PATH",
26
27 /**
28 * Provides access to the `applications` version 2 endpoint.
29 */
30 get: function get() {
31 return "/v2/applications";
32 }
33 /**
34 * @param {Credentials} credentials
35 * credentials to be used when interacting with the API.
36 * @param {Object} options
37 * Addition App options.
38 */
39
40 }]);
41
42 function App(credentials) {
43 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
44
45 _classCallCheck(this, App);
46
47 this.creds = credentials;
48 this.options = options;
49
50 // Used to facilitate testing of the call to the underlying object
51 this._nexmo = this.options.nexmoOverride || _index2.default;
52 }
53
54 _createClass(App, [{
55 key: "_convertMethodSignature",
56 value: function _convertMethodSignature(name, type, answerUrl, eventUrl, options) {
57 var capability = {};
58 switch (type) {
59 case "voice":
60 capability = {
61 voice: {
62 webhooks: {
63 answer_url: {
64 address: answerUrl,
65 http_method: "GET"
66 },
67 event_url: {
68 address: eventUrl,
69 http_method: "POST"
70 }
71 }
72 }
73 };
74 break;
75 case "messages":
76 capability = {
77 messages: {
78 webhooks: {
79 inbound_url: {
80 address: options.inbound_url,
81 http_method: "POST"
82 },
83 status_url: {
84 address: options.status_url,
85 http_method: "POST"
86 }
87 }
88 }
89 };
90 break;
91 case "rtc":
92 capability = {
93 rtc: {
94 webhooks: {
95 event_url: {
96 address: eventUrl,
97 http_method: "POST"
98 }
99 }
100 }
101 };
102 break;
103 }
104
105 return {
106 name: name,
107 capabilities: capability
108 };
109 }
110 }, {
111 key: "_convertApplicationResponse",
112 value: function _convertApplicationResponse(application) {
113 for (var capability in application.capabilities) {
114 application[capability] = {
115 webhooks: []
116 };
117 for (var webhook in application.capabilities[capability].webhooks) {
118 application[capability].webhooks.push({
119 endpoint_type: webhook,
120 endpoint: application.capabilities[capability].webhooks[webhook].address,
121 http_method: application.capabilities[capability].webhooks[webhook].http_method
122 });
123 }
124 }
125
126 delete application.capabilities;
127 return application;
128 }
129 }, {
130 key: "_convertApplicationListResponse",
131 value: function _convertApplicationListResponse(applicationResponseHandler) {
132 return function (response) {
133 response.count = response.total_items;
134 response.page_index = response.page;
135 for (var i in response._embedded.applications) {
136 response._embedded.applications[i] = applicationResponseHandler(response._embedded.applications[i]);
137 }
138
139 return response;
140 };
141 }
142
143 /**
144 * TODO: document
145 */
146
147 }, {
148 key: "create",
149 value: function create(name, type, answerUrl, eventUrl, options, callback) {
150 var params = {};
151 var responseParser = null;
152
153 if (arguments.length > 2) {
154 params = JSON.stringify(this._convertMethodSignature(name, type, answerUrl, eventUrl, options));
155 responseParser = this._convertApplicationResponse;
156 } else {
157 params = JSON.stringify(name);
158 callback = type;
159 }
160
161 var authorization = this.creds.apiKey + ":" + this.creds.apiSecret;
162
163 var config = {
164 host: this.options.apiHost || "api.nexmo.com",
165 path: App.PATH,
166 method: "POST",
167 body: params,
168 headers: {
169 "Content-Type": "application/json",
170 Authorization: "Basic " + Buffer.from(authorization).toString("base64")
171 }
172 };
173
174 this.options.httpClient.request(config, callback, callback, false, responseParser);
175 }
176
177 /**
178 * TODO: document
179 */
180
181 }, {
182 key: "get",
183 value: function get(params, callback) {
184 var v2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
185
186 var authorization = this.creds.apiKey + ":" + this.creds.apiSecret;
187 var responseParser = null;
188
189 if ((typeof params === "undefined" ? "undefined" : _typeof(params)) !== "object") {
190 responseParser = this._convertApplicationResponse;
191 } else {
192 responseParser = this._convertApplicationListResponse(this._convertApplicationResponse);
193 }
194
195 if (v2) {
196 responseParser = null;
197 }
198
199 var config = {
200 host: this.options.apiHost || "api.nexmo.com",
201 path: _Utils2.default.createPathWithQuery(App.PATH, params),
202 method: "GET",
203 body: undefined,
204 headers: {
205 "Content-Type": "application/json",
206 Authorization: "Basic " + Buffer.from(authorization).toString("base64")
207 }
208 };
209
210 this.options.httpClient.request(config, callback, callback, false, responseParser);
211 }
212
213 /**
214 * TODO: document
215 */
216
217 }, {
218 key: "update",
219 value: function update(appId, name, type, answerUrl, eventUrl, options, callback) {
220 var params = {};
221 var responseParser = null;
222 if (arguments.length > 3) {
223 params = JSON.stringify(this._convertMethodSignature(name, type, answerUrl, eventUrl, options));
224 responseParser = this._convertApplicationResponse;
225 } else {
226 params = JSON.stringify(name);
227 callback = type;
228 }
229
230 var authorization = this.creds.apiKey + ":" + this.creds.apiSecret;
231
232 var config = {
233 host: this.options.apiHost || "api.nexmo.com",
234 path: App.PATH + "/" + appId,
235 method: "PUT",
236 body: params,
237 headers: {
238 "Content-Type": "application/json",
239 Authorization: "Basic " + Buffer.from(authorization).toString("base64")
240 }
241 };
242
243 this.options.httpClient.request(config, callback, callback, false, responseParser);
244 }
245
246 /**
247 * TODO: document
248 */
249
250 }, {
251 key: "delete",
252 value: function _delete(appId, callback) {
253 var authorization = this.creds.apiKey + ":" + this.creds.apiSecret;
254
255 var config = {
256 host: this.options.apiHost || "api.nexmo.com",
257 path: App.PATH + "/" + appId,
258 method: "DELETE",
259 body: "{}",
260 headers: {
261 "Content-Type": "application/json",
262 Authorization: "Basic " + Buffer.from(authorization).toString("base64")
263 }
264 };
265
266 this.options.httpClient.request(config, callback);
267 }
268 }]);
269
270 return App;
271}();
272
273exports.default = App;
274module.exports = exports["default"];
275//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BcHAuanMiXSwibmFtZXMiOlsiQXBwIiwiY3JlZGVudGlhbHMiLCJvcHRpb25zIiwiY3JlZHMiLCJfbmV4bW8iLCJuZXhtb092ZXJyaWRlIiwibmFtZSIsInR5cGUiLCJhbnN3ZXJVcmwiLCJldmVudFVybCIsImNhcGFiaWxpdHkiLCJ2b2ljZSIsIndlYmhvb2tzIiwiYW5zd2VyX3VybCIsImFkZHJlc3MiLCJodHRwX21ldGhvZCIsImV2ZW50X3VybCIsIm1lc3NhZ2VzIiwiaW5ib3VuZF91cmwiLCJzdGF0dXNfdXJsIiwicnRjIiwiY2FwYWJpbGl0aWVzIiwiYXBwbGljYXRpb24iLCJ3ZWJob29rIiwicHVzaCIsImVuZHBvaW50X3R5cGUiLCJlbmRwb2ludCIsImFwcGxpY2F0aW9uUmVzcG9uc2VIYW5kbGVyIiwicmVzcG9uc2UiLCJjb3VudCIsInRvdGFsX2l0ZW1zIiwicGFnZV9pbmRleCIsInBhZ2UiLCJpIiwiX2VtYmVkZGVkIiwiYXBwbGljYXRpb25zIiwiY2FsbGJhY2siLCJwYXJhbXMiLCJyZXNwb25zZVBhcnNlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsIkpTT04iLCJzdHJpbmdpZnkiLCJfY29udmVydE1ldGhvZFNpZ25hdHVyZSIsIl9jb252ZXJ0QXBwbGljYXRpb25SZXNwb25zZSIsImF1dGhvcml6YXRpb24iLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJjb25maWciLCJob3N0IiwiYXBpSG9zdCIsInBhdGgiLCJQQVRIIiwibWV0aG9kIiwiYm9keSIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwiaHR0cENsaWVudCIsInJlcXVlc3QiLCJ2MiIsIl9jb252ZXJ0QXBwbGljYXRpb25MaXN0UmVzcG9uc2UiLCJjcmVhdGVQYXRoV2l0aFF1ZXJ5IiwidW5kZWZpbmVkIiwiYXBwSWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBRUE7Ozs7QUFDQTs7Ozs7Ozs7SUFFTUEsRzs7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LFNBQXdDLEtBQUszQyxLQUFMLENBQVc0QyxTQUF6RDs7QUFFQSxVQUFJQyxTQUFTO0FBQ1hDLGNBQU0sS0FBSy9DLE9BQUwsQ0FBYWdELE9BQWIsSUFBd0IsZUFEbkI7QUFFWEMsY0FBU25ELElBQUlvRCxJQUFiLFNBQXFCYyxLQUZWO0FBR1hiLGdCQUFRLEtBSEc7QUFJWEMsY0FBTWpCLE1BSks7QUFLWGtCLGlCQUFTO0FBQ1AsMEJBQWdCLGtCQURUO0FBRVBDLG9DQUF3QkMsT0FBT0MsSUFBUCxDQUFZYixhQUFaLEVBQTJCYyxRQUEzQixDQUFvQyxRQUFwQztBQUZqQjtBQUxFLE9BQWI7O0FBV0EsV0FBS3pELE9BQUwsQ0FBYTBELFVBQWIsQ0FBd0JDLE9BQXhCLENBQ0ViLE1BREYsRUFFRVosUUFGRixFQUdFQSxRQUhGLEVBSUUsS0FKRixFQUtFRSxjQUxGO0FBT0Q7O0FBRUQ7Ozs7Ozs0QkFHTzRCLEssRUFBTzlCLFEsRUFBVTtBQUN0QixVQUFNUyxnQkFBbUIsS0FBSzFDLEtBQUwsQ0FBVzJDLE1BQTlCLFNBQXdDLEtBQUszQyxLQUFMLENBQVc0QyxTQUF6RDs7QUFFQSxVQUFJQyxTQUFTO0FBQ1hDLGNBQU0sS0FBSy9DLE9BQUwsQ0FBYWdELE9BQWIsSUFBd0IsZUFEbkI7QUFFWEMsY0FBU25ELElBQUlvRCxJQUFiLFNBQXFCYyxLQUZWO0FBR1hiLGdCQUFRLFFBSEc7QUFJWEMsY0FBTSxJQUpLO0FBS1hDLGlCQUFTO0FBQ1AsMEJBQWdCLGtCQURUO0FBRVBDLG9DQUF3QkMsT0FBT0MsSUFBUCxDQUFZYixhQUFaLEVBQTJCYyxRQUEzQixDQUFvQyxRQUFwQztBQUZqQjtBQUxFLE9BQWI7O0FBV0EsV0FBS3pELE9BQUwsQ0FBYTBELFVBQWIsQ0FBd0JDLE9BQXhCLENBQWdDYixNQUFoQyxFQUF3Q1osUUFBeEM7QUFDRDs7Ozs7O2tCQUdZcEMsRyIsImZpbGUiOiJBcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG5leG1vIGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIjtcblxuY2xhc3MgQXBwIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYGFwcGxpY2F0aW9uc2AgdmVyc2lvbiAyIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhdGljIGdldCBQQVRIKCkge1xuICAgIHJldHVybiBcIi92Mi9hcHBsaWNhdGlvbnNcIjtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogICAgY3JlZGVudGlhbHMgdG8gYmUgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIEFQSS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogICAgQWRkaXRpb24gQXBwIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjcmVkZW50aWFscywgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jcmVkcyA9IGNyZWRlbnRpYWxzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvLyBVc2VkIHRvIGZhY2lsaXRhdGUgdGVzdGluZyBvZiB0aGUgY2FsbCB0byB0aGUgdW5kZXJseWluZyBvYmplY3RcbiAgICB0aGlzLl9uZXhtbyA9IHRoaXMub3B0aW9ucy5uZXhtb092ZXJyaWRlIHx8IG5leG1vO1xuICB9XG5cbiAgX2NvbnZlcnRNZXRob2RTaWduYXR1cmUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucykge1xuICAgIGxldCBjYXBhYmlsaXR5ID0ge307XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwidm9pY2VcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICB2b2ljZToge1xuICAgICAgICAgICAgd2ViaG9va3M6IHtcbiAgICAgICAgICAgICAgYW5zd2VyX3VybDoge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGFuc3dlclVybCxcbiAgICAgICAgICAgICAgICBodHRwX21ldGhvZDogXCJHRVRcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBldmVudF91cmw6IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBldmVudFVybCxcbiAgICAgICAgICAgICAgICBodHRwX21ldGhvZDogXCJQT1NUXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWVzc2FnZXNcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgd2ViaG9va3M6IHtcbiAgICAgICAgICAgICAgaW5ib3VuZF91cmw6IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBvcHRpb25zLmluYm91bmRfdXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdGF0dXNfdXJsOiB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogb3B0aW9ucy5zdGF0dXNfdXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJydGNcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICBydGM6IHtcbiAgICAgICAgICAgIHdlYmhvb2tzOiB7XG4gICAgICAgICAgICAgIGV2ZW50X3VybDoge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGV2ZW50VXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIGNhcGFiaWxpdGllczogY2FwYWJpbGl0eVxuICAgIH07XG4gIH1cblxuICBfY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2UoYXBwbGljYXRpb24pIHtcbiAgICBmb3IgKGxldCBjYXBhYmlsaXR5IGluIGFwcGxpY2F0aW9uLmNhcGFiaWxpdGllcykge1xuICAgICAgYXBwbGljYXRpb25bY2FwYWJpbGl0eV0gPSB7XG4gICAgICAgIHdlYmhvb2tzOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAobGV0IHdlYmhvb2sgaW4gYXBwbGljYXRpb24uY2FwYWJpbGl0aWVzW2NhcGFiaWxpdHldLndlYmhvb2tzKSB7XG4gICAgICAgIGFwcGxpY2F0aW9uW2NhcGFiaWxpdHldLndlYmhvb2tzLnB1c2goe1xuICAgICAgICAgIGVuZHBvaW50X3R5cGU6IHdlYmhvb2ssXG4gICAgICAgICAgZW5kcG9pbnQ6XG4gICAgICAgICAgICBhcHBsaWNhdGlvbi5jYXBhYmlsaXRpZXNbY2FwYWJpbGl0eV0ud2ViaG9va3Nbd2ViaG9va10uYWRkcmVzcyxcbiAgICAgICAgICBodHRwX21ldGhvZDpcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uLmNhcGFiaWxpdGllc1tjYXBhYmlsaXR5XS53ZWJob29rc1t3ZWJob29rXS5odHRwX21ldGhvZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGUgYXBwbGljYXRpb24uY2FwYWJpbGl0aWVzO1xuICAgIHJldHVybiBhcHBsaWNhdGlvbjtcbiAgfVxuXG4gIF9jb252ZXJ0QXBwbGljYXRpb25MaXN0UmVzcG9uc2UoYXBwbGljYXRpb25SZXNwb25zZUhhbmRsZXIpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgPT4ge1xuICAgICAgcmVzcG9uc2UuY291bnQgPSByZXNwb25zZS50b3RhbF9pdGVtcztcbiAgICAgIHJlc3BvbnNlLnBhZ2VfaW5kZXggPSByZXNwb25zZS5wYWdlO1xuICAgICAgZm9yIChsZXQgaSBpbiByZXNwb25zZS5fZW1iZWRkZWQuYXBwbGljYXRpb25zKSB7XG4gICAgICAgIHJlc3BvbnNlLl9lbWJlZGRlZC5hcHBsaWNhdGlvbnNbaV0gPSBhcHBsaWNhdGlvblJlc3BvbnNlSGFuZGxlcihcbiAgICAgICAgICByZXNwb25zZS5fZW1iZWRkZWQuYXBwbGljYXRpb25zW2ldXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IGRvY3VtZW50XG4gICAqL1xuICBjcmVhdGUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyYW1zID0ge307XG4gICAgbGV0IHJlc3BvbnNlUGFyc2VyID0gbnVsbDtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMuX2NvbnZlcnRNZXRob2RTaWduYXR1cmUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucylcbiAgICAgICk7XG4gICAgICByZXNwb25zZVBhcnNlciA9IHRoaXMuX2NvbnZlcnRBcHBsaWNhdGlvblJlc3BvbnNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIGNhbGxiYWNrID0gdHlwZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRob3JpemF0aW9uID0gYCR7dGhpcy5jcmVkcy5hcGlLZXl9OiR7dGhpcy5jcmVkcy5hcGlTZWNyZXR9YDtcblxuICAgIHZhciBjb25maWcgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdGlvbnMuYXBpSG9zdCB8fCBcImFwaS5uZXhtby5jb21cIixcbiAgICAgIHBhdGg6IEFwcC5QQVRILFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBmYWxzZSxcbiAgICAgIHJlc3BvbnNlUGFyc2VyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiBkb2N1bWVudFxuICAgKi9cbiAgZ2V0KHBhcmFtcywgY2FsbGJhY2ssIHYyID0gZmFsc2UpIHtcbiAgICBjb25zdCBhdXRob3JpemF0aW9uID0gYCR7dGhpcy5jcmVkcy5hcGlLZXl9OiR7dGhpcy5jcmVkcy5hcGlTZWNyZXR9YDtcbiAgICBsZXQgcmVzcG9uc2VQYXJzZXIgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uTGlzdFJlc3BvbnNlKFxuICAgICAgICB0aGlzLl9jb252ZXJ0QXBwbGljYXRpb25SZXNwb25zZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodjIpIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmFwaUhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOiBVdGlscy5jcmVhdGVQYXRoV2l0aFF1ZXJ5KEFwcC5QQVRILCBwYXJhbXMpLFxuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYXV0aG9yaXphdGlvbikudG9TdHJpbmcoXCJiYXNlNjRcIil9YFxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KFxuICAgICAgY29uZmlnLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBjYWxsYmFjayxcbiAgICAgIGZhbHNlLFxuICAgICAgcmVzcG9uc2VQYXJzZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IGRvY3VtZW50XG4gICAqL1xuICB1cGRhdGUoYXBwSWQsIG5hbWUsIHR5cGUsIGFuc3dlclVybCwgZXZlbnRVcmwsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIGxldCByZXNwb25zZVBhcnNlciA9IG51bGw7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy5fY29udmVydE1ldGhvZFNpZ25hdHVyZShuYW1lLCB0eXBlLCBhbnN3ZXJVcmwsIGV2ZW50VXJsLCBvcHRpb25zKVxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KG5hbWUpO1xuICAgICAgY2FsbGJhY2sgPSB0eXBlO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBgJHt0aGlzLmNyZWRzLmFwaUtleX06JHt0aGlzLmNyZWRzLmFwaVNlY3JldH1gO1xuXG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5hcGlIb3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogYCR7QXBwLlBBVEh9LyR7YXBwSWR9YCxcbiAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBmYWxzZSxcbiAgICAgIHJlc3BvbnNlUGFyc2VyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiBkb2N1bWVudFxuICAgKi9cbiAgZGVsZXRlKGFwcElkLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBgJHt0aGlzLmNyZWRzLmFwaUtleX06JHt0aGlzLmNyZWRzLmFwaVNlY3JldH1gO1xuXG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5hcGlIb3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogYCR7QXBwLlBBVEh9LyR7YXBwSWR9YCxcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGJvZHk6IFwie31cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChjb25maWcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXX0=
\No newline at end of file