1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 |
|
9 | 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; }; }();
|
10 |
|
11 | var _index = require("./index");
|
12 |
|
13 | var _index2 = _interopRequireDefault(_index);
|
14 |
|
15 | var _Utils = require("./Utils");
|
16 |
|
17 | var _Utils2 = _interopRequireDefault(_Utils);
|
18 |
|
19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20 |
|
21 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
22 |
|
23 | var 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 |
|
273 | exports.default = App;
|
274 | module.exports = exports["default"];
|
275 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BcHAuanMiXSwibmFtZXMiOlsiQXBwIiwiY3JlZGVudGlhbHMiLCJvcHRpb25zIiwiY3JlZHMiLCJfbmV4bW8iLCJuZXhtb092ZXJyaWRlIiwibmFtZSIsInR5cGUiLCJhbnN3ZXJVcmwiLCJldmVudFVybCIsImNhcGFiaWxpdHkiLCJ2b2ljZSIsIndlYmhvb2tzIiwiYW5zd2VyX3VybCIsImFkZHJlc3MiLCJodHRwX21ldGhvZCIsImV2ZW50X3VybCIsIm1lc3NhZ2VzIiwiaW5ib3VuZF91cmwiLCJzdGF0dXNfdXJsIiwicnRjIiwiY2FwYWJpbGl0aWVzIiwiYXBwbGljYXRpb24iLCJ3ZWJob29rIiwicHVzaCIsImVuZHBvaW50X3R5cGUiLCJlbmRwb2ludCIsImFwcGxpY2F0aW9uUmVzcG9uc2VIYW5kbGVyIiwicmVzcG9uc2UiLCJjb3VudCIsInRvdGFsX2l0ZW1zIiwicGFnZV9pbmRleCIsInBhZ2UiLCJpIiwiX2VtYmVkZGVkIiwiYXBwbGljYXRpb25zIiwiY2FsbGJhY2siLCJwYXJhbXMiLCJyZXNwb25zZVBhcnNlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsIkpTT04iLCJzdHJpbmdpZnkiLCJfY29udmVydE1ldGhvZFNpZ25hdHVyZSIsIl9jb252ZXJ0QXBwbGljYXRpb25SZXNwb25zZSIsImF1dGhvcml6YXRpb24iLCJhcGlLZXkiLCJhcGlTZWNyZXQiLCJjb25maWciLCJob3N0IiwiYXBpSG9zdCIsInBhdGgiLCJQQVRIIiwibWV0aG9kIiwiYm9keSIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwiaHR0cENsaWVudCIsInJlcXVlc3QiLCJ2MiIsIl9jb252ZXJ0QXBwbGljYXRpb25MaXN0UmVzcG9uc2UiLCJjcmVhdGVQYXRoV2l0aFF1ZXJ5IiwidW5kZWZpbmVkIiwiYXBwSWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBRUE7Ozs7QUFDQTs7Ozs7Ozs7SUFFTUEsRzs7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LFNBQXdDLEtBQUszQyxLQUFMLENBQVc0QyxTQUF6RDs7QUFFQSxVQUFJQyxTQUFTO0FBQ1hDLGNBQU0sS0FBSy9DLE9BQUwsQ0FBYWdELE9BQWIsSUFBd0IsZUFEbkI7QUFFWEMsY0FBU25ELElBQUlvRCxJQUFiLFNBQXFCYyxLQUZWO0FBR1hiLGdCQUFRLEtBSEc7QUFJWEMsY0FBTWpCLE1BSks7QUFLWGtCLGlCQUFTO0FBQ1AsMEJBQWdCLGtCQURUO0FBRVBDLG9DQUF3QkMsT0FBT0MsSUFBUCxDQUFZYixhQUFaLEVBQTJCYyxRQUEzQixDQUFvQyxRQUFwQztBQUZqQjtBQUxFLE9BQWI7O0FBV0EsV0FBS3pELE9BQUwsQ0FBYTBELFVBQWIsQ0FBd0JDLE9BQXhCLENBQ0ViLE1BREYsRUFFRVosUUFGRixFQUdFQSxRQUhGLEVBSUUsS0FKRixFQUtFRSxjQUxGO0FBT0Q7O0FBRUQ7Ozs7Ozs0QkFHTzRCLEssRUFBTzlCLFEsRUFBVTtBQUN0QixVQUFNUyxnQkFBbUIsS0FBSzFDLEtBQUwsQ0FBVzJDLE1BQTlCLFNBQXdDLEtBQUszQyxLQUFMLENBQVc0QyxTQUF6RDs7QUFFQSxVQUFJQyxTQUFTO0FBQ1hDLGNBQU0sS0FBSy9DLE9BQUwsQ0FBYWdELE9BQWIsSUFBd0IsZUFEbkI7QUFFWEMsY0FBU25ELElBQUlvRCxJQUFiLFNBQXFCYyxLQUZWO0FBR1hiLGdCQUFRLFFBSEc7QUFJWEMsY0FBTSxJQUpLO0FBS1hDLGlCQUFTO0FBQ1AsMEJBQWdCLGtCQURUO0FBRVBDLG9DQUF3QkMsT0FBT0MsSUFBUCxDQUFZYixhQUFaLEVBQTJCYyxRQUEzQixDQUFvQyxRQUFwQztBQUZqQjtBQUxFLE9BQWI7O0FBV0EsV0FBS3pELE9BQUwsQ0FBYTBELFVBQWIsQ0FBd0JDLE9BQXhCLENBQWdDYixNQUFoQyxFQUF3Q1osUUFBeEM7QUFDRDs7Ozs7O2tCQUdZcEMsRyIsImZpbGUiOiJBcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG5leG1vIGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIjtcblxuY2xhc3MgQXBwIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYGFwcGxpY2F0aW9uc2AgdmVyc2lvbiAyIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhdGljIGdldCBQQVRIKCkge1xuICAgIHJldHVybiBcIi92Mi9hcHBsaWNhdGlvbnNcIjtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogICAgY3JlZGVudGlhbHMgdG8gYmUgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIEFQSS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogICAgQWRkaXRpb24gQXBwIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjcmVkZW50aWFscywgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jcmVkcyA9IGNyZWRlbnRpYWxzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAvLyBVc2VkIHRvIGZhY2lsaXRhdGUgdGVzdGluZyBvZiB0aGUgY2FsbCB0byB0aGUgdW5kZXJseWluZyBvYmplY3RcbiAgICB0aGlzLl9uZXhtbyA9IHRoaXMub3B0aW9ucy5uZXhtb092ZXJyaWRlIHx8IG5leG1vO1xuICB9XG5cbiAgX2NvbnZlcnRNZXRob2RTaWduYXR1cmUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucykge1xuICAgIGxldCBjYXBhYmlsaXR5ID0ge307XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwidm9pY2VcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICB2b2ljZToge1xuICAgICAgICAgICAgd2ViaG9va3M6IHtcbiAgICAgICAgICAgICAgYW5zd2VyX3VybDoge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGFuc3dlclVybCxcbiAgICAgICAgICAgICAgICBodHRwX21ldGhvZDogXCJHRVRcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBldmVudF91cmw6IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBldmVudFVybCxcbiAgICAgICAgICAgICAgICBodHRwX21ldGhvZDogXCJQT1NUXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWVzc2FnZXNcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgd2ViaG9va3M6IHtcbiAgICAgICAgICAgICAgaW5ib3VuZF91cmw6IHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBvcHRpb25zLmluYm91bmRfdXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdGF0dXNfdXJsOiB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogb3B0aW9ucy5zdGF0dXNfdXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJydGNcIjpcbiAgICAgICAgY2FwYWJpbGl0eSA9IHtcbiAgICAgICAgICBydGM6IHtcbiAgICAgICAgICAgIHdlYmhvb2tzOiB7XG4gICAgICAgICAgICAgIGV2ZW50X3VybDoge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGV2ZW50VXJsLFxuICAgICAgICAgICAgICAgIGh0dHBfbWV0aG9kOiBcIlBPU1RcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIGNhcGFiaWxpdGllczogY2FwYWJpbGl0eVxuICAgIH07XG4gIH1cblxuICBfY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2UoYXBwbGljYXRpb24pIHtcbiAgICBmb3IgKGxldCBjYXBhYmlsaXR5IGluIGFwcGxpY2F0aW9uLmNhcGFiaWxpdGllcykge1xuICAgICAgYXBwbGljYXRpb25bY2FwYWJpbGl0eV0gPSB7XG4gICAgICAgIHdlYmhvb2tzOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAobGV0IHdlYmhvb2sgaW4gYXBwbGljYXRpb24uY2FwYWJpbGl0aWVzW2NhcGFiaWxpdHldLndlYmhvb2tzKSB7XG4gICAgICAgIGFwcGxpY2F0aW9uW2NhcGFiaWxpdHldLndlYmhvb2tzLnB1c2goe1xuICAgICAgICAgIGVuZHBvaW50X3R5cGU6IHdlYmhvb2ssXG4gICAgICAgICAgZW5kcG9pbnQ6XG4gICAgICAgICAgICBhcHBsaWNhdGlvbi5jYXBhYmlsaXRpZXNbY2FwYWJpbGl0eV0ud2ViaG9va3Nbd2ViaG9va10uYWRkcmVzcyxcbiAgICAgICAgICBodHRwX21ldGhvZDpcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uLmNhcGFiaWxpdGllc1tjYXBhYmlsaXR5XS53ZWJob29rc1t3ZWJob29rXS5odHRwX21ldGhvZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGUgYXBwbGljYXRpb24uY2FwYWJpbGl0aWVzO1xuICAgIHJldHVybiBhcHBsaWNhdGlvbjtcbiAgfVxuXG4gIF9jb252ZXJ0QXBwbGljYXRpb25MaXN0UmVzcG9uc2UoYXBwbGljYXRpb25SZXNwb25zZUhhbmRsZXIpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgPT4ge1xuICAgICAgcmVzcG9uc2UuY291bnQgPSByZXNwb25zZS50b3RhbF9pdGVtcztcbiAgICAgIHJlc3BvbnNlLnBhZ2VfaW5kZXggPSByZXNwb25zZS5wYWdlO1xuICAgICAgZm9yIChsZXQgaSBpbiByZXNwb25zZS5fZW1iZWRkZWQuYXBwbGljYXRpb25zKSB7XG4gICAgICAgIHJlc3BvbnNlLl9lbWJlZGRlZC5hcHBsaWNhdGlvbnNbaV0gPSBhcHBsaWNhdGlvblJlc3BvbnNlSGFuZGxlcihcbiAgICAgICAgICByZXNwb25zZS5fZW1iZWRkZWQuYXBwbGljYXRpb25zW2ldXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IGRvY3VtZW50XG4gICAqL1xuICBjcmVhdGUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyYW1zID0ge307XG4gICAgbGV0IHJlc3BvbnNlUGFyc2VyID0gbnVsbDtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuICAgICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMuX2NvbnZlcnRNZXRob2RTaWduYXR1cmUobmFtZSwgdHlwZSwgYW5zd2VyVXJsLCBldmVudFVybCwgb3B0aW9ucylcbiAgICAgICk7XG4gICAgICByZXNwb25zZVBhcnNlciA9IHRoaXMuX2NvbnZlcnRBcHBsaWNhdGlvblJlc3BvbnNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIGNhbGxiYWNrID0gdHlwZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRob3JpemF0aW9uID0gYCR7dGhpcy5jcmVkcy5hcGlLZXl9OiR7dGhpcy5jcmVkcy5hcGlTZWNyZXR9YDtcblxuICAgIHZhciBjb25maWcgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdGlvbnMuYXBpSG9zdCB8fCBcImFwaS5uZXhtby5jb21cIixcbiAgICAgIHBhdGg6IEFwcC5QQVRILFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBmYWxzZSxcbiAgICAgIHJlc3BvbnNlUGFyc2VyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiBkb2N1bWVudFxuICAgKi9cbiAgZ2V0KHBhcmFtcywgY2FsbGJhY2ssIHYyID0gZmFsc2UpIHtcbiAgICBjb25zdCBhdXRob3JpemF0aW9uID0gYCR7dGhpcy5jcmVkcy5hcGlLZXl9OiR7dGhpcy5jcmVkcy5hcGlTZWNyZXR9YDtcbiAgICBsZXQgcmVzcG9uc2VQYXJzZXIgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uTGlzdFJlc3BvbnNlKFxuICAgICAgICB0aGlzLl9jb252ZXJ0QXBwbGljYXRpb25SZXNwb25zZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodjIpIHtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmFwaUhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOiBVdGlscy5jcmVhdGVQYXRoV2l0aFF1ZXJ5KEFwcC5QQVRILCBwYXJhbXMpLFxuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYXV0aG9yaXphdGlvbikudG9TdHJpbmcoXCJiYXNlNjRcIil9YFxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KFxuICAgICAgY29uZmlnLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBjYWxsYmFjayxcbiAgICAgIGZhbHNlLFxuICAgICAgcmVzcG9uc2VQYXJzZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IGRvY3VtZW50XG4gICAqL1xuICB1cGRhdGUoYXBwSWQsIG5hbWUsIHR5cGUsIGFuc3dlclVybCwgZXZlbnRVcmwsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIGxldCByZXNwb25zZVBhcnNlciA9IG51bGw7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy5fY29udmVydE1ldGhvZFNpZ25hdHVyZShuYW1lLCB0eXBlLCBhbnN3ZXJVcmwsIGV2ZW50VXJsLCBvcHRpb25zKVxuICAgICAgKTtcbiAgICAgIHJlc3BvbnNlUGFyc2VyID0gdGhpcy5fY29udmVydEFwcGxpY2F0aW9uUmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KG5hbWUpO1xuICAgICAgY2FsbGJhY2sgPSB0eXBlO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBgJHt0aGlzLmNyZWRzLmFwaUtleX06JHt0aGlzLmNyZWRzLmFwaVNlY3JldH1gO1xuXG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5hcGlIb3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogYCR7QXBwLlBBVEh9LyR7YXBwSWR9YCxcbiAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBmYWxzZSxcbiAgICAgIHJlc3BvbnNlUGFyc2VyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPOiBkb2N1bWVudFxuICAgKi9cbiAgZGVsZXRlKGFwcElkLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSBgJHt0aGlzLmNyZWRzLmFwaUtleX06JHt0aGlzLmNyZWRzLmFwaVNlY3JldH1gO1xuXG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5hcGlIb3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogYCR7QXBwLlBBVEh9LyR7YXBwSWR9YCxcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGJvZHk6IFwie31cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGhvcml6YXRpb24pLnRvU3RyaW5nKFwiYmFzZTY0XCIpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChjb25maWcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXX0= |
\ | No newline at end of file |